Compare commits
867 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2c28e1c479 | |||
| 5c98cb61fa | |||
| 7f4f540cf3 | |||
| 0820eafb6a | |||
| 05f58dd3be | |||
| cd7a9a6875 | |||
| a0298fc94f | |||
| bb9f3f3fe8 | |||
| b3d52ff187 | |||
| 17a0727ac2 | |||
| 589b02c662 | |||
| c7e61df19a | |||
| 5b7d29eae6 | |||
| 29032c22c0 | |||
| 0d27fed9c1 | |||
| 69cadef5a3 | |||
| 2df35bb1a0 | |||
| 0b6d521a8a | |||
| eeb12961e9 | |||
| c1e1a15f59 | |||
| 6dcff335e5 | |||
| e53abf72b3 | |||
| da81236777 | |||
| 078510f261 | |||
| 7deb7a69bf | |||
| 0215b42329 | |||
| 1b59b47109 | |||
| bfbd7ae4b8 | |||
| e48f58aa24 | |||
| d46d46ed1f | |||
| b0546beeb9 | |||
| f03181e94d | |||
| 82bf8152da | |||
| 5c79127062 | |||
| 694c5ebae4 | |||
| e5199b40bc | |||
| ae9826d290 | |||
| 77dae40d2f | |||
| 62a9198e5a | |||
| 96f34ffe4a | |||
| 3d7850adf3 | |||
| 4042f4aab5 | |||
| d2b9d6a9c4 | |||
| b98c16bf7e | |||
| 23daeb3a4c | |||
| c4086d931b | |||
| 83fc0fc71a | |||
| b0cdbfccc4 | |||
| ad65c28d86 | |||
| eae9161791 | |||
| 3406ddd45e | |||
| 5d2b7bf578 | |||
| 4ca39b286c | |||
| ad634b927a | |||
| e1d390f8a0 | |||
| 9138a14e2c | |||
| ced6613bb5 | |||
| 669467f196 | |||
| c1d17b95ec | |||
| cdb1a44875 | |||
| ecefcefde8 | |||
| 4831942dfa | |||
| 1f7b71edff | |||
| 7cd4376567 | |||
| 23f95f9940 | |||
| 7818201793 | |||
| f86b8d7e07 | |||
| e6dfda51d1 | |||
| 5bd2beb650 | |||
| a0621448f6 | |||
| 17a591f149 | |||
| 39fd9a745e | |||
| 81d26bb86e | |||
| 26996d640f | |||
| ed83558ae4 | |||
| 6ed7517522 | |||
| 9280c29fa9 | |||
| 40361deb56 | |||
| cf0a9ee8af | |||
| c3ab5c5da8 | |||
| f3bdc29e8e | |||
| 53c0b9d85b | |||
| 88319139ed | |||
| c8512f0592 | |||
| e5c0926571 | |||
| df1dfbbb92 | |||
| 746786a110 | |||
| 7a940570bb | |||
| a3eb60e068 | |||
| 9cfb712624 | |||
| 942a38349a | |||
| 7f13fd0ffd | |||
| ebf59807dc | |||
| dd93dea448 | |||
| 242d9812eb | |||
| 1495429f68 | |||
| 3e3626728a | |||
| 23b113b0c3 | |||
| 21a86dc646 | |||
| 0b51dd7e01 | |||
| d4487f1925 | |||
| 30ea3b7962 | |||
| 82ff9ceca7 | |||
| c68bea5a6b | |||
| 53660ad91f | |||
| c9d72036d8 | |||
| a961961105 | |||
| fb7b8fd9b1 | |||
| d87232f652 | |||
| f5e9774d55 | |||
| 417dc0a9dc | |||
| 7fc5a9bc60 | |||
| 66bbbec394 | |||
| 31f6420197 | |||
| 35c31a3fb5 | |||
| 55a08a0bda | |||
| 7091e285e6 | |||
| 422be4badb | |||
| 7c7ab6f2ad | |||
| 4f0e03bcc0 | |||
| 069dac5407 | |||
| b4b7f947a9 | |||
| 8c1f783dd9 | |||
| 8bddf33ab5 | |||
| 3dd651cf22 | |||
| 21b3eb98b6 | |||
| 327c8594c5 | |||
| cfddb40d79 | |||
| bba31a43eb | |||
| 73245e5930 | |||
| d2c78c8bb7 | |||
| 098449d7dc | |||
| 0b4b0f7b0d | |||
| e5b868cf73 | |||
| cdeb700f70 | |||
| 0f3f219ed2 | |||
| 17e082088b | |||
| bd22ab3df5 | |||
| d373ffa551 | |||
| 803c05992c | |||
| e5158c7635 | |||
| 51d2061edf | |||
| 2c19954d19 | |||
| ada02bce97 | |||
| 06361eb2c1 | |||
| 3ce4e4d356 | |||
| 6859bf8301 | |||
| 6b61ea547f | |||
| cc7d97319a | |||
| d4ae51d024 | |||
| 7a5d144d9d | |||
| b020162d79 | |||
| acdf9dd65c | |||
| 4933fb3f2c | |||
| d63dd3fa70 | |||
| 3587f47cca | |||
| 946ffb2ad9 | |||
| 43275ef943 | |||
| d41e93ef14 | |||
| 98c35ceab4 | |||
| 6e34910b75 | |||
| 63b69d94be | |||
| f7e3b1b0cb | |||
| 32171720f0 | |||
| caf2f12dee | |||
| d0615e8fec | |||
| 520038c750 | |||
| e290fff052 | |||
| e4ec886a6c | |||
| d46d241b5e | |||
| 597338ba5f | |||
| d93ccff534 | |||
| 27ca6c97cb | |||
| 748f738675 | |||
| 936fc76581 | |||
| ac73454538 | |||
| 64e1e419c8 | |||
| 677240cd2a | |||
| 3f173e4c5c | |||
| 47ce871043 | |||
| 2d44b7e3c2 | |||
| a7807c4ee1 | |||
| d3b2e50200 | |||
| 7c812664f3 | |||
| c416f5a1e5 | |||
| 03f4502232 | |||
| a4ef6a37fe | |||
| cbfe3d0b6e | |||
| 3544d30b54 | |||
| b934b11a60 | |||
| cabec6dbeb | |||
| 20558f5387 | |||
| 26d0f01592 | |||
| 5cedf8100f | |||
| 73890d6dda | |||
| 1a0a9564d0 | |||
| 2c21cddf8e | |||
| d6991fe8ac | |||
| ece470b4fb | |||
| 7e94e5ff4f | |||
| a6743561a2 | |||
| ef05571dbe | |||
| e362a36710 | |||
| b2477e2353 | |||
| 6ccd37856d | |||
| 5285d2a8e7 | |||
| 558737aa11 | |||
| bf32cb9ddf | |||
| 5b7ec40f5e | |||
| 3ee011d49d | |||
| 80433334cd | |||
| f5e0c6ba6e | |||
| e77038d23b | |||
| b2f42c3cde | |||
| 1566aad5e2 | |||
| 7aa85b5fdf | |||
| 3ec5ecd3a2 | |||
| 99427a86cd | |||
| cba2109b44 | |||
| e5f6238490 | |||
| 8e241482b7 | |||
| b8d82d94fc | |||
| 29fdcc8a41 | |||
| b51d85d218 | |||
| 633f546ea1 | |||
| 1601db07bd | |||
| 6bb6128b24 | |||
| b725b18bfa | |||
| fbe455c1c1 | |||
| 576783dbbb | |||
| a7db812c21 | |||
| f27fb5c874 | |||
| b8358d1634 | |||
| 4a825e8dcc | |||
| 1d18ebef99 | |||
| ddffb23fb3 | |||
| b32b9dee8a | |||
| ff81fc7c60 | |||
| 01fb6a2573 | |||
| afac2c5f8a | |||
| 4787918fac | |||
| 8fad0a9ea6 | |||
| f20a875ee9 | |||
| fb30c47123 | |||
| fad894e31a | |||
| a0e04a7a20 | |||
| 57b328538f | |||
| cd7143c5b7 | |||
| 552a413c01 | |||
| 655b1de0f4 | |||
| d2390f13d7 | |||
| cbd98327dc | |||
| 88e12fabaa | |||
| 9654ec5613 | |||
| 39d6e942fa | |||
| 7e2fbc9e10 | |||
| 1459f8bfb1 | |||
| 0d454578f2 | |||
| 6d6a70de61 | |||
| 09ab4d57d0 | |||
| a9e2f0e3de | |||
| 6675ae64cf | |||
| a015fa53e6 | |||
| e2360155a6 | |||
| 869792f88d | |||
| c22ccaffc4 | |||
| 583fe1d524 | |||
| c4a0bf2b2d | |||
| d3206d6883 | |||
| a7c13a61c3 | |||
| 52b503c99c | |||
| 7d65b1e5e1 | |||
| 5e4f412fd0 | |||
| 8f949caeb9 | |||
| 2bd17a5c8b | |||
| c6a2eb6c9d | |||
| eb449879b8 | |||
| 49b45b8ac5 | |||
| 35bc2efb61 | |||
| 9989145fb1 | |||
| 554c474cf0 | |||
| eded969ca1 | |||
| a28f93ff3b | |||
| 13345822bc | |||
| 9e6eba96fd | |||
| b3777d5317 | |||
| c48435407e | |||
| 3f577bd16c | |||
| dc9e175ac0 | |||
| 66b7e82b75 | |||
| 23398f9651 | |||
| 5bb7f5c8d2 | |||
| d2cca45511 | |||
| f503f99704 | |||
| 170f0a5021 | |||
| e12654ac3d | |||
| 274b7ee845 | |||
| 558a5a4948 | |||
| 27ebcf3325 | |||
| bc766093a3 | |||
| 3b54bb1614 | |||
| 648d81b2f7 | |||
| f9d964b790 | |||
| 16baa1f7f1 | |||
| 49553e867a | |||
| 5723ac469b | |||
| 2c7da91b39 | |||
| bc8fe1cea1 | |||
| e8d7e55640 | |||
| 021474ab2a | |||
| ea7dd5ae58 | |||
| 9219155104 | |||
| 5e7c4d47aa | |||
| a67a342bdf | |||
| 13431345cf | |||
| 78801bfcb5 | |||
| 1c0f4a4e30 | |||
| 7f90e34e38 | |||
| 38ab6a8dc0 | |||
| 48562916c3 | |||
| 67ed6cc430 | |||
| 35fd6c9458 | |||
| 68ada9e169 | |||
| 2e939bb9be | |||
| 55b20ea70d | |||
| 4d80e42219 | |||
| 4474896713 | |||
| 3604fae918 | |||
| 35d49085ae | |||
| 943d1b7db8 | |||
| 3a41f8ed03 | |||
| d8ad00673b | |||
| 08843f5845 | |||
| 20304ccc30 | |||
| 522f18d847 | |||
| 467e9cb170 | |||
| 9b505817b7 | |||
| 0c119ebab9 | |||
| ea9931bd05 | |||
| 0c29fb6595 | |||
| c8311132da | |||
| 657a87697e | |||
| c60698c24b | |||
| 58becbeb59 | |||
| 319cb3e15c | |||
| b4df1618ed | |||
| e23f2b7b7b | |||
| 1a0054ea48 | |||
| fa5ddc068d | |||
| 6279f8b33d | |||
| 6f9ef9c20e | |||
| 84e4b8f04f | |||
| b59770e8ca | |||
| 01cde02ea2 | |||
| 541222752a | |||
| fa9a2796be | |||
| 072c980c7d | |||
| 9a572e1993 | |||
| 6cb0d0cbfc | |||
| 7b120f21be | |||
| fa6ada69a6 | |||
| 5ec247663e | |||
| d85256bfa9 | |||
| ccb956b7d3 | |||
| 1aa6d7f0f0 | |||
| a4805cc99d | |||
| 9849f41b03 | |||
| 3bcb728c84 | |||
| 9d61f82f68 | |||
| 3b735771d8 | |||
| d8af04a5e3 | |||
| 39587ee1b7 | |||
| a48377bcee | |||
| 82303217af | |||
| f3e771ac1f | |||
| b813799334 | |||
| bc372564cf | |||
| 7155e3a9db | |||
| 5abb625ef5 | |||
| ff0ca7ee95 | |||
| cdcb10d8bc | |||
| 2c594c9b18 | |||
| d08f8ed62d | |||
| 20fc4a81b8 | |||
| ef7e71e93a | |||
| f092fac22e | |||
| eefeb7c0cf | |||
| 76c61e92f7 | |||
| a86387eec6 | |||
| 641e6398fd | |||
| 04c73b0ceb | |||
| d3afc86040 | |||
| 96131f64b4 | |||
| fcfc4210e8 | |||
| b5ae5f3f4d | |||
| 9cea792545 | |||
| 7d85ad55fb | |||
| 6961f9bca0 | |||
| d63547c7dd | |||
| 3605ab617c | |||
| 005708f30d | |||
| 5a3bf6c3d6 | |||
| bb9c11492c | |||
| 3d9d0247e7 | |||
| 50645cf465 | |||
| 6a58dc67e9 | |||
| 65d02e479a | |||
| e3ebd725cd | |||
| 288e89e0da | |||
| 4d955fda7e | |||
| ea06a99874 | |||
| f292a1db89 | |||
| 467d8b41f8 | |||
| 9f834561c3 | |||
| 1ab4fca573 | |||
| cd341cc301 | |||
| dfad6b79e6 | |||
| 4f83504d7b | |||
| 149e3cb2a3 | |||
| 5e266fc0bf | |||
| e3d7af1833 | |||
| 9f4da3732e | |||
| 8f45e1703c | |||
| ec6b251ef4 | |||
| 557311aad7 | |||
| b8d833a450 | |||
| 852f21a7dc | |||
| f1069929df | |||
| ead32f6885 | |||
| 249003e594 | |||
| 28497f10dd | |||
| 37adb11be5 | |||
| 63d4051059 | |||
| 7f27b30ac9 | |||
| 2bc0a44764 | |||
| fd480f6437 | |||
| 0011fd5166 | |||
| 88ec4fe02f | |||
| c5a14f28f1 | |||
| 056e3aede2 | |||
| 6a39ea5b43 | |||
| 05b91bcbfb | |||
| 4402c686d8 | |||
| 43ee7b1dc1 | |||
| 115124c528 | |||
| 470b7eddb3 | |||
| 0c65353c17 | |||
| c32443fe35 | |||
| 03c4145fa8 | |||
| 2459ed7320 | |||
| 23d150e618 | |||
| d7082b39bb | |||
| ed25a1593e | |||
| ca7d56cefd | |||
| 1bba172393 | |||
| 7e43e8e4dd | |||
| b5a8c2a2a0 | |||
| ac353fc037 | |||
| a340308dc1 | |||
| feaab95087 | |||
| 14c2469a3f | |||
| 14ed75b0a7 | |||
| 4e38c73586 | |||
| 3c4cb06644 | |||
| b7937c5c79 | |||
| aa56df75bd | |||
| 0f78123d69 | |||
| e4a4578b40 | |||
| 1c35e7d6f6 | |||
| 24b8d96709 | |||
| 1a3f7989df | |||
| 2249b3be12 | |||
| 289c4c2f9d | |||
| c5e84fe49a | |||
| 3d9d94c18a | |||
| 19f1adabea | |||
| c225dbbba2 | |||
| f599033a1a | |||
| 877928a57a | |||
| 8461a62c3a | |||
| 2b328721d4 | |||
| 31d231ed36 | |||
| cd4feed7de | |||
| ff4887b46c | |||
| 4c780e7074 | |||
| 34dc6da5ad | |||
| 030cee7ddf | |||
| 5bd06278d3 | |||
| dfb461307a | |||
| e179d215a7 | |||
| b1e4eeb2b5 | |||
| ed43e47115 | |||
| 1adc04caf6 | |||
| 6e5c404f94 | |||
| 7ae0fba8f1 | |||
| 52640fd5fd | |||
| 9a6ab4e64f | |||
| d5d4ae3305 | |||
| d5b2a3b007 | |||
| b588456d6a | |||
| f28484179d | |||
| c1804da8a2 | |||
| 0304286c2c | |||
| 33bad83ea7 | |||
| 0e35ad6329 | |||
| 1cbcc8dc25 | |||
| bf92b0103a | |||
| 9ad3180f6c | |||
| 0e270eec05 | |||
| 6e72301bd7 | |||
| a59d0f113b | |||
| 827fd67191 | |||
| 9b67ee04e6 | |||
| 5127237b40 | |||
| 2af184034b | |||
| 96e9942a9b | |||
| 603121f753 | |||
| b0020a904b | |||
| be2238411d | |||
| 939e3d589b | |||
| 6475d4496d | |||
| ef938bdf1f | |||
| 285ef4dab6 | |||
| bc2cb06a0e | |||
| 8715df4ab0 | |||
| 4d02c43189 | |||
| e962b9f4f6 | |||
| 93065de210 | |||
| 3b05177a3a | |||
| 6181ee494b | |||
| 8faf3f740f | |||
| 8ef7b23c04 | |||
| 36ea1e0b0f | |||
| edb2b3008c | |||
| 9330924636 | |||
| 2b6305ba48 | |||
| 1f38879fef | |||
| 630df1812f | |||
| 8137358e8e | |||
| 18f51a4dbe | |||
| 5eb4ecbf1c | |||
| e454408772 | |||
| eb36fb9280 | |||
| 3b48abba6d | |||
| 2b39b1e7ea | |||
| 84161768fa | |||
| b1a1b12e42 | |||
| 8b35a0a36f | |||
| ca969f0884 | |||
| 88489e4af6 | |||
| 884219fd90 | |||
| 60c0b8de0d | |||
| 25538205c9 | |||
| b34f6bcd0b | |||
| f0dfd89d26 | |||
| 46efeb0a46 | |||
| 1d804eba61 | |||
| 391d7df0b5 | |||
| 9020146df5 | |||
| 77f2287acc | |||
| e1ca953c40 | |||
| b857ba58ca | |||
| 140361e2c8 | |||
| 3aae81b307 | |||
| b361baae42 | |||
| d52568908f | |||
| 6b99cbe9a5 | |||
| df9c611f09 | |||
| 5dd03b4ecd | |||
| a3cd531e9e | |||
| 86f84b9ed0 | |||
| fc961993d5 | |||
| 8d7bcf4995 | |||
| 2a1bb84cf7 | |||
| 9134289303 | |||
| d19f57b0d5 | |||
| f8a0869314 | |||
| 85e2613f0b | |||
| 55c3fce790 | |||
| 42c0340880 | |||
| b5faf71be4 | |||
| 657ac76bbf | |||
| 3700ab0555 | |||
| c16837d3b6 | |||
| 0cb0a451a4 | |||
| d7efbd5044 | |||
| 1770e40aec | |||
| af7454b767 | |||
| 3e50e00f89 | |||
| e35647b25b | |||
| 70c62508a5 | |||
| f4f78722a7 | |||
| 9b1b505731 | |||
| babeea0c45 | |||
| fac1cab1d9 | |||
| 3f4ba31188 | |||
| 187f9ff0f4 | |||
| ba7cfecd5d | |||
| 7b706ee873 | |||
| 8809d5580e | |||
| e9aec03ce0 | |||
| bf9a7511f3 | |||
| 517c555d6a | |||
| edcf84a2a1 | |||
| 0fa01812eb | |||
| f610294d27 | |||
| 2ebd47c331 | |||
| 9d0b3649a1 | |||
| 699dbbf53f | |||
| b2ce20783e | |||
| 099f58a100 | |||
| 3029f762bf | |||
| 2bce2f96d8 | |||
| 8d38938da1 | |||
| 21d2c19333 | |||
| 4419ef42bb | |||
| 8461fc2f3b | |||
| eb8d78ea21 | |||
| f944c79269 | |||
| aa54a3e5a1 | |||
| 1d6357a76a | |||
| c66a3232ac | |||
| 7adb74699b | |||
| b31fede98e | |||
| cef8e05eb0 | |||
| e28ead71b6 | |||
| ccc11c8ed8 | |||
| c5f04753f9 | |||
| 9f4d338a02 | |||
| 96ca762543 | |||
| a1f80f20a7 | |||
| 8d8c72856d | |||
| 7d1c0ec4db | |||
| 16a68d8528 | |||
| 9c1f4efb6e | |||
| 41c4388d5c | |||
| f503ee945f | |||
| 125ef0a679 | |||
| 075283d9a8 | |||
| dbe19fc5f9 | |||
| 7fa70d1885 | |||
| d39cc2d65f | |||
| 9bdb0086b4 | |||
| eb25a2d42b | |||
| 476ec04b13 | |||
| 62a76f1ed2 | |||
| e063962ce7 | |||
| c1b7ced4e7 | |||
| 250b558878 | |||
| 374b15ff9e | |||
| de0e8bd519 | |||
| dd628646f2 | |||
| 0383f93aac | |||
| 7ae0d3960f | |||
| c0e8c155bd | |||
| 714fde2418 | |||
| 8479640252 | |||
| 649f8c2f7c | |||
| eee9670f82 | |||
| 07db739906 | |||
| 090eca72bc | |||
| be6dc9d0af | |||
| 81b610df16 | |||
| ee0b425538 | |||
| f4c1bac7a8 | |||
| f6fd93b67e | |||
| bad1183955 | |||
| 8590d7dbb8 | |||
| 808cc9195d | |||
| e4b2deed51 | |||
| 3dbb864e5e | |||
| a3e7b856b1 | |||
| 4cdd8e754a | |||
| 0d68df1d93 | |||
| 26fd1960e6 | |||
| af075c1cb2 | |||
| 19d3864a5d | |||
| f01b2502c8 | |||
| 0161fab1a3 | |||
| 364d0e0f02 | |||
| 7278716c65 | |||
| e79d47fed2 | |||
| 6348c77788 | |||
| ea87d8247e | |||
| af54a74a24 | |||
| 8123415163 | |||
| 45f64652ef | |||
| 79807dd948 | |||
| 6d3e691dd9 | |||
| 834dce571e | |||
| 8aef3b30fa | |||
| 4c9e2acb02 | |||
| 1c7cc3229c | |||
| 881b24c6e4 | |||
| b0aa561719 | |||
| 4abc6ea0cb | |||
| 33c07934b6 | |||
| 249de46078 | |||
| d19280aeb9 | |||
| 9a56467e13 | |||
| 1492f71d6c | |||
| 88bc292a37 | |||
| ff12d3d2e5 | |||
| 39de31f7b2 | |||
| 750cf6a26e | |||
| 7b754b723c | |||
| 7cddc08e1f | |||
| ddfdbb6ff0 | |||
| 3f05c57f61 | |||
| ddd39027e7 | |||
| 5a9d750f7d | |||
| b46b5352c4 | |||
| d6fcc48ed0 | |||
| a66758406e | |||
| 6c8b0ea59c | |||
| 59a56fc820 | |||
| 0eed6c360c | |||
| 46f3c2210d | |||
| 962a0e16c5 | |||
| 8feab0ad66 | |||
| 4eee9e18d5 | |||
| ae93328c21 | |||
| 0dac3077bd | |||
| 5491a468ba | |||
| b704410dd2 | |||
| aaf0c13838 | |||
| c795d04614 | |||
| b7d5bd5ab8 | |||
| b84ada1ab6 | |||
| 2451de0e1b | |||
| 373a5b5bb7 | |||
| a4fe76d2a7 | |||
| 1cacfffd5f | |||
| e88e8b1ed3 | |||
| 0c615f78a1 | |||
| 42aeed5421 | |||
| 669912ea9b | |||
| 6f6a79407b | |||
| b93146ab87 | |||
| 9583c522dd | |||
| 90c0e2e8f4 | |||
| aff1bdc853 | |||
| c0b0918c45 | |||
| 68a1b06674 | |||
| 09636c1a88 | |||
| 52e5d11d0a | |||
| 110507449c | |||
| da0e9c5299 | |||
| 109e628903 | |||
| d973165737 | |||
| 8ddba7a836 | |||
| 56c237410b | |||
| 5959e7c2ef | |||
| 9f18e6f152 | |||
| 171d3e1c88 | |||
| 9f5d968476 | |||
| 93483241ed | |||
| 34724c8d99 | |||
| 00ee7cd462 | |||
| 11fcf7ab6e | |||
| 3a25e108f5 | |||
| 5299e41ac4 | |||
| 37dc675b7a | |||
| 8718c57d41 | |||
| 6732726f13 | |||
| 9e4e5ddd03 | |||
| 96db0f38f7 | |||
| 793b144e3b | |||
| 9427ce29d1 | |||
| 6d6181cdfa | |||
| b3c5980e61 | |||
| c8c98753b5 | |||
| de0c476042 | |||
| cff1ea84ee | |||
| aff5e66ab8 | |||
| 4010a5709c | |||
| 82bfe0dbdf | |||
| 7e8b1906b2 | |||
| cf9e5417d0 | |||
| 3d849fd87c | |||
| 244be39ffa | |||
| 9ee9c93ef8 | |||
| 980e325ba1 | |||
| e954736b5d | |||
| 6e666b5d62 | |||
| 0833cd4b61 | |||
| 221b68d0b8 | |||
| 51bf04932b | |||
| 8cfc8b0157 | |||
| 7dc9eefc83 | |||
| 82838e6770 | |||
| f35e6412bd | |||
| 90e8aba660 | |||
| eb053cac2b | |||
| 5a6f259f2c | |||
| 911ee57de6 | |||
| 2536bae624 | |||
| 27ecb2c930 | |||
| 9ba5058e66 | |||
| 7faf9fb9a4 | |||
| 63196b5a8a | |||
| 8d37c9122f | |||
| 7caeff6af9 | |||
| ecf6698d4f | |||
| 48c10f9e5b | |||
| 89463b0d2d | |||
| d2e865146b | |||
| 4566d8717a | |||
| c2a12d903f | |||
| 2171fd0b18 | |||
| a051887971 | |||
| 6e28e5bdf0 | |||
| cd0d91a611 | |||
| ea943ce605 | |||
| b114526b12 | |||
| 58f813b6e8 | |||
| 04ff538d11 | |||
| d8ee9b8bca | |||
| 17027286bd | |||
| babd441b7e | |||
| 41e4379924 | |||
| d191e5038c | |||
| 8571e3608c | |||
| 08367867b9 | |||
| c39b56891e | |||
| 3c79ed375c | |||
| f075166a21 | |||
| a49015a317 | |||
| 92816e4689 | |||
| 56cd826400 | |||
| aee4f33c09 | |||
| 3177f74540 | |||
| e8b7c6df54 | |||
| a22364f545 | |||
| 8626e906cb | |||
| 980dec08cf | |||
| e2e68aea74 | |||
| 292a50f8c0 | |||
| 2027222074 | |||
| 93c3a64839 | |||
| 85aa4057f8 | |||
| 9cd30339e1 | |||
| 64c093109d | |||
| 667dd177ce | |||
| b67c568545 | |||
| 2fb36a9144 | |||
| f06c0dc463 | |||
| ce1541e915 | |||
| 212f004cad | |||
| b73dc849a5 | |||
| 283788d91c | |||
| 9b4b5c931e | |||
| d72ec51ccf | |||
| df5b9a1df0 | |||
| 0ac6e0614f | |||
| 45291ef571 | |||
| 304d17dd32 | |||
| dc8997b1ac | |||
| e1bfcb1816 | |||
| af981b37fe | |||
| 4a4c0914bc | |||
| bc41f8298b | |||
| a8bdd44cd1 | |||
| a078fa6779 | |||
| 947a846d2e | |||
| 4343c6a24f | |||
| fc7798b7d7 |
@@ -1,5 +1,6 @@
|
||||
boost_root
|
||||
.downloads-by-cmake
|
||||
Build
|
||||
common/netlist_keywords.*
|
||||
common/netlist_lexer.h
|
||||
common/pcb_plot_params_lexer.h
|
||||
@@ -27,6 +28,7 @@ version.h
|
||||
config.h
|
||||
install_manifest.txt
|
||||
Documentation/doxygen
|
||||
Documentation/development/doxygen
|
||||
*.bak
|
||||
common/pcb_plot_params_keywords.cpp
|
||||
include/pcb_plot_params_lexer.h
|
||||
|
||||
+27
-52
@@ -45,16 +45,11 @@
|
||||
#include <info3d_visu.h>
|
||||
#include <trackball.h>
|
||||
|
||||
// Exported function:
|
||||
void Set_Object_Data( std::vector< S3D_VERTEX >& aVertices, double aBiuTo3DUnits );
|
||||
|
||||
|
||||
void S3D_MASTER::Set_Object_Coords( std::vector< S3D_VERTEX >& aVertices )
|
||||
void S3D_MASTER::ObjectCoordsTo3DUnits( std::vector< S3D_VERTEX >& aVertices )
|
||||
{
|
||||
unsigned ii;
|
||||
|
||||
/* adjust object scale, rotation and offset position */
|
||||
for( ii = 0; ii < aVertices.size(); ii++ )
|
||||
for( unsigned ii = 0; ii < aVertices.size(); ii++ )
|
||||
{
|
||||
aVertices[ii].x *= m_MatScale.x;
|
||||
aVertices[ii].y *= m_MatScale.y;
|
||||
@@ -62,13 +57,31 @@ void S3D_MASTER::Set_Object_Coords( std::vector< S3D_VERTEX >& aVertices )
|
||||
|
||||
// adjust rotation
|
||||
if( m_MatRotation.x )
|
||||
RotatePoint( &aVertices[ii].y, &aVertices[ii].z, m_MatRotation.x * 10 );
|
||||
{
|
||||
double a = aVertices[ii].y;
|
||||
double b = aVertices[ii].z;
|
||||
RotatePoint( &a, &b, m_MatRotation.x * 10 );
|
||||
aVertices[ii].y = (float)a;
|
||||
aVertices[ii].z = (float)b;
|
||||
}
|
||||
|
||||
if( m_MatRotation.y )
|
||||
RotatePoint( &aVertices[ii].z, &aVertices[ii].x, m_MatRotation.y * 10 );
|
||||
{
|
||||
double a = aVertices[ii].z;
|
||||
double b = aVertices[ii].x;
|
||||
RotatePoint( &a, &b, m_MatRotation.x * 10 );
|
||||
aVertices[ii].z = (float)a;
|
||||
aVertices[ii].x = (float)b;
|
||||
}
|
||||
|
||||
if( m_MatRotation.z )
|
||||
RotatePoint( &aVertices[ii].x, &aVertices[ii].y, m_MatRotation.z * 10 );
|
||||
{
|
||||
double a = aVertices[ii].x;
|
||||
double b = aVertices[ii].y;
|
||||
RotatePoint( &a, &b, m_MatRotation.x * 10 );
|
||||
aVertices[ii].x = (float)a;
|
||||
aVertices[ii].y = (float)b;
|
||||
}
|
||||
|
||||
/* adjust offset position (offset is given in UNIT 3D (0.1 inch) */
|
||||
#define SCALE_3D_CONV ((IU_PER_MILS * 1000) / UNITS3D_TO_UNITSPCB)
|
||||
@@ -79,7 +92,7 @@ void S3D_MASTER::Set_Object_Coords( std::vector< S3D_VERTEX >& aVertices )
|
||||
}
|
||||
|
||||
|
||||
void Set_Object_Data( std::vector< S3D_VERTEX >& aVertices, double aBiuTo3DUnits )
|
||||
void TransfertToGLlist( std::vector< S3D_VERTEX >& aVertices, double aBiuTo3DUnits )
|
||||
{
|
||||
unsigned ii;
|
||||
GLfloat ax, ay, az, bx, by, bz, nx, ny, nz, r;
|
||||
@@ -138,52 +151,14 @@ void Set_Object_Data( std::vector< S3D_VERTEX >& aVertices, double aBiuTo3DUnits
|
||||
glEnd();
|
||||
}
|
||||
|
||||
|
||||
GLuint EDA_3D_CANVAS::DisplayCubeforTest()
|
||||
{
|
||||
GLuint gllist = glGenLists( 1 );
|
||||
|
||||
glNewList( gllist, GL_COMPILE_AND_EXECUTE );
|
||||
/* draw six faces of a cube */
|
||||
glBegin( GL_QUADS );
|
||||
glNormal3f( 0.0F, 0.0F, 1.0F );
|
||||
glVertex3f( 0.5F, 0.5F, 0.5F ); glVertex3f( -0.5F, 0.5F, 0.5F );
|
||||
glVertex3f( -0.5F, -0.5F, 0.5F ); glVertex3f( 0.5F, -0.5F, 0.5F );
|
||||
|
||||
glNormal3f( 0.0F, 0.0F, -1.0F );
|
||||
glVertex3f( -0.5F, -0.5F, -0.5F ); glVertex3f( -0.5F, 0.5F, -0.5F );
|
||||
glVertex3f( 0.5F, 0.5F, -0.5F ); glVertex3f( 0.5F, -0.5F, -0.5F );
|
||||
|
||||
glNormal3f( 0.0F, 1.0F, 0.0F );
|
||||
glVertex3f( 0.5F, 0.5F, 0.5F ); glVertex3f( 0.5F, 0.5F, -0.5F );
|
||||
glVertex3f( -0.5F, 0.5F, -0.5F ); glVertex3f( -0.5F, 0.5F, 0.5F );
|
||||
|
||||
glNormal3f( 0.0F, -1.0F, 0.0F );
|
||||
glVertex3f( -0.5F, -0.5F, -0.5F ); glVertex3f( 0.5F, -0.5F, -0.5F );
|
||||
glVertex3f( 0.5F, -0.5F, 0.5F ); glVertex3f( -0.5F, -0.5F, 0.5F );
|
||||
|
||||
glNormal3f( 1.0F, 0.0F, 0.0F );
|
||||
glVertex3f( 0.5F, 0.5F, 0.5F ); glVertex3f( 0.5F, -0.5F, 0.5F );
|
||||
glVertex3f( 0.5F, -0.5F, -0.5F ); glVertex3f( 0.5F, 0.5F, -0.5F );
|
||||
|
||||
glNormal3f( -1.0F, 0.0F, 0.0F );
|
||||
glVertex3f( -0.5F, -0.5F, -0.5F ); glVertex3f( -0.5F, -0.5F, 0.5F );
|
||||
glVertex3f( -0.5F, 0.5F, 0.5F ); glVertex3f( -0.5F, 0.5F, -0.5F );
|
||||
glEnd();
|
||||
|
||||
glEndList();
|
||||
|
||||
return gllist;
|
||||
}
|
||||
|
||||
VERTEX_VALUE_CTRL::VERTEX_VALUE_CTRL( wxWindow* aParent, wxBoxSizer* aBoxSizer )
|
||||
{
|
||||
wxString text;
|
||||
|
||||
wxFlexGridSizer* gridSizer = new wxFlexGridSizer( 0, 2, 0, 0 );
|
||||
gridSizer->AddGrowableCol( 1 );
|
||||
gridSizer->SetFlexibleDirection( wxHORIZONTAL );
|
||||
gridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
gridSizer->AddGrowableCol( 1 );
|
||||
gridSizer->SetFlexibleDirection( wxHORIZONTAL );
|
||||
gridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
aBoxSizer->Add( gridSizer, 0, wxEXPAND, 5 );
|
||||
|
||||
|
||||
+79
-62
@@ -16,17 +16,23 @@
|
||||
|
||||
#include <gestfich.h>
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
#include <GL/glew.h> // must be included before gl.h
|
||||
#endif
|
||||
|
||||
#include <3d_viewer.h>
|
||||
#include <3d_canvas.h>
|
||||
#include <info3d_visu.h>
|
||||
#include <trackball.h>
|
||||
#include <3d_viewer_id.h>
|
||||
|
||||
#include <textures/text_silk.c>
|
||||
#include <textures/text_pcb.c>
|
||||
|
||||
// -----------------
|
||||
// helper function (from wxWidgets, opengl/cube.cpp sample
|
||||
// -----------------
|
||||
void CheckGLError()
|
||||
void CheckGLError(const char *aFileName, int aLineNumber)
|
||||
{
|
||||
GLenum errLast = GL_NO_ERROR;
|
||||
|
||||
@@ -47,7 +53,8 @@ void CheckGLError()
|
||||
|
||||
errLast = err;
|
||||
|
||||
wxLogError(wxT("OpenGL error %d"), err);
|
||||
wxLogError( wxT( "OpenGL error %d At: %s, line: %d" ), err,
|
||||
GetChars( FROM_UTF8( aFileName ) ), aLineNumber );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,7 +85,12 @@ EDA_3D_CANVAS::EDA_3D_CANVAS( EDA_3D_FRAME* parent, int* attribList ) :
|
||||
wxFULL_REPAINT_ON_RESIZE )
|
||||
{
|
||||
m_init = false;
|
||||
m_gllist = 0;
|
||||
m_shadow_init = false;
|
||||
|
||||
// Clear all gl list identifiers:
|
||||
for( int ii = GL_ID_BEGIN; ii < GL_ID_END; ii++ )
|
||||
m_glLists[ii] = 0;
|
||||
|
||||
// Explicitly create a new rendering context instance for this canvas.
|
||||
m_glRC = new wxGLContext( this );
|
||||
|
||||
@@ -94,12 +106,25 @@ EDA_3D_CANVAS::~EDA_3D_CANVAS()
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_CANVAS::ClearLists()
|
||||
void EDA_3D_CANVAS::ClearLists( int aGlList )
|
||||
{
|
||||
if( m_gllist > 0 )
|
||||
glDeleteLists( m_gllist, 1 );
|
||||
if( aGlList )
|
||||
{
|
||||
if( m_glLists[aGlList] > 0 )
|
||||
glDeleteLists( m_glLists[aGlList], 1 );
|
||||
|
||||
m_gllist = 0;
|
||||
m_glLists[aGlList] = 0;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
for( int ii = GL_ID_BEGIN; ii < GL_ID_END; ii++ )
|
||||
{
|
||||
if( m_glLists[ii] > 0 )
|
||||
glDeleteLists( m_glLists[ii], 1 );
|
||||
|
||||
m_glLists[ii] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -473,15 +498,46 @@ void EDA_3D_CANVAS::OnEraseBackground( wxEraseEvent& event )
|
||||
// Do nothing, to avoid flashing.
|
||||
}
|
||||
|
||||
typedef struct s_sImage
|
||||
{
|
||||
unsigned int width;
|
||||
unsigned int height;
|
||||
unsigned int bytes_per_pixel; /* 2:RGB16, 3:RGB, 4:RGBA */
|
||||
unsigned char pixel_data[64 * 64 * 4 + 1];
|
||||
}tsImage;
|
||||
|
||||
|
||||
GLuint load_and_generate_texture( tsImage *image )
|
||||
{
|
||||
|
||||
GLuint texture;
|
||||
glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
|
||||
glPixelStorei (GL_PACK_ALIGNMENT, 1);
|
||||
|
||||
glGenTextures( 1, &texture );
|
||||
glBindTexture( GL_TEXTURE_2D, texture );
|
||||
gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGBA, image->width, image->height, GL_RGBA, GL_UNSIGNED_BYTE, image->pixel_data );
|
||||
|
||||
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR );
|
||||
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
|
||||
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
|
||||
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
|
||||
|
||||
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
|
||||
return texture;
|
||||
}
|
||||
|
||||
/* Initialize broad parameters for OpenGL */
|
||||
void EDA_3D_CANVAS::InitGL()
|
||||
{
|
||||
wxSize size = GetClientSize();
|
||||
|
||||
if( !m_init )
|
||||
{
|
||||
m_init = true;
|
||||
|
||||
|
||||
m_text_pcb = load_and_generate_texture( (tsImage *)&text_pcb );
|
||||
m_text_silk = load_and_generate_texture( (tsImage *)&text_silk );
|
||||
|
||||
g_Parm_3D_Visu.m_Zoom = 1.0;
|
||||
m_ZBottom = 1.0;
|
||||
m_ZTop = 10.0;
|
||||
@@ -496,7 +552,7 @@ void EDA_3D_CANVAS::InitGL()
|
||||
glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );
|
||||
|
||||
// speedups
|
||||
glEnable( GL_DITHER );
|
||||
//glEnable( GL_DITHER );
|
||||
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_DONT_CARE );
|
||||
glHint( GL_LINE_SMOOTH_HINT, GL_NICEST );
|
||||
glHint( GL_POLYGON_SMOOTH_HINT, GL_NICEST );
|
||||
@@ -504,52 +560,7 @@ void EDA_3D_CANVAS::InitGL()
|
||||
// Initialize alpha blending function.
|
||||
glEnable( GL_BLEND );
|
||||
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
|
||||
}
|
||||
|
||||
// set viewing projection
|
||||
|
||||
glMatrixMode( GL_PROJECTION );
|
||||
glLoadIdentity();
|
||||
|
||||
#define MAX_VIEW_ANGLE 160.0 / 45.0
|
||||
if( g_Parm_3D_Visu.m_Zoom > MAX_VIEW_ANGLE )
|
||||
g_Parm_3D_Visu.m_Zoom = MAX_VIEW_ANGLE;
|
||||
|
||||
if( Parent()->ModeIsOrtho() )
|
||||
{
|
||||
// OrthoReductionFactor is chosen so as to provide roughly the same size as
|
||||
// Perspective View
|
||||
const double orthoReductionFactor = 400 / g_Parm_3D_Visu.m_Zoom;
|
||||
|
||||
// Initialize Projection Matrix for Ortographic View
|
||||
glOrtho( -size.x / orthoReductionFactor, size.x / orthoReductionFactor,
|
||||
-size.y / orthoReductionFactor, size.y / orthoReductionFactor, 1, 10 );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Ratio width / height of the window display
|
||||
double ratio_HV = (double) size.x / size.y;
|
||||
|
||||
// Initialize Projection Matrix for Perspective View
|
||||
gluPerspective( 45.0 * g_Parm_3D_Visu.m_Zoom, ratio_HV, 1, 10 );
|
||||
}
|
||||
|
||||
|
||||
// position viewer
|
||||
glMatrixMode( GL_MODELVIEW );
|
||||
glLoadIdentity();
|
||||
glTranslatef( 0.0F, 0.0F, -( m_ZBottom + m_ZTop) / 2 );
|
||||
|
||||
// clear color and depth buffers
|
||||
glClearColor( g_Parm_3D_Visu.m_BgColor.m_Red,
|
||||
g_Parm_3D_Visu.m_BgColor.m_Green,
|
||||
g_Parm_3D_Visu.m_BgColor.m_Blue, 1 );
|
||||
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
||||
|
||||
// Setup light sources:
|
||||
SetLights();
|
||||
|
||||
CheckGLError();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -561,16 +572,19 @@ void EDA_3D_CANVAS::SetLights()
|
||||
|
||||
/* set viewing projection */
|
||||
light_color[3] = 1.0;
|
||||
GLfloat Z_axis_pos[4] = { 0.0, 0.0, 3.0, 0.0 };
|
||||
GLfloat lowZ_axis_pos[4] = { 0.0, 0.0, -3.0, 0.5 };
|
||||
GLfloat Z_axis_pos[4] = { 0.0, 0.0, 30.0, 0.0 };
|
||||
GLfloat lowZ_axis_pos[4] = { 0.0, 0.0, -30.0, 0.5 };
|
||||
|
||||
/* activate light */
|
||||
light = 1.0;
|
||||
light_color[0] = light_color[1] = light_color[2] = light;
|
||||
glLightfv( GL_LIGHT0, GL_POSITION, Z_axis_pos );
|
||||
glLightfv( GL_LIGHT0, GL_DIFFUSE, light_color );
|
||||
light = 0.3;
|
||||
light_color[0] = light_color[1] = light_color[2] = light;
|
||||
|
||||
light_color[0] = 0.3;
|
||||
light_color[1] = 0.3;
|
||||
light_color[2] = 0.4;
|
||||
|
||||
glLightfv( GL_LIGHT1, GL_POSITION, lowZ_axis_pos );
|
||||
glLightfv( GL_LIGHT1, GL_DIFFUSE, light_color );
|
||||
glEnable( GL_LIGHT0 ); // White spot on Z axis
|
||||
@@ -612,7 +626,7 @@ void EDA_3D_CANVAS::TakeScreenshot( wxCommandEvent& event )
|
||||
wxYield();
|
||||
}
|
||||
|
||||
struct vieport_params
|
||||
struct viewport_params
|
||||
{
|
||||
GLint originx;
|
||||
GLint originy;
|
||||
@@ -620,6 +634,10 @@ void EDA_3D_CANVAS::TakeScreenshot( wxCommandEvent& event )
|
||||
GLint y;
|
||||
} viewport;
|
||||
|
||||
// Be sure we have the latest 3D view (remember 3D view is buffered)
|
||||
Refresh();
|
||||
wxYield();
|
||||
|
||||
// Build image from the 3D buffer
|
||||
wxWindowUpdateLocker noUpdates( this );
|
||||
glGetIntegerv( GL_VIEWPORT, (GLint*) &viewport );
|
||||
@@ -637,7 +655,6 @@ void EDA_3D_CANVAS::TakeScreenshot( wxCommandEvent& event )
|
||||
viewport.x, viewport.y,
|
||||
GL_ALPHA, GL_UNSIGNED_BYTE, alphabuffer );
|
||||
|
||||
|
||||
image.SetData( pixelbuffer );
|
||||
image.SetAlpha( alphabuffer );
|
||||
image = image.Mirror( false );
|
||||
|
||||
+146
-14
@@ -46,28 +46,69 @@
|
||||
|
||||
class BOARD_DESIGN_SETTINGS;
|
||||
class EDA_3D_FRAME;
|
||||
class S3D_VERTEX;
|
||||
class SEGVIA;
|
||||
class CPOLYGONS_LIST;
|
||||
|
||||
class VIA;
|
||||
class D_PAD;
|
||||
|
||||
// We are using GL lists to store layers and other items
|
||||
// to draw or not
|
||||
// GL_LIST_ID are the GL lists indexes in m_glLists
|
||||
enum GL_LIST_ID
|
||||
{
|
||||
GL_ID_BEGIN = 0,
|
||||
GL_ID_AXIS = GL_ID_BEGIN, // list id for 3D axis
|
||||
GL_ID_GRID, // list id for 3D grid
|
||||
GL_ID_BOARD, // List id for copper layers
|
||||
GL_ID_TECH_LAYERS, // List id for non copper layers (masks...)
|
||||
GL_ID_AUX_LAYERS, // List id for user layers (draw, eco, comment)
|
||||
GL_ID_3DSHAPES_SOLID_FRONT, // List id for 3D shapes, non transparent entities
|
||||
GL_ID_3DSHAPES_TRANSP_FRONT,// List id for 3D shapes, transparent entities
|
||||
GL_ID_3DSHAPES_SOLID_BACK, // List id for 3D shapes, non transparent entities
|
||||
GL_ID_3DSHAPES_TRANSP_BACK,// List id for 3D shapes, transparent entities
|
||||
GL_ID_SHADOW_FRONT,
|
||||
GL_ID_SHADOW_BACK,
|
||||
GL_ID_SHADOW_BOARD,
|
||||
GL_ID_BODY, // Body only list
|
||||
GL_ID_END
|
||||
};
|
||||
|
||||
class EDA_3D_CANVAS : public wxGLCanvas
|
||||
{
|
||||
private:
|
||||
bool m_init;
|
||||
GLuint m_gllist;
|
||||
GLuint m_glLists[GL_ID_END]; // GL lists
|
||||
wxGLContext* m_glRC;
|
||||
wxRealPoint m_draw3dOffset; // offset to draw the 3 mesh.
|
||||
wxRealPoint m_draw3dOffset; // offset to draw the 3D mesh.
|
||||
double m_ZBottom; // position of the back layer
|
||||
double m_ZTop; // position of the front layer
|
||||
|
||||
GLuint m_text_pcb;
|
||||
GLuint m_text_silk;
|
||||
|
||||
bool m_shadow_init;
|
||||
GLuint m_text_fake_shadow_front;
|
||||
GLuint m_text_fake_shadow_back;
|
||||
GLuint m_text_fake_shadow_board;
|
||||
|
||||
void Create_and_Render_Shadow_Buffer( GLuint *aDst_gl_texture,
|
||||
GLuint aTexture_size, bool aDraw_body, int aBlurPasses );
|
||||
|
||||
public:
|
||||
EDA_3D_CANVAS( EDA_3D_FRAME* parent, int* attribList = 0 );
|
||||
~EDA_3D_CANVAS();
|
||||
|
||||
EDA_3D_FRAME* Parent() { return (EDA_3D_FRAME*)GetParent(); }
|
||||
EDA_3D_FRAME* Parent() const { return static_cast<EDA_3D_FRAME*>( GetParent() ); }
|
||||
|
||||
void ClearLists();
|
||||
BOARD* GetBoard() { return Parent()->GetBoard(); }
|
||||
|
||||
/**
|
||||
* Function ClearLists
|
||||
* Clear the display list.
|
||||
* @param aGlList = the list to clear.
|
||||
* if 0 (default) all lists are cleared
|
||||
*/
|
||||
void ClearLists( int aGlList = 0 );
|
||||
|
||||
// Event functions:
|
||||
void OnPaint( wxPaintEvent& event );
|
||||
@@ -81,10 +122,9 @@ public:
|
||||
void OnEnterWindow( wxMouseEvent& event );
|
||||
|
||||
// Display functions
|
||||
GLuint DisplayCubeforTest(); // Just a test function
|
||||
void SetView3D( int keycode );
|
||||
void DisplayStatus();
|
||||
void Redraw( bool finish = false );
|
||||
void Redraw();
|
||||
void Render();
|
||||
|
||||
/**
|
||||
@@ -92,27 +132,119 @@ public:
|
||||
* Prepares the parameters of the OpenGL draw list
|
||||
* creates the OpenGL draw list items (board, grid ...
|
||||
*/
|
||||
GLuint CreateDrawGL_List();
|
||||
void CreateDrawGL_List();
|
||||
void InitGL();
|
||||
void SetLights();
|
||||
|
||||
void SetOffset(double aPosX, double aPosY)
|
||||
{
|
||||
m_draw3dOffset.x = aPosX;
|
||||
m_draw3dOffset.y = aPosY;
|
||||
}
|
||||
|
||||
private:
|
||||
/**
|
||||
* Helper function SetGLTechLayersColor
|
||||
* Initialize the color to draw the non copper layers
|
||||
* in realistic mode and normal mode.
|
||||
*/
|
||||
void SetGLTechLayersColor( LAYER_NUM aLayer );
|
||||
|
||||
/**
|
||||
* Helper function SetGLCopperColor
|
||||
* Initialize the copper color to draw the board
|
||||
* in realistic mode (a golden yellow color )
|
||||
*/
|
||||
void SetGLCopperColor();
|
||||
|
||||
/**
|
||||
* Helper function SetGLEpoxyColor
|
||||
* Initialize the color to draw the epoxy body board in realistic mode.
|
||||
*/
|
||||
void SetGLEpoxyColor( double aTransparency = 1.0 );
|
||||
|
||||
/**
|
||||
* Helper function SetGLSolderMaskColor
|
||||
* Initialize the color to draw the solder mask layers in realistic mode.
|
||||
*/
|
||||
void SetGLSolderMaskColor( double aTransparency = 1.0 );
|
||||
|
||||
/**
|
||||
* Function BuildBoard3DView
|
||||
* Called by CreateDrawGL_List()
|
||||
* Fills the OpenGL draw list with board items draw list.
|
||||
* Populates the OpenGL GL_ID_BOARD draw list with board items only on copper layers.
|
||||
* 3D footprint shapes, tech layers and aux layers are not on this list
|
||||
*/
|
||||
void BuildBoard3DView();
|
||||
void BuildBoard3DView(GLuint aBoardList, GLuint aBodyOnlyList);
|
||||
|
||||
void DrawGrid( double aGriSizeMM );
|
||||
void Draw3DViaHole( SEGVIA * aVia );
|
||||
void Draw3DPadHole( D_PAD * aPad );
|
||||
/**
|
||||
* Function BuildTechLayers3DView
|
||||
* Called by CreateDrawGL_List()
|
||||
* Populates the OpenGL GL_ID_TECH_LAYERS draw list with items on tech layers
|
||||
*/
|
||||
void BuildTechLayers3DView();
|
||||
|
||||
/**
|
||||
* Function BuildShadowList
|
||||
* Called by CreateDrawGL_List()
|
||||
*/
|
||||
void BuildShadowList( GLuint aFrontList, GLuint aBacklist, GLuint aBoardList );
|
||||
|
||||
/**
|
||||
* Function BuildFootprintShape3DList
|
||||
* Called by CreateDrawGL_List()
|
||||
* Fills the OpenGL GL_ID_3DSHAPES_SOLID and GL_ID_3DSHAPES_TRANSP
|
||||
* draw lists with 3D footprint shapes
|
||||
* @param aOpaqueList is the gl list for non transparent items
|
||||
* @param aTransparentList is the gl list for non transparent items,
|
||||
* which need to be drawn after all other items
|
||||
*/
|
||||
void BuildFootprintShape3DList( GLuint aOpaqueList,
|
||||
GLuint aTransparentList,
|
||||
bool aSideToLoad );
|
||||
/**
|
||||
* Function BuildBoard3DAuxLayers
|
||||
* Called by CreateDrawGL_List()
|
||||
* Fills the OpenGL GL_ID_AUX_LAYERS draw list
|
||||
* with items on aux layers only
|
||||
*/
|
||||
void BuildBoard3DAuxLayers();
|
||||
|
||||
void Draw3DGrid( double aGriSizeMM );
|
||||
void Draw3DAxis();
|
||||
|
||||
/**
|
||||
* Helper function BuildPadShapeThickOutlineAsPolygon:
|
||||
* Build a pad outline as non filled polygon, to draw pads on silkscreen layer
|
||||
* with a line thickness = aWidth
|
||||
* Used only to draw pads outlines on silkscreen layers.
|
||||
*/
|
||||
void BuildPadShapeThickOutlineAsPolygon( const D_PAD* aPad,
|
||||
CPOLYGONS_LIST& aCornerBuffer,
|
||||
int aWidth,
|
||||
int aCircleToSegmentsCount,
|
||||
double aCorrectionFactor );
|
||||
|
||||
|
||||
/**
|
||||
* Helper function Draw3DViaHole:
|
||||
* Draw the via hole:
|
||||
* Build a vertical hole (a cylinder) between the first and the last via layers
|
||||
*/
|
||||
void Draw3DViaHole( const VIA * aVia );
|
||||
|
||||
/**
|
||||
* Helper function Draw3DPadHole:
|
||||
* Draw the pad hole:
|
||||
* Build a vertical hole (round or oblong) between the front and back layers
|
||||
*/
|
||||
void Draw3DPadHole( const D_PAD * aPad );
|
||||
|
||||
void GenerateFakeShadowsTextures();
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
void CheckGLError(const char *aFileName, int aLineNumber);
|
||||
|
||||
#endif /* _3D_CANVAS_H_ */
|
||||
|
||||
+27
-19
@@ -29,31 +29,31 @@
|
||||
#include <fctsys.h>
|
||||
|
||||
#include <3d_viewer.h>
|
||||
#include <3d_struct.h>
|
||||
|
||||
S3D_MATERIAL::S3D_MATERIAL( S3D_MASTER* father, const wxString& name ) :
|
||||
EDA_ITEM( father, NOT_USED )
|
||||
|
||||
bool S3D_MASTER::IsOpenGlAllowed()
|
||||
{
|
||||
m_DiffuseColor.x = m_DiffuseColor.y = m_DiffuseColor.z = 1.0;
|
||||
m_SpecularColor.x = m_SpecularColor.y = m_SpecularColor.z = 1.0;
|
||||
m_AmbientIntensity = 1.0;
|
||||
m_Transparency = 0.0;
|
||||
m_Shininess = 1.0;
|
||||
m_Name = name;
|
||||
if( m_loadNonTransparentObjects ) // return true for non transparent objects only
|
||||
{
|
||||
if( m_lastTransparency == 0.0 )
|
||||
return true;
|
||||
}
|
||||
|
||||
if( m_loadTransparentObjects ) // return true for transparent objects only
|
||||
{
|
||||
if( m_lastTransparency != 0.0 )
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void S3D_MATERIAL::SetMaterial()
|
||||
void S3D_MASTER::Insert( S3D_MATERIAL* aMaterial )
|
||||
{
|
||||
glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );
|
||||
glColor4f( m_DiffuseColor.x * m_AmbientIntensity,
|
||||
m_DiffuseColor.y * m_AmbientIntensity,
|
||||
m_DiffuseColor.z * m_AmbientIntensity,
|
||||
1.0 - m_Transparency );
|
||||
#if 0
|
||||
glColorMaterial( GL_FRONT_AND_BACK, GL_SPECULAR );
|
||||
glColor3f( m_SpecularColor.x, m_SpecularColor.y, m_SpecularColor.z );
|
||||
#endif
|
||||
glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );
|
||||
aMaterial->SetNext( m_Materials );
|
||||
m_Materials = aMaterial;
|
||||
}
|
||||
|
||||
|
||||
@@ -72,9 +72,17 @@ S3D_MASTER::S3D_MASTER( EDA_ITEM* aParent ) :
|
||||
EDA_ITEM( aParent, NOT_USED )
|
||||
{
|
||||
m_MatScale.x = m_MatScale.y = m_MatScale.z = 1.0;
|
||||
m_lastTransparency = 0.0;
|
||||
m_3D_Drawings = NULL;
|
||||
m_Materials = NULL;
|
||||
m_ShapeType = FILE3D_NONE;
|
||||
|
||||
m_use_modelfile_diffuseColor = true;
|
||||
m_use_modelfile_emissiveColor = false;
|
||||
m_use_modelfile_specularColor = false;
|
||||
m_use_modelfile_ambientIntensity = false;
|
||||
m_use_modelfile_transparency = true;
|
||||
m_use_modelfile_shininess = false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+997
-498
File diff suppressed because it is too large
Load Diff
@@ -33,10 +33,7 @@
|
||||
#include <3d_viewer.h>
|
||||
#include <info3d_visu.h>
|
||||
#include <3d_draw_basic_functions.h>
|
||||
|
||||
// Imported function:
|
||||
extern void Set_Object_Data( std::vector<S3D_VERTEX>& aVertices, double aBiuTo3DUnits );
|
||||
extern void CheckGLError();
|
||||
#include <modelparsers.h>
|
||||
|
||||
// Number of segments to approximate a circle by segments
|
||||
#define SEGM_PER_CIRCLE 16
|
||||
@@ -54,14 +51,15 @@ static void CALLBACK tessCPolyPt2Vertex( const GLvoid* data );
|
||||
// 2 helper functions to set the current normal vector for gle items
|
||||
static inline void SetNormalZpos()
|
||||
{
|
||||
glNormal3f( 0.0, 0.0, 1.0 );
|
||||
//glNormal3f( 0.0, 0.0, 1.0 );
|
||||
}
|
||||
|
||||
static inline void SetNormalZneg()
|
||||
{
|
||||
glNormal3f( 0.0, 0.0, -1.0 );
|
||||
//glNormal3f( 0.0, 0.0, -1.0 );
|
||||
}
|
||||
|
||||
void TransfertToGLlist( std::vector< S3D_VERTEX >& aVertices, double aBiuTo3DUnits );
|
||||
|
||||
/* Draw3D_VerticalPolygonalCylinder is a helper function.
|
||||
*
|
||||
@@ -116,7 +114,7 @@ static void Draw3D_VerticalPolygonalCylinder( const CPOLYGONS_LIST& aPolysList,
|
||||
coords[3].y = coords[2].y; // only z change
|
||||
|
||||
// Creates the GL_QUAD
|
||||
Set_Object_Data( coords, aBiuTo3DUnits );
|
||||
TransfertToGLlist( coords, aBiuTo3DUnits );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,6 +130,15 @@ void SetGLColor( EDA_COLOR_T color, double alpha )
|
||||
glColor4f( red, green, blue, alpha );
|
||||
}
|
||||
|
||||
static float m_texture_scale;
|
||||
|
||||
void SetGLTexture( GLuint text_id, float scale )
|
||||
{
|
||||
glEnable( GL_TEXTURE_2D );
|
||||
glBindTexture( GL_TEXTURE_2D, text_id );
|
||||
m_texture_scale = scale;
|
||||
}
|
||||
|
||||
|
||||
/* draw all solid polygons found in aPolysList
|
||||
* aZpos = z position in board internal units
|
||||
@@ -152,9 +159,9 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
|
||||
gluTessCallback( tess, GLU_TESS_VERTEX, ( void (CALLBACK*) () )tessCPolyPt2Vertex );
|
||||
|
||||
GLdouble v_data[3];
|
||||
double zpos = ( aZpos + (aThickness / 2) ) * aBiuTo3DUnits;
|
||||
double zpos = ( aZpos + (aThickness / 2.0) ) * aBiuTo3DUnits;
|
||||
g_Parm_3D_Visu.m_CurrentZpos = zpos;
|
||||
v_data[2] = aZpos + (aThickness / 2);
|
||||
v_data[2] = aZpos + (aThickness / 2.0);
|
||||
|
||||
// Set normal to toward positive Z axis, for a solid object only (to draw the top side)
|
||||
if( aThickness )
|
||||
@@ -165,9 +172,11 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
|
||||
// Draw solid areas contained in this list
|
||||
CPOLYGONS_LIST polylist = aPolysList; // temporary copy for gluTessVertex
|
||||
|
||||
int startContour;
|
||||
|
||||
for( int side = 0; side < 2; side++ )
|
||||
{
|
||||
int startContour = 1;
|
||||
startContour = 1;
|
||||
|
||||
for( unsigned ii = 0; ii < polylist.GetCornersCount(); ii++ )
|
||||
{
|
||||
@@ -178,6 +187,10 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
|
||||
startContour = 0;
|
||||
}
|
||||
|
||||
// https://www.opengl.org/sdk/docs/man2/xhtml/gluTessNormal.xml
|
||||
gluTessNormal( tess, 0.0, 0.0, 0.0 );
|
||||
|
||||
|
||||
v_data[0] = polylist.GetX( ii ) * aBiuTo3DUnits;
|
||||
v_data[1] = -polylist.GetY( ii ) * aBiuTo3DUnits;
|
||||
// gluTessVertex store pointers on data, not data, so do not store
|
||||
@@ -186,6 +199,7 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
|
||||
// before calling gluDeleteTess
|
||||
gluTessVertex( tess, v_data, &polylist[ii] );
|
||||
|
||||
|
||||
if( polylist.IsEndContour( ii ) )
|
||||
{
|
||||
gluTessEndContour( tess );
|
||||
@@ -198,20 +212,28 @@ void Draw3D_SolidHorizontalPolyPolygons( const CPOLYGONS_LIST& aPolysList,
|
||||
break;
|
||||
|
||||
// Prepare the bottom side of solid areas
|
||||
zpos = ( aZpos - (aThickness / 2) ) * aBiuTo3DUnits;
|
||||
zpos = ( aZpos - (aThickness / 2.0) ) * aBiuTo3DUnits;
|
||||
g_Parm_3D_Visu.m_CurrentZpos = zpos;
|
||||
v_data[2] = zpos;
|
||||
// Now;, set normal to toward negative Z axis, for the solid object bottom side
|
||||
SetNormalZneg();
|
||||
}
|
||||
|
||||
if( startContour == 0 )
|
||||
{
|
||||
gluTessEndContour( tess );
|
||||
gluTessEndPolygon( tess );
|
||||
}
|
||||
|
||||
gluDeleteTess( tess );
|
||||
|
||||
if( aThickness == 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Build the 3D data : vertical side
|
||||
Draw3D_VerticalPolygonalCylinder( polylist, aThickness, aZpos - (aThickness / 2), false, aBiuTo3DUnits );
|
||||
Draw3D_VerticalPolygonalCylinder( polylist, aThickness, aZpos - (aThickness / 2.0), false, aBiuTo3DUnits );
|
||||
}
|
||||
|
||||
|
||||
@@ -400,6 +422,12 @@ void CALLBACK tessCPolyPt2Vertex( const GLvoid* data )
|
||||
// cast back to double type
|
||||
const CPolyPt* ptr = (const CPolyPt*) data;
|
||||
|
||||
if( g_Parm_3D_Visu.IsRealisticMode() && g_Parm_3D_Visu.HightQualityMode() )
|
||||
{
|
||||
glTexCoord2f( ptr->x* g_Parm_3D_Visu.m_BiuTo3Dunits * m_texture_scale,
|
||||
-ptr->y * g_Parm_3D_Visu.m_BiuTo3Dunits * m_texture_scale);
|
||||
}
|
||||
|
||||
glVertex3d( ptr->x * g_Parm_3D_Visu.m_BiuTo3Dunits,
|
||||
-ptr->y * g_Parm_3D_Visu.m_BiuTo3Dunits,
|
||||
g_Parm_3D_Visu.m_CurrentZpos );
|
||||
|
||||
@@ -126,4 +126,12 @@ void Draw3D_ZaxisOblongCylinder( wxPoint aAxis1Pos, wxPoint aAxis2Pos,
|
||||
void SetGLColor( EDA_COLOR_T aColor, double aTransparency = 1.0 );
|
||||
|
||||
|
||||
/**
|
||||
* Set a texture id and a scale to apply when rendering the polygons
|
||||
* @param text_id = texture ID created by glGenTextures
|
||||
* @param scale = scale to apply to texture coords
|
||||
*/
|
||||
void SetGLTexture( GLuint text_id, float scale );
|
||||
|
||||
|
||||
#endif // _3D_DRAW_BASIC_FUNCTIONS_H_
|
||||
|
||||
@@ -0,0 +1,395 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file 3d_draw_helper_functions.cpp
|
||||
*/
|
||||
|
||||
#include <fctsys.h>
|
||||
|
||||
#include <PolyLine.h>
|
||||
#include <colors.h>
|
||||
#include <colors_selection.h>
|
||||
#include <class_pad.h>
|
||||
#include <class_track.h>
|
||||
|
||||
#include <convert_basic_shapes_to_polygon.h>
|
||||
|
||||
#include <3d_viewer.h>
|
||||
#include <3d_canvas.h>
|
||||
#include <info3d_visu.h>
|
||||
#include <3d_draw_basic_functions.h>
|
||||
|
||||
|
||||
// Helper function: initialize the copper color to draw the board
|
||||
// in realistic mode.
|
||||
void EDA_3D_CANVAS::SetGLCopperColor()
|
||||
{
|
||||
glDisable( GL_TEXTURE_2D );
|
||||
|
||||
// Generates a golden yellow color, near board "copper" color
|
||||
const double lum = 0.7/255.0;
|
||||
glColor4f( 255.0*lum, 223.0*lum, 0.0*lum, 1.0 );
|
||||
}
|
||||
|
||||
// Helper function: initialize the color to draw the epoxy
|
||||
// body board in realistic mode.
|
||||
void EDA_3D_CANVAS::SetGLEpoxyColor( double aTransparency )
|
||||
{
|
||||
// Generates an epoxy color, near board color
|
||||
const double lum = 0.2/255.0;
|
||||
glColor4f( 255.0*lum, 218.0*lum, 110.0*lum, aTransparency );
|
||||
}
|
||||
|
||||
// Helper function: initialize the color to draw the
|
||||
// solder mask layers in realistic mode.
|
||||
void EDA_3D_CANVAS::SetGLSolderMaskColor( double aTransparency )
|
||||
{
|
||||
// Generates a solder mask color
|
||||
const double lum = 0.2/255.0;
|
||||
glColor4f( 100.0*lum, 255.0*lum, 180.0*lum, aTransparency );
|
||||
}
|
||||
|
||||
// Helper function: initialize the color to draw the non copper layers
|
||||
// in realistic mode and normal mode.
|
||||
void EDA_3D_CANVAS::SetGLTechLayersColor( LAYER_NUM aLayer )
|
||||
{
|
||||
EDA_COLOR_T color;
|
||||
|
||||
if( g_Parm_3D_Visu.IsRealisticMode() )
|
||||
{
|
||||
switch( aLayer )
|
||||
{
|
||||
case B_Paste:
|
||||
case F_Paste:
|
||||
SetGLColor( DARKGRAY, 0.7 );
|
||||
break;
|
||||
|
||||
case B_SilkS:
|
||||
case F_SilkS:
|
||||
SetGLColor( LIGHTGRAY, 0.9 );
|
||||
if( g_Parm_3D_Visu.HightQualityMode() )
|
||||
{
|
||||
SetGLTexture( m_text_silk, 50.0f );
|
||||
}
|
||||
break;
|
||||
|
||||
case B_Mask:
|
||||
case F_Mask:
|
||||
SetGLSolderMaskColor( 0.7 );
|
||||
if( g_Parm_3D_Visu.HightQualityMode() )
|
||||
{
|
||||
SetGLTexture( m_text_pcb, 35.0f );
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
color = g_ColorsSettings.GetLayerColor( aLayer );
|
||||
SetGLColor( color, 0.7 );
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
color = g_ColorsSettings.GetLayerColor( aLayer );
|
||||
SetGLColor( color, 0.7 );
|
||||
}
|
||||
}
|
||||
|
||||
void EDA_3D_CANVAS::Draw3DAxis()
|
||||
{
|
||||
if( ! m_glLists[GL_ID_AXIS] )
|
||||
{
|
||||
m_glLists[GL_ID_AXIS] = glGenLists( 1 );
|
||||
glNewList( m_glLists[GL_ID_AXIS], GL_COMPILE );
|
||||
|
||||
glEnable( GL_COLOR_MATERIAL );
|
||||
SetGLColor( WHITE );
|
||||
glBegin( GL_LINES );
|
||||
glNormal3f( 0.0f, 0.0f, 1.0f ); // Normal is Z axis
|
||||
glVertex3f( 0.0f, 0.0f, 0.0f );
|
||||
glVertex3f( 1.0f, 0.0f, 0.0f ); // X axis
|
||||
glVertex3f( 0.0f, 0.0f, 0.0f );
|
||||
glVertex3f( 0.0f, -1.0f, 0.0f ); // Y axis
|
||||
glNormal3f( 1.0f, 0.0f, 0.0f ); // Normal is Y axis
|
||||
glVertex3f( 0.0f, 0.0f, 0.0f );
|
||||
glVertex3f( 0.0f, 0.0f, 0.3f ); // Z axis
|
||||
glEnd();
|
||||
|
||||
glEndList();
|
||||
}
|
||||
}
|
||||
|
||||
// draw a 3D grid: an horizontal grid (XY plane and Z = 0,
|
||||
// and a vertical grid (XZ plane and Y = 0)
|
||||
void EDA_3D_CANVAS::Draw3DGrid( double aGriSizeMM )
|
||||
{
|
||||
double zpos = 0.0;
|
||||
EDA_COLOR_T gridcolor = DARKGRAY; // Color of grid lines
|
||||
EDA_COLOR_T gridcolor_marker = LIGHTGRAY; // Color of grid lines every 5 lines
|
||||
const double scale = g_Parm_3D_Visu.m_BiuTo3Dunits;
|
||||
const double transparency = 0.3;
|
||||
|
||||
glNormal3f( 0.0, 0.0, 1.0 );
|
||||
|
||||
wxSize brd_size = g_Parm_3D_Visu.m_BoardSize;
|
||||
wxPoint brd_center_pos = g_Parm_3D_Visu.m_BoardPos;
|
||||
NEGATE( brd_center_pos.y );
|
||||
|
||||
int xsize = std::max( brd_size.x, Millimeter2iu( 100 ) );
|
||||
int ysize = std::max( brd_size.y, Millimeter2iu( 100 ) );
|
||||
|
||||
// Grid limits, in 3D units
|
||||
double xmin = (brd_center_pos.x - xsize / 2) * scale;
|
||||
double xmax = (brd_center_pos.x + xsize / 2) * scale;
|
||||
double ymin = (brd_center_pos.y - ysize / 2) * scale;
|
||||
double ymax = (brd_center_pos.y + ysize / 2) * scale;
|
||||
double zmin = Millimeter2iu( -50 ) * scale;
|
||||
double zmax = Millimeter2iu( 100 ) * scale;
|
||||
|
||||
// Draw horizontal grid centered on 3D origin (center of the board)
|
||||
for( int ii = 0; ; ii++ )
|
||||
{
|
||||
if( (ii % 5) )
|
||||
SetGLColor( gridcolor, transparency );
|
||||
else
|
||||
SetGLColor( gridcolor_marker, transparency );
|
||||
|
||||
int delta = KiROUND( ii * aGriSizeMM * IU_PER_MM );
|
||||
|
||||
if( delta <= xsize / 2 ) // Draw grid lines parallel to X axis
|
||||
{
|
||||
glBegin( GL_LINES );
|
||||
glVertex3f( (brd_center_pos.x + delta) * scale, -ymin, zpos );
|
||||
glVertex3f( (brd_center_pos.x + delta) * scale, -ymax, zpos );
|
||||
glEnd();
|
||||
|
||||
if( ii != 0 )
|
||||
{
|
||||
glBegin( GL_LINES );
|
||||
glVertex3f( (brd_center_pos.x - delta) * scale, -ymin, zpos );
|
||||
glVertex3f( (brd_center_pos.x - delta) * scale, -ymax, zpos );
|
||||
glEnd();
|
||||
}
|
||||
}
|
||||
|
||||
if( delta <= ysize / 2 ) // Draw grid lines parallel to Y axis
|
||||
{
|
||||
glBegin( GL_LINES );
|
||||
glVertex3f( xmin, -(brd_center_pos.y + delta) * scale, zpos );
|
||||
glVertex3f( xmax, -(brd_center_pos.y + delta) * scale, zpos );
|
||||
glEnd();
|
||||
|
||||
if( ii != 0 )
|
||||
{
|
||||
glBegin( GL_LINES );
|
||||
glVertex3f( xmin, -(brd_center_pos.y - delta) * scale, zpos );
|
||||
glVertex3f( xmax, -(brd_center_pos.y - delta) * scale, zpos );
|
||||
glEnd();
|
||||
}
|
||||
}
|
||||
|
||||
if( ( delta > ysize / 2 ) && ( delta > xsize / 2 ) )
|
||||
break;
|
||||
}
|
||||
|
||||
// Draw vertical grid n Z axis
|
||||
glNormal3f( 0.0, -1.0, 0.0 );
|
||||
|
||||
// Draw vertical grid lines (parallel to Z axis)
|
||||
for( int ii = 0; ; ii++ )
|
||||
{
|
||||
if( (ii % 5) )
|
||||
SetGLColor( gridcolor, transparency );
|
||||
else
|
||||
SetGLColor( gridcolor_marker, transparency );
|
||||
|
||||
double delta = ii * aGriSizeMM * IU_PER_MM;
|
||||
|
||||
glBegin( GL_LINES );
|
||||
glVertex3f( (brd_center_pos.x + delta) * scale, -brd_center_pos.y * scale, zmin );
|
||||
glVertex3f( (brd_center_pos.x + delta) * scale, -brd_center_pos.y * scale, zmax );
|
||||
glEnd();
|
||||
|
||||
if( ii != 0 )
|
||||
{
|
||||
glBegin( GL_LINES );
|
||||
glVertex3f( (brd_center_pos.x - delta) * scale, -brd_center_pos.y * scale, zmin );
|
||||
glVertex3f( (brd_center_pos.x - delta) * scale, -brd_center_pos.y * scale, zmax );
|
||||
glEnd();
|
||||
}
|
||||
|
||||
if( delta > xsize / 2 )
|
||||
break;
|
||||
}
|
||||
|
||||
// Draw horizontal grid lines on Z axis
|
||||
for( int ii = 0; ; ii++ )
|
||||
{
|
||||
if( (ii % 5) )
|
||||
SetGLColor( gridcolor, transparency);
|
||||
else
|
||||
SetGLColor( gridcolor_marker, transparency );
|
||||
|
||||
double delta = ii * aGriSizeMM * IU_PER_MM * scale;
|
||||
|
||||
if( delta <= zmax )
|
||||
{
|
||||
// Draw grid lines on Z axis (positive Z axis coordinates)
|
||||
glBegin( GL_LINES );
|
||||
glVertex3f( xmin, -brd_center_pos.y * scale, delta );
|
||||
glVertex3f( xmax, -brd_center_pos.y * scale, delta );
|
||||
glEnd();
|
||||
}
|
||||
|
||||
if( delta <= -zmin && ( ii != 0 ) )
|
||||
{
|
||||
// Draw grid lines on Z axis (negative Z axis coordinates)
|
||||
glBegin( GL_LINES );
|
||||
glVertex3f( xmin, -brd_center_pos.y * scale, -delta );
|
||||
glVertex3f( xmax, -brd_center_pos.y * scale, -delta );
|
||||
glEnd();
|
||||
}
|
||||
|
||||
if( ( delta > zmax ) && ( delta > -zmin ) )
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Draw 3D pads.
|
||||
void EDA_3D_CANVAS::Draw3DPadHole( const D_PAD* aPad )
|
||||
{
|
||||
// Draw the pad hole
|
||||
wxSize drillsize = aPad->GetDrillSize();
|
||||
bool hasHole = drillsize.x && drillsize.y;
|
||||
|
||||
if( !hasHole )
|
||||
return;
|
||||
|
||||
// Store here the points to approximate hole by segments
|
||||
CPOLYGONS_LIST holecornersBuffer;
|
||||
int thickness = g_Parm_3D_Visu.GetCopperThicknessBIU();
|
||||
int height = g_Parm_3D_Visu.GetLayerZcoordBIU( F_Cu ) -
|
||||
g_Parm_3D_Visu.GetLayerZcoordBIU( B_Cu );
|
||||
|
||||
if( g_Parm_3D_Visu.IsRealisticMode() )
|
||||
SetGLCopperColor();
|
||||
else
|
||||
SetGLColor( DARKGRAY );
|
||||
|
||||
int holeZpoz = g_Parm_3D_Visu.GetLayerZcoordBIU( B_Cu ) + thickness / 2;
|
||||
int holeHeight = height - thickness;
|
||||
|
||||
if( drillsize.x == drillsize.y ) // usual round hole
|
||||
{
|
||||
Draw3D_ZaxisCylinder( aPad->GetPosition(),
|
||||
(drillsize.x + thickness) / 2, holeHeight,
|
||||
thickness, holeZpoz, g_Parm_3D_Visu.m_BiuTo3Dunits );
|
||||
}
|
||||
else // Oblong hole
|
||||
{
|
||||
wxPoint ends_offset;
|
||||
int width;
|
||||
|
||||
if( drillsize.x > drillsize.y ) // Horizontal oval
|
||||
{
|
||||
ends_offset.x = ( drillsize.x - drillsize.y ) / 2;
|
||||
width = drillsize.y;
|
||||
}
|
||||
else // Vertical oval
|
||||
{
|
||||
ends_offset.y = ( drillsize.y - drillsize.x ) / 2;
|
||||
width = drillsize.x;
|
||||
}
|
||||
|
||||
RotatePoint( &ends_offset, aPad->GetOrientation() );
|
||||
|
||||
wxPoint start = aPad->GetPosition() + ends_offset;
|
||||
wxPoint end = aPad->GetPosition() - ends_offset;
|
||||
int hole_radius = ( width + thickness ) / 2;
|
||||
|
||||
// Draw the hole
|
||||
Draw3D_ZaxisOblongCylinder( start, end, hole_radius, holeHeight,
|
||||
thickness, holeZpoz, g_Parm_3D_Visu.m_BiuTo3Dunits );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_CANVAS::Draw3DViaHole( const VIA* aVia )
|
||||
{
|
||||
LAYER_ID top_layer, bottom_layer;
|
||||
int inner_radius = aVia->GetDrillValue() / 2;
|
||||
int thickness = g_Parm_3D_Visu.GetCopperThicknessBIU();
|
||||
|
||||
aVia->LayerPair( &top_layer, &bottom_layer );
|
||||
|
||||
// Drawing via hole:
|
||||
if( g_Parm_3D_Visu.IsRealisticMode() )
|
||||
SetGLCopperColor();
|
||||
else
|
||||
{
|
||||
EDA_COLOR_T color = g_ColorsSettings.GetItemColor( VIAS_VISIBLE + aVia->GetViaType() );
|
||||
SetGLColor( color );
|
||||
}
|
||||
|
||||
int height = g_Parm_3D_Visu.GetLayerZcoordBIU( top_layer ) -
|
||||
g_Parm_3D_Visu.GetLayerZcoordBIU( bottom_layer ) - thickness;
|
||||
int zpos = g_Parm_3D_Visu.GetLayerZcoordBIU( bottom_layer ) + thickness / 2;
|
||||
|
||||
Draw3D_ZaxisCylinder( aVia->GetStart(), inner_radius + thickness / 2, height,
|
||||
thickness, zpos, g_Parm_3D_Visu.m_BiuTo3Dunits );
|
||||
}
|
||||
|
||||
/* Build a pad outline as non filled polygon, to draw pads on silkscreen layer
|
||||
* Used only to draw pads outlines on silkscreen layers.
|
||||
*/
|
||||
void EDA_3D_CANVAS::BuildPadShapeThickOutlineAsPolygon( const D_PAD* aPad,
|
||||
CPOLYGONS_LIST& aCornerBuffer,
|
||||
int aWidth,
|
||||
int aCircleToSegmentsCount,
|
||||
double aCorrectionFactor )
|
||||
{
|
||||
if( aPad->GetShape() == PAD_CIRCLE ) // Draw a ring
|
||||
{
|
||||
TransformRingToPolygon( aCornerBuffer, aPad->ShapePos(),
|
||||
aPad->GetSize().x / 2, aCircleToSegmentsCount, aWidth );
|
||||
return;
|
||||
}
|
||||
|
||||
// For other shapes, draw polygon outlines
|
||||
CPOLYGONS_LIST corners;
|
||||
aPad->BuildPadShapePolygon( corners, wxSize( 0, 0 ),
|
||||
aCircleToSegmentsCount, aCorrectionFactor );
|
||||
|
||||
// Add outlines as thick segments in polygon buffer
|
||||
for( unsigned ii = 0, jj = corners.GetCornersCount() - 1;
|
||||
ii < corners.GetCornersCount(); jj = ii, ii++ )
|
||||
{
|
||||
TransformRoundedEndsSegmentToPolygon( aCornerBuffer,
|
||||
corners.GetPos( jj ),
|
||||
corners.GetPos( ii ),
|
||||
aCircleToSegmentsCount, aWidth );
|
||||
}
|
||||
}
|
||||
|
||||
+184
-97
@@ -26,7 +26,8 @@
|
||||
*/
|
||||
|
||||
#include <fctsys.h>
|
||||
#include <appl_wxstruct.h>
|
||||
#include <kiface_i.h>
|
||||
#include <pgm_base.h>
|
||||
|
||||
#include <3d_viewer.h>
|
||||
#include <3d_canvas.h>
|
||||
@@ -40,21 +41,25 @@
|
||||
INFO3D_VISU g_Parm_3D_Visu;
|
||||
|
||||
// Key to store 3D Viewer config:
|
||||
static const wxString keyBgColor_Red( wxT( "BgColor_Red" ) );
|
||||
static const wxString keyBgColor_Green( wxT( "BgColor_Green" ) );
|
||||
static const wxString keyBgColor_Blue( wxT( "BgColor_Blue" ) );
|
||||
static const wxString keyShowRealisticMode( wxT( "ShowRealisticMode" ) );
|
||||
static const wxString keyShowAxis( wxT( "ShowAxis" ) );
|
||||
static const wxString keyShowZones( wxT( "ShowZones" ) );
|
||||
static const wxString keyShowFootprints( wxT( "ShowFootprints" ) );
|
||||
static const wxString keyShowCopperThickness( wxT( "ShowCopperThickness" ) );
|
||||
static const wxString keyShowAdhesiveLayers( wxT( "ShowAdhesiveLayers" ) );
|
||||
static const wxString keyShowSilkScreenLayers( wxT( "ShowSilkScreenLayers" ) );
|
||||
static const wxString keyShowSolderMaskLayers( wxT( "ShowSolderMasLayers" ) );
|
||||
static const wxString keyShowSolderPasteLayers( wxT( "ShowSolderPasteLayers" ) );
|
||||
static const wxString keyShowCommentsLayer( wxT( "ShowCommentsLayers" ) );
|
||||
static const wxString keyShowBoardBody( wxT( "ShowBoardBody" ) );
|
||||
static const wxString keyShowEcoLayers( wxT( "ShowEcoLayers" ) );
|
||||
static const wxChar keyBgColor_Red[] = wxT( "BgColor_Red" );
|
||||
static const wxChar keyBgColor_Green[] = wxT( "BgColor_Green" );
|
||||
static const wxChar keyBgColor_Blue[] = wxT( "BgColor_Blue" );
|
||||
static const wxChar keyShowRealisticMode[] = wxT( "ShowRealisticMode" );
|
||||
static const wxChar keyUseHQinRealisticMode[] = wxT( "UseHQinRealisticMode" );
|
||||
static const wxChar keyShowAxis[] = wxT( "ShowAxis" );
|
||||
static const wxChar keyShowGrid[] = wxT( "ShowGrid3D" );
|
||||
static const wxChar keyShowGridSize[] = wxT( "Grid3DSize" );
|
||||
static const wxChar keyShowZones[] = wxT( "ShowZones" );
|
||||
static const wxChar keyShowFootprints[] = wxT( "ShowFootprints" );
|
||||
static const wxChar keyShowCopperThickness[] = wxT( "ShowCopperThickness" );
|
||||
static const wxChar keyShowAdhesiveLayers[] = wxT( "ShowAdhesiveLayers" );
|
||||
static const wxChar keyShowSilkScreenLayers[] = wxT( "ShowSilkScreenLayers" );
|
||||
static const wxChar keyShowSolderMaskLayers[] = wxT( "ShowSolderMasLayers" );
|
||||
static const wxChar keyShowSolderPasteLayers[] =wxT( "ShowSolderPasteLayers" );
|
||||
static const wxChar keyShowCommentsLayer[] = wxT( "ShowCommentsLayers" );
|
||||
static const wxChar keyShowBoardBody[] = wxT( "ShowBoardBody" );
|
||||
static const wxChar keyShowEcoLayers[] = wxT( "ShowEcoLayers" );
|
||||
|
||||
|
||||
BEGIN_EVENT_TABLE( EDA_3D_FRAME, EDA_BASE_FRAME )
|
||||
EVT_ACTIVATE( EDA_3D_FRAME::OnActivate )
|
||||
@@ -72,11 +77,13 @@ EVT_MENU_RANGE( ID_MENU3D_GRID, ID_MENU3D_GRID_END,
|
||||
|
||||
EVT_CLOSE( EDA_3D_FRAME::OnCloseWindow )
|
||||
|
||||
END_EVENT_TABLE() EDA_3D_FRAME::EDA_3D_FRAME( PCB_BASE_FRAME* parent,
|
||||
const wxString& title,
|
||||
long style ) :
|
||||
EDA_BASE_FRAME( parent, DISPLAY3D_FRAME_TYPE, title,
|
||||
wxDefaultPosition, wxDefaultSize, style, wxT( "Frame3D" ) )
|
||||
END_EVENT_TABLE()
|
||||
|
||||
|
||||
EDA_3D_FRAME::EDA_3D_FRAME( KIWAY* aKiway, PCB_BASE_FRAME* aParent,
|
||||
const wxString& aTitle, long style ) :
|
||||
KIWAY_PLAYER( aKiway, aParent, FRAME_PCB_DISPLAY3D, aTitle,
|
||||
wxDefaultPosition, wxDefaultSize, style, wxT( "Frame3D" ) )
|
||||
{
|
||||
m_canvas = NULL;
|
||||
m_reloadRequest = false;
|
||||
@@ -87,7 +94,7 @@ END_EVENT_TABLE() EDA_3D_FRAME::EDA_3D_FRAME( PCB_BASE_FRAME* parent,
|
||||
icon.CopyFromBitmap( KiBitmap( icon_3d_xpm ) );
|
||||
SetIcon( icon );
|
||||
|
||||
GetSettings();
|
||||
LoadSettings( config() );
|
||||
SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y );
|
||||
|
||||
// Create the status line
|
||||
@@ -100,7 +107,72 @@ END_EVENT_TABLE() EDA_3D_FRAME::EDA_3D_FRAME( PCB_BASE_FRAME* parent,
|
||||
ReCreateMainToolbar();
|
||||
|
||||
// Make a EDA_3D_CANVAS
|
||||
int attrs[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 16, 0 };
|
||||
// Note: We try to use anti aliasing if the graphic card allows that,
|
||||
// but only on wxWidgets >= 3.0.0 (this option does not exist on wxWidgets 2.8)
|
||||
int attrs[] = { // This array should be 2*n+1
|
||||
// Sadly wxwidgets / glx < 13 allowed
|
||||
// a thing named "boolean attributes" that don't take a value.
|
||||
// (See src/unix/glx11.cpp -> wxGLCanvasX11::ConvertWXAttrsToGL() ).
|
||||
// To avoid problems due to this, just specify those attributes twice.
|
||||
// Only WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_STEREO are such boolean
|
||||
// attributes.
|
||||
|
||||
// Boolean attributes (using itself at padding):
|
||||
WX_GL_RGBA, WX_GL_RGBA,
|
||||
WX_GL_DOUBLEBUFFER, WX_GL_DOUBLEBUFFER,
|
||||
|
||||
// Normal attributes with values:
|
||||
WX_GL_DEPTH_SIZE, 16,
|
||||
WX_GL_STENCIL_SIZE, 1,
|
||||
#if wxCHECK_VERSION( 3, 0, 0 )
|
||||
WX_GL_SAMPLE_BUFFERS, 1, // Enable multisampling support (antialiasing).
|
||||
WX_GL_SAMPLES, 0, // Disable AA for the start.
|
||||
#endif
|
||||
0 }; // NULL termination
|
||||
|
||||
|
||||
#if wxCHECK_VERSION( 3, 0, 0 )
|
||||
|
||||
unsigned int ii;
|
||||
|
||||
// Check if the canvas supports multisampling.
|
||||
if( EDA_3D_CANVAS::IsDisplaySupported( attrs ) )
|
||||
{
|
||||
// Check for possible sample sizes, start form the top.
|
||||
int maxSamples = 8; // Any higher doesn't change anything.
|
||||
int samplesOffset = 0;
|
||||
|
||||
for( ii = 0; ii < sizeof( attrs ) / sizeof( attrs[0] ) - 1; ii += 2 )
|
||||
{
|
||||
if( attrs[ii] == WX_GL_SAMPLES )
|
||||
{
|
||||
samplesOffset = ii+1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
attrs[samplesOffset] = maxSamples;
|
||||
|
||||
for( ; maxSamples > 0 && !EDA_3D_CANVAS::IsDisplaySupported( attrs );
|
||||
maxSamples = maxSamples>>1 )
|
||||
{
|
||||
attrs[samplesOffset] = maxSamples;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Disable multisampling
|
||||
for( ii = 0; ii < sizeof( attrs ) / sizeof( attrs[0] ) - 1; ii += 2 )
|
||||
{
|
||||
if( attrs[ii] == WX_GL_SAMPLE_BUFFERS )
|
||||
{
|
||||
attrs[ii+1] = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
m_canvas = new EDA_3D_CANVAS( this, attrs );
|
||||
|
||||
m_auimgr.SetManagedWindow( this );
|
||||
@@ -139,84 +211,88 @@ void EDA_3D_FRAME::OnCloseWindow( wxCloseEvent& Event )
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_FRAME::GetSettings()
|
||||
void EDA_3D_FRAME::LoadSettings( wxConfigBase* aCfg )
|
||||
{
|
||||
wxConfig* config = wxGetApp().GetSettings(); // Current config used by application
|
||||
class INFO3D_VISU& prms = g_Parm_3D_Visu;
|
||||
EDA_BASE_FRAME::LoadSettings( aCfg );
|
||||
|
||||
if( config )
|
||||
{
|
||||
EDA_BASE_FRAME::LoadSettings();
|
||||
INFO3D_VISU& prms = g_Parm_3D_Visu;
|
||||
|
||||
config->Read( keyBgColor_Red, &g_Parm_3D_Visu.m_BgColor.m_Red, 0.0 );
|
||||
config->Read( keyBgColor_Green, &g_Parm_3D_Visu.m_BgColor.m_Green, 0.0 );
|
||||
config->Read( keyBgColor_Blue, &g_Parm_3D_Visu.m_BgColor.m_Blue, 0.0 );
|
||||
aCfg->Read( keyBgColor_Red, &g_Parm_3D_Visu.m_BgColor.m_Red, 0.0 );
|
||||
aCfg->Read( keyBgColor_Green, &g_Parm_3D_Visu.m_BgColor.m_Green, 0.0 );
|
||||
aCfg->Read( keyBgColor_Blue, &g_Parm_3D_Visu.m_BgColor.m_Blue, 0.0 );
|
||||
|
||||
bool tmp;
|
||||
config->Read( keyShowRealisticMode, &tmp, false );
|
||||
prms.SetFlag( FL_USE_REALISTIC_MODE, tmp );
|
||||
bool tmp;
|
||||
aCfg->Read( keyShowRealisticMode, &tmp, false );
|
||||
prms.SetFlag( FL_USE_REALISTIC_MODE, tmp );
|
||||
|
||||
config->Read( keyShowAxis, &tmp, true );
|
||||
prms.SetFlag( FL_AXIS, tmp );
|
||||
aCfg->Read( keyUseHQinRealisticMode, &tmp, false );
|
||||
prms.SetFlag( FL_USE_MAXQUALITY_IN_REALISTIC_MODE, tmp );
|
||||
|
||||
config->Read( keyShowFootprints, &tmp, true );
|
||||
prms.SetFlag( FL_MODULE, tmp );
|
||||
aCfg->Read( keyShowAxis, &tmp, true );
|
||||
prms.SetFlag( FL_AXIS, tmp );
|
||||
|
||||
config->Read( keyShowCopperThickness, &tmp, false );
|
||||
prms.SetFlag( FL_USE_COPPER_THICKNESS, tmp );
|
||||
aCfg->Read( keyShowGrid, &tmp, true );
|
||||
prms.SetFlag( FL_GRID, tmp );
|
||||
|
||||
config->Read( keyShowZones, &tmp, true );
|
||||
prms.SetFlag( FL_ZONE, tmp );
|
||||
aCfg->Read( keyShowGridSize, &prms.m_3D_Grid, 10.0 );
|
||||
prms.SetFlag( FL_MODULE, tmp );
|
||||
|
||||
config->Read( keyShowAdhesiveLayers, &tmp, true );
|
||||
prms.SetFlag( FL_ADHESIVE, tmp );
|
||||
aCfg->Read( keyShowFootprints, &tmp, true );
|
||||
prms.SetFlag( FL_MODULE, tmp );
|
||||
|
||||
config->Read( keyShowSilkScreenLayers, &tmp, true );
|
||||
prms.SetFlag( FL_SILKSCREEN, tmp );
|
||||
aCfg->Read( keyShowCopperThickness, &tmp, false );
|
||||
prms.SetFlag( FL_USE_COPPER_THICKNESS, tmp );
|
||||
|
||||
config->Read( keyShowSolderMaskLayers, &tmp, true );
|
||||
prms.SetFlag( FL_SOLDERMASK, tmp );
|
||||
aCfg->Read( keyShowZones, &tmp, true );
|
||||
prms.SetFlag( FL_ZONE, tmp );
|
||||
|
||||
config->Read( keyShowSolderPasteLayers, &tmp, true );
|
||||
prms.SetFlag( FL_SOLDERPASTE, tmp );
|
||||
aCfg->Read( keyShowAdhesiveLayers, &tmp, true );
|
||||
prms.SetFlag( FL_ADHESIVE, tmp );
|
||||
|
||||
config->Read( keyShowCommentsLayer, &tmp, true );
|
||||
prms.SetFlag( FL_COMMENTS, tmp );
|
||||
aCfg->Read( keyShowSilkScreenLayers, &tmp, true );
|
||||
prms.SetFlag( FL_SILKSCREEN, tmp );
|
||||
|
||||
config->Read( keyShowEcoLayers, &tmp, true );
|
||||
prms.SetFlag( FL_ECO, tmp );
|
||||
aCfg->Read( keyShowSolderMaskLayers, &tmp, true );
|
||||
prms.SetFlag( FL_SOLDERMASK, tmp );
|
||||
|
||||
config->Read( keyShowBoardBody, &tmp, true );
|
||||
prms.SetFlag( FL_SHOW_BOARD_BODY, tmp );
|
||||
}
|
||||
aCfg->Read( keyShowSolderPasteLayers, &tmp, true );
|
||||
prms.SetFlag( FL_SOLDERPASTE, tmp );
|
||||
|
||||
aCfg->Read( keyShowCommentsLayer, &tmp, true );
|
||||
prms.SetFlag( FL_COMMENTS, tmp );
|
||||
|
||||
aCfg->Read( keyShowEcoLayers, &tmp, true );
|
||||
prms.SetFlag( FL_ECO, tmp );
|
||||
|
||||
aCfg->Read( keyShowBoardBody, &tmp, true );
|
||||
prms.SetFlag( FL_SHOW_BOARD_BODY, tmp );
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_FRAME::SaveSettings()
|
||||
void EDA_3D_FRAME::SaveSettings( wxConfigBase* aCfg )
|
||||
{
|
||||
wxConfig* config = wxGetApp().GetSettings(); // Current config used by application
|
||||
EDA_BASE_FRAME::SaveSettings( aCfg );
|
||||
|
||||
if( !config )
|
||||
return;
|
||||
INFO3D_VISU& prms = g_Parm_3D_Visu;
|
||||
|
||||
EDA_BASE_FRAME::SaveSettings();
|
||||
|
||||
config->Write( keyBgColor_Red, g_Parm_3D_Visu.m_BgColor.m_Red );
|
||||
config->Write( keyBgColor_Green, g_Parm_3D_Visu.m_BgColor.m_Green );
|
||||
config->Write( keyBgColor_Blue, g_Parm_3D_Visu.m_BgColor.m_Blue );
|
||||
class INFO3D_VISU& prms = g_Parm_3D_Visu;
|
||||
config->Write( keyShowRealisticMode, prms.GetFlag( FL_USE_REALISTIC_MODE ) );
|
||||
config->Write( keyShowAxis, prms.GetFlag( FL_AXIS ) );
|
||||
config->Write( keyShowFootprints, prms.GetFlag( FL_MODULE ) );
|
||||
config->Write( keyShowCopperThickness, prms.GetFlag( FL_USE_COPPER_THICKNESS ) );
|
||||
config->Write( keyShowZones, prms.GetFlag( FL_ZONE ) );
|
||||
config->Write( keyShowAdhesiveLayers, prms.GetFlag( FL_ADHESIVE ) );
|
||||
config->Write( keyShowSilkScreenLayers, prms.GetFlag( FL_SILKSCREEN ) );
|
||||
config->Write( keyShowSolderMaskLayers, prms.GetFlag( FL_SOLDERMASK ) );
|
||||
config->Write( keyShowSolderPasteLayers, prms.GetFlag( FL_SOLDERPASTE ) );
|
||||
config->Write( keyShowCommentsLayer, prms.GetFlag( FL_COMMENTS ) );
|
||||
config->Write( keyShowEcoLayers, prms.GetFlag( FL_ECO ) );
|
||||
config->Write( keyShowBoardBody, prms.GetFlag( FL_SHOW_BOARD_BODY ) );
|
||||
aCfg->Write( keyBgColor_Red, g_Parm_3D_Visu.m_BgColor.m_Red );
|
||||
aCfg->Write( keyBgColor_Green, g_Parm_3D_Visu.m_BgColor.m_Green );
|
||||
aCfg->Write( keyBgColor_Blue, g_Parm_3D_Visu.m_BgColor.m_Blue );
|
||||
aCfg->Write( keyShowRealisticMode, prms.GetFlag( FL_USE_REALISTIC_MODE ) );
|
||||
aCfg->Write( keyUseHQinRealisticMode, prms.GetFlag( FL_USE_MAXQUALITY_IN_REALISTIC_MODE ) );
|
||||
aCfg->Write( keyShowAxis, prms.GetFlag( FL_AXIS ) );
|
||||
aCfg->Write( keyShowGrid, prms.GetFlag( FL_GRID ) );
|
||||
aCfg->Write( keyShowGridSize, prms.m_3D_Grid );
|
||||
aCfg->Write( keyShowFootprints, prms.GetFlag( FL_MODULE ) );
|
||||
aCfg->Write( keyShowCopperThickness, prms.GetFlag( FL_USE_COPPER_THICKNESS ) );
|
||||
aCfg->Write( keyShowZones, prms.GetFlag( FL_ZONE ) );
|
||||
aCfg->Write( keyShowAdhesiveLayers, prms.GetFlag( FL_ADHESIVE ) );
|
||||
aCfg->Write( keyShowSilkScreenLayers, prms.GetFlag( FL_SILKSCREEN ) );
|
||||
aCfg->Write( keyShowSolderMaskLayers, prms.GetFlag( FL_SOLDERMASK ) );
|
||||
aCfg->Write( keyShowSolderPasteLayers, prms.GetFlag( FL_SOLDERPASTE ) );
|
||||
aCfg->Write( keyShowCommentsLayer, prms.GetFlag( FL_COMMENTS ) );
|
||||
aCfg->Write( keyShowEcoLayers, prms.GetFlag( FL_ECO ) );
|
||||
aCfg->Write( keyShowBoardBody, prms.GetFlag( FL_SHOW_BOARD_BODY ) );
|
||||
}
|
||||
|
||||
|
||||
@@ -357,6 +433,11 @@ void EDA_3D_FRAME::Process_Special_Functions( wxCommandEvent& event )
|
||||
NewDisplay();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_MAX_QUALITY_FOR_REALISTIC_MODE:
|
||||
g_Parm_3D_Visu.SetFlag( FL_USE_MAXQUALITY_IN_REALISTIC_MODE, isChecked );
|
||||
NewDisplay();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_SHOW_BOARD_BODY:
|
||||
g_Parm_3D_Visu.SetFlag( FL_SHOW_BOARD_BODY, isChecked );
|
||||
NewDisplay();
|
||||
@@ -364,52 +445,52 @@ void EDA_3D_FRAME::Process_Special_Functions( wxCommandEvent& event )
|
||||
|
||||
case ID_MENU3D_AXIS_ONOFF:
|
||||
g_Parm_3D_Visu.SetFlag( FL_AXIS, isChecked );
|
||||
NewDisplay();
|
||||
m_canvas->Refresh();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_MODULE_ONOFF:
|
||||
g_Parm_3D_Visu.SetFlag( FL_MODULE, isChecked );
|
||||
NewDisplay();
|
||||
m_canvas->Refresh();
|
||||
return;
|
||||
|
||||
case ID_MENU3D_USE_COPPER_THICKNESS:
|
||||
g_Parm_3D_Visu.SetFlag( FL_USE_COPPER_THICKNESS, isChecked );
|
||||
NewDisplay();
|
||||
NewDisplay(GL_ID_BOARD);
|
||||
return;
|
||||
|
||||
case ID_MENU3D_ZONE_ONOFF:
|
||||
g_Parm_3D_Visu.SetFlag( FL_ZONE, isChecked );
|
||||
NewDisplay();
|
||||
NewDisplay(GL_ID_BOARD);
|
||||
return;
|
||||
|
||||
case ID_MENU3D_ADHESIVE_ONOFF:
|
||||
g_Parm_3D_Visu.SetFlag( FL_ADHESIVE, isChecked );
|
||||
NewDisplay();
|
||||
NewDisplay(GL_ID_TECH_LAYERS);
|
||||
return;
|
||||
|
||||
case ID_MENU3D_SILKSCREEN_ONOFF:
|
||||
g_Parm_3D_Visu.SetFlag( FL_SILKSCREEN, isChecked );
|
||||
NewDisplay();
|
||||
NewDisplay(GL_ID_TECH_LAYERS);
|
||||
return;
|
||||
|
||||
case ID_MENU3D_SOLDER_MASK_ONOFF:
|
||||
g_Parm_3D_Visu.SetFlag( FL_SOLDERMASK, isChecked );
|
||||
NewDisplay();
|
||||
NewDisplay(GL_ID_TECH_LAYERS);
|
||||
return;
|
||||
|
||||
case ID_MENU3D_SOLDER_PASTE_ONOFF:
|
||||
g_Parm_3D_Visu.SetFlag( FL_SOLDERPASTE, isChecked );
|
||||
NewDisplay();
|
||||
NewDisplay(GL_ID_TECH_LAYERS);
|
||||
return;
|
||||
|
||||
case ID_MENU3D_COMMENTS_ONOFF:
|
||||
g_Parm_3D_Visu.SetFlag( FL_COMMENTS, isChecked );
|
||||
NewDisplay();
|
||||
NewDisplay(GL_ID_AUX_LAYERS);
|
||||
return;
|
||||
|
||||
case ID_MENU3D_ECO_ONOFF:
|
||||
g_Parm_3D_Visu.SetFlag( FL_ECO, isChecked );
|
||||
NewDisplay();
|
||||
NewDisplay(GL_ID_AUX_LAYERS);
|
||||
return;
|
||||
|
||||
default:
|
||||
@@ -434,7 +515,6 @@ void EDA_3D_FRAME::On3DGridSelection( wxCommandEvent& event )
|
||||
GetMenuBar()->Check( ii, false );
|
||||
}
|
||||
|
||||
|
||||
switch( id )
|
||||
{
|
||||
case ID_MENU3D_GRID_NOGRID:
|
||||
@@ -466,18 +546,17 @@ void EDA_3D_FRAME::On3DGridSelection( wxCommandEvent& event )
|
||||
return;
|
||||
}
|
||||
|
||||
NewDisplay();
|
||||
NewDisplay( GL_ID_GRID );
|
||||
}
|
||||
|
||||
|
||||
void EDA_3D_FRAME::NewDisplay()
|
||||
void EDA_3D_FRAME::NewDisplay( int aGlList )
|
||||
{
|
||||
m_reloadRequest = false;
|
||||
|
||||
m_canvas->ClearLists();
|
||||
m_canvas->ClearLists( aGlList );
|
||||
m_canvas->CreateDrawGL_List();
|
||||
|
||||
// m_canvas->InitGL();
|
||||
m_canvas->Refresh( true );
|
||||
m_canvas->DisplayStatus();
|
||||
}
|
||||
@@ -507,11 +586,19 @@ void EDA_3D_FRAME::Set3DBgColor()
|
||||
|
||||
newcolor = wxGetColourFromUser( this, oldcolor );
|
||||
|
||||
if( !newcolor.IsOk() ) // Cancel command
|
||||
return;
|
||||
|
||||
if( newcolor != oldcolor )
|
||||
{
|
||||
g_Parm_3D_Visu.m_BgColor.m_Red = (double) newcolor.Red() / 255.0;
|
||||
g_Parm_3D_Visu.m_BgColor.m_Red = (double) newcolor.Red() / 255.0;
|
||||
g_Parm_3D_Visu.m_BgColor.m_Green = (double) newcolor.Green() / 255.0;
|
||||
g_Parm_3D_Visu.m_BgColor.m_Blue = (double) newcolor.Blue() / 255.0;
|
||||
NewDisplay();
|
||||
m_canvas->Redraw();
|
||||
}
|
||||
}
|
||||
|
||||
BOARD* EDA_3D_FRAME::GetBoard()
|
||||
{
|
||||
return Parent()->GetBoard();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,136 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Mario Luzeiro <mrluzeiro@gmail.com>
|
||||
* Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
/**
|
||||
* @file 3d_class.cpp
|
||||
*/
|
||||
|
||||
#include <fctsys.h>
|
||||
#include <3d_struct.h>
|
||||
#include <3d_material.h>
|
||||
|
||||
#ifdef __WXMAC__
|
||||
# ifdef __DARWIN__
|
||||
# include <OpenGL/glu.h>
|
||||
# else
|
||||
# include <glu.h>
|
||||
# endif
|
||||
#else
|
||||
# include <GL/glu.h>
|
||||
#endif
|
||||
|
||||
S3D_MATERIAL::S3D_MATERIAL( S3D_MASTER* father, const wxString& name ) :
|
||||
EDA_ITEM( father, NOT_USED )
|
||||
{
|
||||
m_Name = name;
|
||||
m_AmbientColor.clear();
|
||||
m_DiffuseColor.clear();
|
||||
m_EmissiveColor.clear();
|
||||
m_SpecularColor.clear();
|
||||
m_Shininess.clear();
|
||||
m_Transparency.clear();
|
||||
}
|
||||
|
||||
|
||||
void SetOpenGlDefaultMaterial()
|
||||
{
|
||||
glm::vec4 ambient( 0.15, 0.15, 0.15, 1.0 );
|
||||
glm::vec4 specular( 0.1, 0.1, 0.1, 1.0 );
|
||||
glm::vec4 emissive( 0.1, 0.1, 0.1, 1.0 );
|
||||
GLint shininess_value = 80;
|
||||
|
||||
glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );
|
||||
//glColor4f( 1.0, 1.0, 1.0, 1.0 );
|
||||
glMateriali ( GL_FRONT_AND_BACK, GL_SHININESS, shininess_value );
|
||||
glMaterialfv( GL_FRONT_AND_BACK, GL_EMISSION, &emissive.x );
|
||||
glMaterialfv( GL_FRONT_AND_BACK, GL_SPECULAR, &specular.x );
|
||||
glMaterialfv( GL_FRONT_AND_BACK, GL_AMBIENT, &ambient.x );
|
||||
|
||||
}
|
||||
|
||||
|
||||
void S3D_MATERIAL::SetOpenGLMaterial( unsigned int materialIndex )
|
||||
{
|
||||
S3D_MASTER * s3dParent = (S3D_MASTER *) GetParent();
|
||||
|
||||
if( ! s3dParent->IsOpenGlAllowed() )
|
||||
return;
|
||||
|
||||
float transparency_value = 0.0f;
|
||||
if( m_Transparency.size() > materialIndex )
|
||||
{
|
||||
transparency_value = m_Transparency[materialIndex];
|
||||
s3dParent->SetLastTransparency( transparency_value );
|
||||
}
|
||||
|
||||
if( m_DiffuseColor.size() > materialIndex )
|
||||
{
|
||||
glm::vec3 color = m_DiffuseColor[materialIndex];
|
||||
|
||||
if( m_AmbientColor.size() == 0 )
|
||||
{
|
||||
glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );
|
||||
}
|
||||
|
||||
glColor4f( color.x, color.y, color.z, 1.0 - transparency_value );
|
||||
}
|
||||
|
||||
if( m_Shininess.size() > materialIndex )
|
||||
{
|
||||
glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, m_Shininess[materialIndex] );
|
||||
}
|
||||
|
||||
// emissive
|
||||
if( m_EmissiveColor.size() > materialIndex )
|
||||
{
|
||||
glm::vec4 emissive;
|
||||
emissive[0] = m_EmissiveColor[materialIndex].x;
|
||||
emissive[1] = m_EmissiveColor[materialIndex].y;
|
||||
emissive[2] = m_EmissiveColor[materialIndex].z;
|
||||
emissive[3] = 1.0f;
|
||||
glMaterialfv( GL_FRONT_AND_BACK, GL_EMISSION, &emissive.x );
|
||||
}
|
||||
|
||||
// specular
|
||||
if( m_SpecularColor.size() > materialIndex )
|
||||
{
|
||||
glm::vec4 specular;
|
||||
specular[0] = m_SpecularColor[materialIndex].x;
|
||||
specular[1] = m_SpecularColor[materialIndex].y;
|
||||
specular[2] = m_SpecularColor[materialIndex].z;
|
||||
specular[3] = 1.0f;
|
||||
glMaterialfv( GL_FRONT_AND_BACK, GL_SPECULAR, &specular.x );
|
||||
}
|
||||
|
||||
// ambient
|
||||
if( m_AmbientColor.size() > materialIndex )
|
||||
{
|
||||
glm::vec4 ambient;
|
||||
ambient[0] = m_AmbientColor[materialIndex].x;
|
||||
ambient[1] = m_AmbientColor[materialIndex].y;
|
||||
ambient[2] = m_AmbientColor[materialIndex].z;
|
||||
ambient[3] = 1.0f;
|
||||
glMaterialfv( GL_FRONT_AND_BACK, GL_AMBIENT, &ambient.x );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Mario Luzeiro <mrluzeiro@gmail.com>
|
||||
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file 3d_material.h
|
||||
*/
|
||||
|
||||
#ifndef STRUCT_3D_MATERIAL_H
|
||||
#define STRUCT_3D_MATERIAL_H
|
||||
|
||||
#include <common.h>
|
||||
#include <base_struct.h>
|
||||
#include <gal/opengl/glm/glm.hpp>
|
||||
|
||||
class S3D_MASTER;
|
||||
|
||||
class S3D_MATERIAL : public EDA_ITEM /* openGL "material" data*/
|
||||
{
|
||||
public:
|
||||
wxString m_Name;
|
||||
|
||||
// Material list
|
||||
std::vector< glm::vec3 > m_AmbientColor;
|
||||
std::vector< glm::vec3 > m_DiffuseColor;
|
||||
std::vector< glm::vec3 > m_EmissiveColor;
|
||||
std::vector< glm::vec3 > m_SpecularColor;
|
||||
std::vector< float > m_Shininess;
|
||||
std::vector< float > m_Transparency;
|
||||
|
||||
public:
|
||||
S3D_MATERIAL( S3D_MASTER* father, const wxString& name );
|
||||
|
||||
S3D_MATERIAL* Next() const { return (S3D_MATERIAL*) Pnext; }
|
||||
S3D_MATERIAL* Back() const { return (S3D_MATERIAL*) Pback; }
|
||||
|
||||
void SetOpenGLMaterial(unsigned int materialIndex);
|
||||
|
||||
#if defined(DEBUG)
|
||||
void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
|
||||
#endif
|
||||
};
|
||||
|
||||
void SetOpenGlDefaultMaterial();
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,408 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Mario Luzeiro <mrluzeiro@gmail.com>
|
||||
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file 3d_mesh_model.cpp
|
||||
* @brief
|
||||
*/
|
||||
|
||||
|
||||
#include <3d_mesh_model.h>
|
||||
#include <boost/geometry/algorithms/area.hpp>
|
||||
|
||||
S3D_MESH::S3D_MESH()
|
||||
{
|
||||
isPerFaceNormalsComputed = false;
|
||||
isPointNormalizedComputed = false;
|
||||
isPerPointNormalsComputed = false;
|
||||
m_Materials = NULL;
|
||||
childs.clear();
|
||||
|
||||
m_translation = glm::vec3( 0.0f, 0.0f, 0.0f );
|
||||
m_rotation = glm::vec4( 0.0f, 0.0f, 0.0f, 0.0f );
|
||||
m_scale = glm::vec3( 1.0f, 1.0f, 1.0f );
|
||||
m_scaleOrientation = glm::vec4( 0.0f, 0.0f, 1.0f, 0.0f ); // not used
|
||||
m_center = glm::vec3( 0.0f, 0.0f, 0.0f ); // not used
|
||||
}
|
||||
|
||||
|
||||
S3D_MESH::~S3D_MESH()
|
||||
{
|
||||
for( unsigned int idx = 0; idx < childs.size(); idx++ )
|
||||
{
|
||||
delete childs[idx];
|
||||
}
|
||||
}
|
||||
|
||||
void S3D_MESH::openGL_RenderAllChilds()
|
||||
{
|
||||
//DBG( printf( "openGL_RenderAllChilds") );
|
||||
|
||||
glPushMatrix();
|
||||
glTranslatef( m_translation.x, m_translation.y, m_translation.z );
|
||||
glRotatef( m_rotation[3], m_rotation[0], m_rotation[1], m_rotation[2] );
|
||||
glScalef( m_scale.x, m_scale.y, m_scale.z );
|
||||
|
||||
SetOpenGlDefaultMaterial();
|
||||
|
||||
// Render your self
|
||||
openGL_Render();
|
||||
|
||||
// Render childs
|
||||
for( unsigned int idx = 0; idx < childs.size(); idx++ )
|
||||
{
|
||||
childs[idx]->openGL_Render();
|
||||
}
|
||||
|
||||
SetOpenGlDefaultMaterial();
|
||||
|
||||
glPopMatrix();
|
||||
|
||||
}
|
||||
|
||||
|
||||
void S3D_MESH::openGL_Render()
|
||||
{
|
||||
//DBG( printf( "openGL_Render" ) );
|
||||
|
||||
if( m_Materials )
|
||||
{
|
||||
m_Materials->SetOpenGLMaterial( 0 );
|
||||
}
|
||||
|
||||
if( m_CoordIndex.size() == 0)
|
||||
{
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
glPushMatrix();
|
||||
glTranslatef( m_translation.x, m_translation.y, m_translation.z );
|
||||
glRotatef( m_rotation[3], m_rotation[0], m_rotation[1], m_rotation[2] );
|
||||
glScalef( m_scale.x, m_scale.y, m_scale.z );
|
||||
|
||||
std::vector< glm::vec3 > normals;
|
||||
|
||||
calcPointNormalized();
|
||||
calcPerFaceNormals();
|
||||
|
||||
if( m_PerVertexNormalsNormalized.size() == 0 )
|
||||
{
|
||||
if( g_Parm_3D_Visu.IsRealisticMode() && g_Parm_3D_Visu.HightQualityMode() )
|
||||
{
|
||||
calcPerPointNormals();
|
||||
}
|
||||
}
|
||||
|
||||
for( unsigned int idx = 0; idx < m_CoordIndex.size(); idx++ )
|
||||
{
|
||||
if( m_MaterialIndex.size() > 1 )
|
||||
{
|
||||
if( m_Materials )
|
||||
{
|
||||
m_Materials->SetOpenGLMaterial( m_MaterialIndex[idx] );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
switch( m_CoordIndex[idx].size() )
|
||||
{
|
||||
case 3: glBegin( GL_TRIANGLES );break;
|
||||
case 4: glBegin( GL_QUADS ); break;
|
||||
default: glBegin( GL_POLYGON ); break;
|
||||
}
|
||||
|
||||
|
||||
if( m_PerVertexNormalsNormalized.size() > 0 )
|
||||
{
|
||||
for( unsigned int ii = 0; ii < m_CoordIndex[idx].size(); ii++ )
|
||||
{
|
||||
glm::vec3 normal = m_PerVertexNormalsNormalized[m_NormalIndex[idx][ii]];
|
||||
glNormal3fv( &normal.x );
|
||||
|
||||
glm::vec3 point = m_Point[m_CoordIndex[idx][ii]];
|
||||
glVertex3fv( &point.x );
|
||||
}
|
||||
} else if( g_Parm_3D_Visu.IsRealisticMode() && g_Parm_3D_Visu.HightQualityMode() )
|
||||
{
|
||||
std::vector< glm::vec3 > normals_list;
|
||||
normals_list = m_PerFaceVertexNormals[idx];
|
||||
|
||||
for( unsigned int ii = 0; ii < m_CoordIndex[idx].size(); ii++ )
|
||||
{
|
||||
glm::vec3 normal = normals_list[ii];
|
||||
glNormal3fv( &normal.x );
|
||||
|
||||
glm::vec3 point = m_Point[m_CoordIndex[idx][ii]];
|
||||
glVertex3fv( &point.x );
|
||||
}
|
||||
} else
|
||||
{
|
||||
// Flat
|
||||
glm::vec3 normal = m_PerFaceNormalsNormalized[idx];
|
||||
|
||||
for( unsigned int ii = 0; ii < m_CoordIndex[idx].size(); ii++ )
|
||||
{
|
||||
glNormal3fv( &normal.x );
|
||||
|
||||
glm::vec3 point = m_Point[m_CoordIndex[idx][ii]];
|
||||
glVertex3fv( &point.x );
|
||||
}
|
||||
}
|
||||
|
||||
glEnd();
|
||||
}
|
||||
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
|
||||
void S3D_MESH::calcPointNormalized ()
|
||||
{
|
||||
//DBG( printf( "calcPointNormalized\n" ) );
|
||||
|
||||
if( isPointNormalizedComputed == true )
|
||||
{
|
||||
return;
|
||||
}
|
||||
isPointNormalizedComputed = true;
|
||||
|
||||
if( m_PerVertexNormalsNormalized.size() > 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
m_PointNormalized.clear();
|
||||
|
||||
float biggerPoint = 0.0f;
|
||||
for( unsigned int i = 0; i< m_Point.size(); i++ )
|
||||
{
|
||||
if( fabs( m_Point[i].x ) > biggerPoint) biggerPoint = fabs( m_Point[i].x );
|
||||
if( fabs( m_Point[i].y ) > biggerPoint) biggerPoint = fabs( m_Point[i].y );
|
||||
if( fabs( m_Point[i].z ) > biggerPoint) biggerPoint = fabs( m_Point[i].z );
|
||||
}
|
||||
|
||||
biggerPoint = 1.0 / biggerPoint;
|
||||
|
||||
for( unsigned int i= 0; i< m_Point.size(); i++ )
|
||||
{
|
||||
glm::vec3 p;
|
||||
p = m_Point[i] * biggerPoint;
|
||||
m_PointNormalized.push_back( p );
|
||||
}
|
||||
|
||||
//DBG( printf("m_Point.size %u\n", m_Point.size()) );
|
||||
}
|
||||
|
||||
|
||||
bool IsClockwise( glm::vec3 v0, glm::vec3 v1, glm::vec3 v2 )
|
||||
{
|
||||
double sum = 0.0;
|
||||
|
||||
sum += (v1.x - v0.x) * (v1.y + v0.y);
|
||||
sum += (v2.x - v1.x) * (v2.y + v1.y);
|
||||
sum += (v0.x - v2.x) * (v0.y + v2.y);
|
||||
|
||||
return sum > FLT_EPSILON;
|
||||
}
|
||||
|
||||
|
||||
void S3D_MESH::calcPerFaceNormals ()
|
||||
{
|
||||
//DBG( printf( "calcPerFaceNormals" ) );
|
||||
|
||||
if( isPerFaceNormalsComputed == true )
|
||||
{
|
||||
|
||||
return;
|
||||
}
|
||||
isPerFaceNormalsComputed = true;
|
||||
|
||||
|
||||
if( m_PerVertexNormalsNormalized.size() > 0 )
|
||||
{
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
bool haveAlreadyNormals_from_model_file = false;
|
||||
|
||||
if( m_PerFaceNormalsNormalized.size() > 0 )
|
||||
{
|
||||
haveAlreadyNormals_from_model_file = true;
|
||||
}
|
||||
|
||||
m_PerFaceNormalsRaw.clear();
|
||||
m_PerFaceSquaredArea.clear();
|
||||
|
||||
//DBG( printf("m_CoordIndex.size %u\n", m_CoordIndex.size()) );
|
||||
//DBG( printf("m_PointNormalized.size %u\n", m_PointNormalized.size()) );
|
||||
|
||||
for( unsigned int idx = 0; idx < m_CoordIndex.size(); idx++ )
|
||||
{
|
||||
|
||||
// User normalized and multiply to get better resolution
|
||||
glm::vec3 v0 = m_PointNormalized[m_CoordIndex[idx][0]];
|
||||
glm::vec3 v1 = m_PointNormalized[m_CoordIndex[idx][1]];
|
||||
glm::vec3 v2 = m_PointNormalized[m_CoordIndex[idx][m_CoordIndex[idx].size() - 1]];
|
||||
|
||||
/*
|
||||
// !TODO: improove and check what is best to calc the normal (check what have more resolution)
|
||||
glm::vec3 v0 = m_Point[m_CoordIndex[idx][0]];
|
||||
glm::vec3 v1 = m_Point[m_CoordIndex[idx][1]];
|
||||
glm::vec3 v2 = m_Point[m_CoordIndex[idx][m_CoordIndex[idx].size() - 1]];
|
||||
*/
|
||||
|
||||
glm::vec3 cross_prod;
|
||||
|
||||
/*
|
||||
// This is not working as good as it is expected :/
|
||||
if( IsClockwise( v0, v1, v2 ) )
|
||||
{
|
||||
// CW
|
||||
cross_prod = glm::cross( v1 - v2, v0 - v2 );
|
||||
} else
|
||||
{*/
|
||||
// CCW
|
||||
cross_prod = glm::cross( v1 - v0, v2 - v0 );
|
||||
//}
|
||||
|
||||
float area = glm::dot( cross_prod, cross_prod );
|
||||
|
||||
if( cross_prod[2] < 0.0 )
|
||||
{
|
||||
area = -area;
|
||||
}
|
||||
|
||||
if( area < FLT_EPSILON )
|
||||
{
|
||||
area = FLT_EPSILON * 2.0f;
|
||||
}
|
||||
|
||||
m_PerFaceSquaredArea.push_back( area );
|
||||
|
||||
m_PerFaceNormalsRaw.push_back( cross_prod );
|
||||
|
||||
if( haveAlreadyNormals_from_model_file == false )
|
||||
{
|
||||
|
||||
// normalize vertex normal
|
||||
float l = glm::length( cross_prod );
|
||||
|
||||
if( l > FLT_EPSILON ) // avoid division by zero
|
||||
{
|
||||
cross_prod = cross_prod / l;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Cannot calc normal
|
||||
if( ( cross_prod.x > cross_prod.y ) && ( cross_prod.x > cross_prod.z ) )
|
||||
{
|
||||
cross_prod.x = 1.0; cross_prod.y = 0.0; cross_prod.z = 0.0;
|
||||
} else if( ( cross_prod.y > cross_prod.x ) && ( cross_prod.y > cross_prod.z ))
|
||||
{
|
||||
cross_prod.x = 0.0; cross_prod.y = 1.0; cross_prod.z = 0.0;
|
||||
} else
|
||||
{
|
||||
cross_prod.x = 0.0; cross_prod.y = 1.0; cross_prod.z = 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
m_PerFaceNormalsNormalized.push_back( cross_prod );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// http://www.bytehazard.com/code/vertnorm.html
|
||||
// http://www.emeyex.com/site/tuts/VertexNormals.pdf
|
||||
void S3D_MESH::calcPerPointNormals ()
|
||||
{
|
||||
//DBG( printf( "calcPerPointNormals" ) );
|
||||
|
||||
if( isPerPointNormalsComputed == true )
|
||||
{
|
||||
return;
|
||||
}
|
||||
isPerPointNormalsComputed = true;
|
||||
|
||||
if( m_PerVertexNormalsNormalized.size() > 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
m_PerFaceVertexNormals.clear();
|
||||
|
||||
// for each face A in mesh
|
||||
for( unsigned int each_face_A_idx = 0; each_face_A_idx < m_CoordIndex.size(); each_face_A_idx++ )
|
||||
{
|
||||
// n = face A facet normal
|
||||
std::vector< glm::vec3 > face_A_normals;
|
||||
face_A_normals.clear();
|
||||
face_A_normals.resize(m_CoordIndex[each_face_A_idx].size());
|
||||
|
||||
// loop through all 3 vertices
|
||||
// for each vert in face A
|
||||
for( unsigned int each_vert_A_idx = 0; each_vert_A_idx < m_CoordIndex[each_face_A_idx].size(); each_vert_A_idx++ )
|
||||
{
|
||||
face_A_normals[each_vert_A_idx] = m_PerFaceNormalsRaw[each_face_A_idx] * (m_PerFaceSquaredArea[each_face_A_idx]);
|
||||
|
||||
int vertexIndex = (int)(m_CoordIndex[each_face_A_idx][each_vert_A_idx]);
|
||||
glm::vec3 vector_face_A = m_PerFaceNormalsNormalized[each_face_A_idx];
|
||||
|
||||
// for each face B in mesh
|
||||
for( unsigned int each_face_B_idx = 0; each_face_B_idx < m_CoordIndex.size(); each_face_B_idx++ )
|
||||
{
|
||||
//if A != B { // ignore self
|
||||
if ( each_face_A_idx != each_face_B_idx)
|
||||
{
|
||||
if( (m_CoordIndex[each_face_B_idx][0] == vertexIndex) ||
|
||||
(m_CoordIndex[each_face_B_idx][1] == vertexIndex) ||
|
||||
(m_CoordIndex[each_face_B_idx][2] == vertexIndex) )
|
||||
{
|
||||
glm::vec3 vector_face_B = m_PerFaceNormalsNormalized[each_face_B_idx];
|
||||
|
||||
float dot_prod = glm::dot(vector_face_A, vector_face_B);
|
||||
if( dot_prod > 0.05f )
|
||||
{
|
||||
face_A_normals[each_vert_A_idx] += m_PerFaceNormalsRaw[each_face_B_idx] * (m_PerFaceSquaredArea[each_face_B_idx] * dot_prod);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// normalize vertex normal
|
||||
float l = glm::length( face_A_normals[each_vert_A_idx] );
|
||||
|
||||
if( l > FLT_EPSILON ) // avoid division by zero
|
||||
{
|
||||
face_A_normals[each_vert_A_idx] /= l;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
m_PerFaceVertexNormals.push_back( face_A_normals );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Mario Luzeiro <mrluzeiro@gmail.com>
|
||||
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file 3d_mesh_model.h
|
||||
* @brief
|
||||
*/
|
||||
|
||||
#ifndef __3D_MESH_MODEL_H__
|
||||
#define __3D_MESH_MODEL_H__
|
||||
|
||||
#include <fctsys.h>
|
||||
#include <common.h>
|
||||
#include <macros.h>
|
||||
#include <base_struct.h>
|
||||
#include <gal/opengl/glm/glm.hpp>
|
||||
#include <vector>
|
||||
#include <kicad_string.h>
|
||||
#include <info3d_visu.h>
|
||||
#ifdef __WXMAC__
|
||||
# ifdef __DARWIN__
|
||||
# include <OpenGL/glu.h>
|
||||
# else
|
||||
# include <glu.h>
|
||||
# endif
|
||||
#else
|
||||
# include <GL/glu.h>
|
||||
#endif
|
||||
#include <wx/glcanvas.h>
|
||||
|
||||
class S3D_MESH;
|
||||
|
||||
class S3D_MESH
|
||||
{
|
||||
public:
|
||||
|
||||
S3D_MESH();
|
||||
~S3D_MESH();
|
||||
|
||||
void openGL_Render();
|
||||
void openGL_RenderAllChilds();
|
||||
|
||||
S3D_MATERIAL *m_Materials;
|
||||
|
||||
// Point and index list
|
||||
std::vector< glm::vec3 > m_Point;
|
||||
std::vector< std::vector<int> > m_CoordIndex;
|
||||
std::vector< std::vector<int> > m_NormalIndex;
|
||||
std::vector< glm::vec3 > m_PerFaceNormalsNormalized;
|
||||
std::vector< glm::vec3 > m_PerVertexNormalsNormalized;
|
||||
|
||||
std::vector< int > m_MaterialIndex;
|
||||
|
||||
glm::vec3 m_translation;
|
||||
glm::vec4 m_rotation;
|
||||
glm::vec3 m_scale;
|
||||
glm::vec4 m_scaleOrientation; // not used
|
||||
glm::vec3 m_center; // not used
|
||||
|
||||
std::vector<S3D_MESH *> childs;
|
||||
|
||||
private:
|
||||
std::vector< glm::vec3 > m_PerFaceNormalsRaw;
|
||||
std::vector< std::vector< glm::vec3 > > m_PerFaceVertexNormals;
|
||||
std::vector< glm::vec3 > m_PointNormalized;
|
||||
std::vector< float > m_PerFaceSquaredArea;
|
||||
std::vector< std::vector<int> > m_InvalidCoordIndexes; //!TODO: check for invalid CoordIndex in file and remove the index and the same material index
|
||||
|
||||
bool isPerFaceNormalsComputed;
|
||||
void calcPerFaceNormals ();
|
||||
|
||||
bool isPointNormalizedComputed;
|
||||
void calcPointNormalized();
|
||||
|
||||
bool isPerPointNormalsComputed;
|
||||
void calcPerPointNormals();
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
+35
-20
@@ -31,16 +31,13 @@
|
||||
#include <common.h>
|
||||
#include <macros.h>
|
||||
#include <kicad_string.h>
|
||||
#include <appl_wxstruct.h>
|
||||
#include <pgm_base.h>
|
||||
|
||||
#include <3d_viewer.h>
|
||||
#include <info3d_visu.h>
|
||||
#include "3d_struct.h"
|
||||
#include "modelparsers.h"
|
||||
|
||||
// Imported function:
|
||||
extern void Set_Object_Data( std::vector< S3D_VERTEX >& aVertices, double aBiuTo3DUnits );
|
||||
|
||||
|
||||
S3D_MODEL_PARSER* S3D_MODEL_PARSER::Create( S3D_MASTER* aMaster,
|
||||
const wxString aExtension )
|
||||
@@ -59,16 +56,46 @@ S3D_MODEL_PARSER* S3D_MODEL_PARSER::Create( S3D_MASTER* aMaster,
|
||||
}
|
||||
}
|
||||
|
||||
const wxString S3D_MASTER::GetShape3DFullFilename()
|
||||
{
|
||||
|
||||
wxString shapeName;
|
||||
|
||||
// Expand any environment variables embedded in footprint's m_Shape3DName field.
|
||||
// To ensure compatibility with most of footprint's m_Shape3DName field,
|
||||
// if the m_Shape3DName is not an absolute path the default path
|
||||
// given by the environment variable KISYS3DMOD will be used
|
||||
|
||||
if( m_Shape3DName.StartsWith( wxT("${") ) )
|
||||
shapeName = wxExpandEnvVars( m_Shape3DName );
|
||||
else
|
||||
shapeName = m_Shape3DName;
|
||||
|
||||
wxFileName fn( shapeName );
|
||||
|
||||
if( fn.IsAbsolute() || shapeName.StartsWith( wxT(".") ) )
|
||||
return shapeName;
|
||||
|
||||
wxString default_path;
|
||||
wxGetEnv( wxT( KISYS3DMOD ), &default_path );
|
||||
|
||||
if( default_path.IsEmpty() )
|
||||
return shapeName;
|
||||
|
||||
if( !default_path.EndsWith( wxT("/") ) && !default_path.EndsWith( wxT("\\") ) )
|
||||
default_path += wxT("/");
|
||||
|
||||
default_path += shapeName;
|
||||
|
||||
return default_path;
|
||||
}
|
||||
|
||||
int S3D_MASTER::ReadData()
|
||||
{
|
||||
if( m_Shape3DName.IsEmpty() )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Expand any environment variables embedded in footprint's m_Shape3DName field.
|
||||
wxString filename = wxExpandEnvVars( m_Shape3DName );
|
||||
wxString filename = GetShape3DFullFilename();
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
filename.Replace( wxT( "/" ), wxT( "\\" ) );
|
||||
@@ -103,15 +130,3 @@ int S3D_MASTER::ReadData()
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int STRUCT_3D_SHAPE::ReadData( FILE* file, int* LineNum )
|
||||
{
|
||||
char line[512];
|
||||
|
||||
while( GetLine( file, line, LineNum, 512 ) )
|
||||
{
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
+65
-52
@@ -1,6 +1,7 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Mario Luzeiro <mrluzeiro@gmail.com>
|
||||
* Copyright (C) 2004 Jean-Pierre Charras, jaen-pierre.charras@gipsa-lab.inpg.com
|
||||
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
@@ -32,8 +33,9 @@
|
||||
|
||||
#include <common.h>
|
||||
#include <base_struct.h>
|
||||
|
||||
|
||||
#include <3d_material.h>
|
||||
#include <gal/opengl/glm/glm.hpp>
|
||||
|
||||
/* 3D modeling units -> PCB units conversion scale:
|
||||
* 1 "3D model unit" wings3d = 1 unit = 2.54 mm = 0.1 inch = 100 mils
|
||||
*/
|
||||
@@ -44,48 +46,7 @@ class S3D_MASTER;
|
||||
class STRUCT_3D_SHAPE;
|
||||
|
||||
/* S3D_VERTEX manages a 3D coordinate (3 float numbers: x,y,z coordinates)*/
|
||||
class S3D_VERTEX
|
||||
{
|
||||
public:
|
||||
double x, y, z;
|
||||
|
||||
public:
|
||||
S3D_VERTEX()
|
||||
{
|
||||
x = y = z = 0.0;
|
||||
}
|
||||
|
||||
S3D_VERTEX( double px, double py, double pz)
|
||||
{
|
||||
x = px;
|
||||
y = py;
|
||||
z = pz;
|
||||
}
|
||||
};
|
||||
|
||||
class S3D_MATERIAL : public EDA_ITEM /* openGL "material" data*/
|
||||
{
|
||||
public:
|
||||
wxString m_Name;
|
||||
S3D_VERTEX m_DiffuseColor;
|
||||
S3D_VERTEX m_EmissiveColor;
|
||||
S3D_VERTEX m_SpecularColor;
|
||||
float m_AmbientIntensity;
|
||||
float m_Transparency;
|
||||
float m_Shininess;
|
||||
|
||||
public:
|
||||
S3D_MATERIAL( S3D_MASTER* father, const wxString& name );
|
||||
|
||||
S3D_MATERIAL* Next() const { return (S3D_MATERIAL*) Pnext; }
|
||||
S3D_MATERIAL* Back() const { return (S3D_MATERIAL*) Pback; }
|
||||
|
||||
void SetMaterial();
|
||||
|
||||
#if defined(DEBUG)
|
||||
void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
|
||||
#endif
|
||||
};
|
||||
#define S3D_VERTEX glm::vec3
|
||||
|
||||
|
||||
/* Master structure for a 3D item description */
|
||||
@@ -106,9 +67,23 @@ public:
|
||||
FILE3D_UNKNOWN
|
||||
};
|
||||
|
||||
// Check defaults in S3D_MASTER
|
||||
bool m_use_modelfile_diffuseColor;
|
||||
bool m_use_modelfile_emissiveColor;
|
||||
bool m_use_modelfile_specularColor;
|
||||
bool m_use_modelfile_ambientIntensity;
|
||||
bool m_use_modelfile_transparency;
|
||||
bool m_use_modelfile_shininess;
|
||||
|
||||
private:
|
||||
wxString m_Shape3DName; /* 3D shape name in 3D library */
|
||||
FILE3D_TYPE m_ShapeType;
|
||||
double m_lastTransparency; // last transparency value from
|
||||
// last material in use
|
||||
bool m_loadTransparentObjects;
|
||||
bool m_loadNonTransparentObjects;
|
||||
|
||||
|
||||
|
||||
public:
|
||||
S3D_MASTER( EDA_ITEM* aParent );
|
||||
@@ -117,16 +92,41 @@ public:
|
||||
S3D_MASTER* Next() const { return (S3D_MASTER*) Pnext; }
|
||||
S3D_MASTER* Back() const { return (S3D_MASTER*) Pback; }
|
||||
|
||||
void Insert( S3D_MATERIAL* aMaterial )
|
||||
{
|
||||
aMaterial->SetNext( m_Materials );
|
||||
m_Materials = aMaterial;
|
||||
}
|
||||
// Accessors
|
||||
void SetLastTransparency( double aValue ) { m_lastTransparency = aValue; }
|
||||
|
||||
void SetLoadTransparentObjects( bool aLoad )
|
||||
{ m_loadTransparentObjects = aLoad; }
|
||||
|
||||
void SetLoadNonTransparentObjects( bool aLoad )
|
||||
{ m_loadNonTransparentObjects = aLoad; }
|
||||
|
||||
void Insert( S3D_MATERIAL* aMaterial );
|
||||
|
||||
/**
|
||||
* Function IsOpenGlAllowed
|
||||
* @return true if opengl current list accepts a gl data
|
||||
* used to filter transparent objects, which are drawn after
|
||||
* non transparent objects
|
||||
*/
|
||||
bool IsOpenGlAllowed();
|
||||
|
||||
void Copy( S3D_MASTER* pattern );
|
||||
|
||||
/**
|
||||
* Function ReadData
|
||||
* Select the parser to read the 3D data file (vrml, x3d ...)
|
||||
* and build the description objects list
|
||||
*/
|
||||
int ReadData();
|
||||
void Set_Object_Coords( std::vector< S3D_VERTEX >& aVertices );
|
||||
|
||||
/**
|
||||
* Function ObjectCoordsTo3DUnits
|
||||
* @param aVertices = a list of 3D coordinates in shape units
|
||||
* to convert to 3D canvas units, according to the
|
||||
* footprint 3Dshape rotation, offset and scale parameters
|
||||
*/
|
||||
void ObjectCoordsTo3DUnits( std::vector< S3D_VERTEX >& aVertices );
|
||||
|
||||
#if defined(DEBUG)
|
||||
void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
|
||||
@@ -144,6 +144,21 @@ public:
|
||||
return m_Shape3DName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function GetShape3DFullFilename
|
||||
* @return the full filename of the 3D shape,
|
||||
* expanding environment variable (if any ) and/or adding default 3D path
|
||||
* given by environment variable KISYS3DMOD
|
||||
*/
|
||||
const wxString GetShape3DFullFilename();
|
||||
|
||||
/**
|
||||
* Function SetShape3DName
|
||||
* @param aShapeName = file name of the data file relative to the 3D shape
|
||||
*
|
||||
* Set the filename of the 3D shape, and depending on the file extention
|
||||
* (vrl, x3d, idf ) the type of file.
|
||||
*/
|
||||
void SetShape3DName( const wxString& aShapeName );
|
||||
};
|
||||
|
||||
@@ -163,8 +178,6 @@ public:
|
||||
STRUCT_3D_SHAPE* Next() const { return (STRUCT_3D_SHAPE*) Pnext; }
|
||||
STRUCT_3D_SHAPE* Back() const { return (STRUCT_3D_SHAPE*) Pback; }
|
||||
|
||||
int ReadData( FILE* file, int* LineNum );
|
||||
|
||||
#if defined(DEBUG)
|
||||
void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
|
||||
#endif
|
||||
|
||||
+41
-21
@@ -153,26 +153,43 @@ void EDA_3D_FRAME::CreateMenuBar()
|
||||
menuBar->Append( prefsMenu, _( "&Preferences" ) );
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_REALISTIC_MODE,
|
||||
_( "Realistic Mode" ), KiBitmap( use_3D_copper_thickness_xpm ), wxITEM_CHECK );
|
||||
_( "Realistic Mode" ),
|
||||
KiBitmap( use_3D_copper_thickness_xpm ), wxITEM_CHECK );
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_MAX_QUALITY_FOR_REALISTIC_MODE,
|
||||
_( "Max Quality in Realistic Mode" ),
|
||||
_( "When using max quality, holes are removed from copper zones, "
|
||||
"but the calculation time is longer" ),
|
||||
KiBitmap( green_xpm ), wxITEM_CHECK );
|
||||
|
||||
prefsMenu->AppendSeparator();
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_BGCOLOR_SELECTION,
|
||||
_( "Choose background color" ), KiBitmap( palette_xpm ) );
|
||||
_( "Choose Background Color" ), KiBitmap( palette_xpm ) );
|
||||
|
||||
AddMenuItem( prefsMenu, ID_MENU3D_AXIS_ONOFF,
|
||||
_( "Show 3D &Axis" ), KiBitmap( axis3d_front_xpm ), wxITEM_CHECK );
|
||||
_( "Show 3D &Axis" ), KiBitmap( axis3d_front_xpm ), wxITEM_CHECK );
|
||||
|
||||
// Creates grid menu
|
||||
wxMenu * gridlistMenu = new wxMenu;
|
||||
AddMenuItem( prefsMenu, gridlistMenu, ID_MENU3D_GRID,
|
||||
_( "3D Grid" ), KiBitmap( grid_xpm ) );
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_NOGRID, _( "No 3D Grid" ), wxEmptyString, true );
|
||||
gridlistMenu->Check( ID_MENU3D_GRID_NOGRID, true );
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_NOGRID, _( "No 3D Grid" ), wxEmptyString, true );
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_10_MM, _( "3D Grid 10 mm" ), wxEmptyString, true );
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_5_MM, _( "3D Grid 5 mm" ), wxEmptyString, true );
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_2P5_MM, _( "3D Grid 2.5 mm" ), wxEmptyString, true );
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_1_MM, _( "3D Grid 1 mm" ), wxEmptyString, true );
|
||||
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_10_MM, _( "3D Grid 10 mm" ), wxEmptyString, true );
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_5_MM, _( "3D Grid 5 mm" ), wxEmptyString, true );
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_2P5_MM, _( "3D Grid 2.5 mm" ), wxEmptyString, true );
|
||||
gridlistMenu->Append( ID_MENU3D_GRID_1_MM, _( "3D Grid 1 mm" ), wxEmptyString, true );
|
||||
// If the grid is on, check the corresponding menuitem showing the grid size
|
||||
if( g_Parm_3D_Visu.GetFlag( FL_GRID ) )
|
||||
{
|
||||
gridlistMenu->Check( ID_MENU3D_GRID_10_MM, g_Parm_3D_Visu.m_3D_Grid == 10.0 );
|
||||
gridlistMenu->Check( ID_MENU3D_GRID_5_MM, g_Parm_3D_Visu.m_3D_Grid == 5.0 );
|
||||
gridlistMenu->Check( ID_MENU3D_GRID_2P5_MM, g_Parm_3D_Visu.m_3D_Grid == 2.5 );
|
||||
gridlistMenu->Check( ID_MENU3D_GRID_1_MM, g_Parm_3D_Visu.m_3D_Grid == 1.0 );
|
||||
}
|
||||
else
|
||||
gridlistMenu->Check( ID_MENU3D_GRID_NOGRID, true );
|
||||
|
||||
prefsMenu->AppendSeparator();
|
||||
|
||||
@@ -222,40 +239,43 @@ void EDA_3D_FRAME::SetMenuBarOptionsState()
|
||||
wxMenuItem* item;
|
||||
// Set the state of toggle menus according to the current display options
|
||||
item = menuBar->FindItem( ID_MENU3D_REALISTIC_MODE );
|
||||
item->Check(g_Parm_3D_Visu.GetFlag( FL_USE_REALISTIC_MODE ) );
|
||||
item->Check( g_Parm_3D_Visu.IsRealisticMode() );
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_MAX_QUALITY_FOR_REALISTIC_MODE );
|
||||
item->Check( g_Parm_3D_Visu.HightQualityMode() );
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_SHOW_BOARD_BODY );
|
||||
item->Check(g_Parm_3D_Visu.GetFlag( FL_SHOW_BOARD_BODY ) );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_SHOW_BOARD_BODY ) );
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_USE_COPPER_THICKNESS );
|
||||
item->Check(g_Parm_3D_Visu.GetFlag( FL_USE_COPPER_THICKNESS ) );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_USE_COPPER_THICKNESS ) );
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_MODULE_ONOFF );
|
||||
item->Check(g_Parm_3D_Visu.GetFlag( FL_MODULE ) );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_MODULE ) );
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_ZONE_ONOFF );
|
||||
item->Check(g_Parm_3D_Visu.GetFlag( FL_ZONE ) );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_ZONE ) );
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_AXIS_ONOFF );
|
||||
item->Check(g_Parm_3D_Visu.GetFlag( FL_AXIS ) );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_AXIS ) );
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_ADHESIVE_ONOFF );
|
||||
item->Check(g_Parm_3D_Visu.GetFlag( FL_ADHESIVE ) );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_ADHESIVE ) );
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_SILKSCREEN_ONOFF );
|
||||
item->Check(g_Parm_3D_Visu.GetFlag( FL_SILKSCREEN ) );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_SILKSCREEN ) );
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_SOLDER_MASK_ONOFF );
|
||||
item->Check(g_Parm_3D_Visu.GetFlag( FL_SOLDERMASK ) );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_SOLDERMASK ) );
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_SOLDER_PASTE_ONOFF );
|
||||
item->Check(g_Parm_3D_Visu.GetFlag( FL_SOLDERPASTE ) );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_SOLDERPASTE ) );
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_COMMENTS_ONOFF );
|
||||
item->Check(g_Parm_3D_Visu.GetFlag( FL_COMMENTS ) );
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_COMMENTS ) );
|
||||
|
||||
item = menuBar->FindItem( ID_MENU3D_ECO_ONOFF );
|
||||
item->Check(g_Parm_3D_Visu.GetFlag( FL_ECO ));
|
||||
item->Check( g_Parm_3D_Visu.GetFlag( FL_ECO ));
|
||||
}
|
||||
|
||||
void EDA_3D_FRAME::SetToolbars()
|
||||
|
||||
+19
-20
@@ -30,50 +30,46 @@
|
||||
#ifndef __3D_VIEWER_H__
|
||||
#define __3D_VIEWER_H__
|
||||
|
||||
#include <wxstruct.h> // for EDA_BASE_FRAME.
|
||||
#include <draw_frame.h>
|
||||
|
||||
#if !wxUSE_GLCANVAS
|
||||
#error Please build wxWidgets with Opengl support (./configure --with-opengl)
|
||||
#endif
|
||||
|
||||
#include <wx/glcanvas.h>
|
||||
|
||||
#ifdef __WXMAC__
|
||||
# ifdef __DARWIN__
|
||||
# include <OpenGL/glu.h>
|
||||
# else
|
||||
# include <glu.h>
|
||||
# endif
|
||||
#else
|
||||
# include <GL/glu.h>
|
||||
#endif
|
||||
|
||||
#include <3d_struct.h>
|
||||
|
||||
#define KISYS3DMOD "KISYS3DMOD"
|
||||
|
||||
class EDA_3D_CANVAS;
|
||||
class PCB_BASE_FRAME;
|
||||
|
||||
#define KICAD_DEFAULT_3D_DRAWFRAME_STYLE wxDEFAULT_FRAME_STYLE | wxWANTS_CHARS
|
||||
#define LIB3D_PATH wxT( "packages3d" )
|
||||
#define KICAD_DEFAULT_3D_DRAWFRAME_STYLE (wxDEFAULT_FRAME_STYLE | wxWANTS_CHARS)
|
||||
#define LIB3D_PATH wxT( "packages3d" )
|
||||
|
||||
class EDA_3D_FRAME : public EDA_BASE_FRAME
|
||||
|
||||
class EDA_3D_FRAME : public KIWAY_PLAYER
|
||||
{
|
||||
private:
|
||||
EDA_3D_CANVAS* m_canvas;
|
||||
bool m_reloadRequest;
|
||||
wxString m_defaultFileName; /// Filename to propose for screenshot
|
||||
|
||||
/// Tracks whether to use Orthographic or Perspective projection
|
||||
bool m_ortho;
|
||||
|
||||
public:
|
||||
EDA_3D_FRAME( PCB_BASE_FRAME* parent, const wxString& title,
|
||||
EDA_3D_FRAME( KIWAY* aKiway, PCB_BASE_FRAME* aParent, const wxString& aTitle,
|
||||
long style = KICAD_DEFAULT_3D_DRAWFRAME_STYLE );
|
||||
|
||||
~EDA_3D_FRAME()
|
||||
{
|
||||
m_auimgr.UnInit();
|
||||
};
|
||||
|
||||
PCB_BASE_FRAME* Parent() { return (PCB_BASE_FRAME*)GetParent(); }
|
||||
PCB_BASE_FRAME* Parent() const { return (PCB_BASE_FRAME*)GetParent(); }
|
||||
|
||||
BOARD* GetBoard();
|
||||
|
||||
/**
|
||||
* Function ReloadRequest
|
||||
@@ -90,8 +86,10 @@ public:
|
||||
* Function NewDisplay
|
||||
* Rebuild the display list.
|
||||
* must be called when 3D opengl data is modified
|
||||
* @param aGlList = the list to rebuild.
|
||||
* if 0 (default) all lists are rebuilt
|
||||
*/
|
||||
void NewDisplay();
|
||||
void NewDisplay( int aGlList = 0 );
|
||||
|
||||
void SetDefaultFileName(const wxString &aFn) { m_defaultFileName = aFn; }
|
||||
const wxString &GetDefaultFileName() const { return m_defaultFileName; }
|
||||
@@ -118,8 +116,9 @@ private:
|
||||
// to the current display options
|
||||
void ReCreateMainToolbar();
|
||||
void SetToolbars();
|
||||
void GetSettings();
|
||||
void SaveSettings();
|
||||
|
||||
void LoadSettings( wxConfigBase* aCfg ); // overload virtual
|
||||
void SaveSettings( wxConfigBase* aCfg ); // overload virtual
|
||||
|
||||
// Other functions
|
||||
void OnLeftClick( wxDC* DC, const wxPoint& MousePos );
|
||||
|
||||
@@ -41,6 +41,7 @@ enum id_3dview_frm
|
||||
ID_MENU3D_ECO_ONOFF,
|
||||
ID_MENU3D_SHOW_BOARD_BODY,
|
||||
ID_MENU3D_REALISTIC_MODE,
|
||||
ID_MENU3D_MAX_QUALITY_FOR_REALISTIC_MODE,
|
||||
ID_END_COMMAND_3D,
|
||||
|
||||
ID_TOOL_SET_VISIBLE_ITEMS,
|
||||
|
||||
@@ -2,8 +2,10 @@ add_definitions(-DPCBNEW)
|
||||
|
||||
include_directories(BEFORE ${INC_BEFORE})
|
||||
include_directories(
|
||||
textures
|
||||
../pcbnew
|
||||
../polygon
|
||||
${GLEW_INCLUDE_DIR}
|
||||
${INC_AFTER}
|
||||
)
|
||||
|
||||
@@ -15,13 +17,19 @@ set(3D-VIEWER_SRCS
|
||||
3d_class.cpp
|
||||
3d_draw.cpp
|
||||
3d_draw_basic_functions.cpp
|
||||
3d_draw_helper_functions.cpp
|
||||
3d_frame.cpp
|
||||
3d_material.cpp
|
||||
3d_mesh_model.cpp
|
||||
3d_read_mesh.cpp
|
||||
3d_toolbar.cpp
|
||||
info3d_visu.cpp
|
||||
trackball.cpp
|
||||
x3dmodelparser.cpp
|
||||
vrmlmodelparser.cpp
|
||||
vrml_aux.cpp
|
||||
vrml_v1_modelparser.cpp
|
||||
vrml_v2_modelparser.cpp
|
||||
x3dmodelparser.cpp
|
||||
)
|
||||
|
||||
add_library(3d-viewer STATIC ${3D-VIEWER_SRCS})
|
||||
|
||||
+46
-41
@@ -62,9 +62,9 @@ INFO3D_VISU::INFO3D_VISU()
|
||||
|
||||
m_CopperLayersCount = 2;
|
||||
m_BoardSettings = NULL;
|
||||
m_CopperThickness = 0;
|
||||
m_EpoxyThickness = 0;
|
||||
m_NonCopperLayerThickness = 0;
|
||||
m_copperThickness = 0;
|
||||
m_epoxyThickness = 0;
|
||||
m_nonCopperLayerThickness = 0;
|
||||
|
||||
// default all special item layers Visible
|
||||
for( ii = 0; ii < FL_LAST; ii++ )
|
||||
@@ -72,6 +72,7 @@ INFO3D_VISU::INFO3D_VISU()
|
||||
|
||||
SetFlag( FL_GRID, false );
|
||||
SetFlag( FL_USE_COPPER_THICKNESS, false );
|
||||
SetFlag( FL_USE_MAXQUALITY_IN_REALISTIC_MODE, false );
|
||||
}
|
||||
|
||||
|
||||
@@ -84,14 +85,15 @@ INFO3D_VISU::~INFO3D_VISU()
|
||||
*/
|
||||
void INFO3D_VISU::InitSettings( BOARD* aBoard )
|
||||
{
|
||||
EDA_RECT bbbox = aBoard->ComputeBoundingBox( false );
|
||||
EDA_RECT bbbox = aBoard->ComputeBoundingBox( true );
|
||||
|
||||
if( bbbox.GetWidth() == 0 && bbbox.GetHeight() == 0 )
|
||||
{
|
||||
bbbox.SetWidth( 100 * IU_PER_MM );
|
||||
bbbox.SetHeight( 100 * IU_PER_MM );
|
||||
bbbox.SetWidth( Millimeter2iu( 100 ) );
|
||||
bbbox.SetHeight( Millimeter2iu( 100 ) );
|
||||
}
|
||||
|
||||
|
||||
m_BoardSettings = &aBoard->GetDesignSettings();
|
||||
|
||||
m_BoardSize = bbbox.GetSize();
|
||||
@@ -107,96 +109,99 @@ void INFO3D_VISU::InitSettings( BOARD* aBoard )
|
||||
|
||||
m_BiuTo3Dunits = 2.0 / std::max( m_BoardSize.x, m_BoardSize.y );
|
||||
|
||||
m_EpoxyThickness = aBoard->GetDesignSettings().GetBoardThickness() * m_BiuTo3Dunits;
|
||||
m_epoxyThickness = aBoard->GetDesignSettings().GetBoardThickness() * m_BiuTo3Dunits;
|
||||
|
||||
// TODO use value defined by user (currently use default values by ctor
|
||||
m_CopperThickness = COPPER_THICKNESS * m_BiuTo3Dunits;
|
||||
m_NonCopperLayerThickness = TECH_LAYER_THICKNESS * m_BiuTo3Dunits;
|
||||
m_copperThickness = COPPER_THICKNESS * m_BiuTo3Dunits;
|
||||
m_nonCopperLayerThickness = TECH_LAYER_THICKNESS * m_BiuTo3Dunits;
|
||||
|
||||
// Init Z position of each layer
|
||||
// calculate z position for each copper layer
|
||||
// Z = 0 is the z position of the back (bottom) layer (layer id = 31)
|
||||
// Z = m_epoxyThickness is the z position of the front (top) layer (layer id = 0)
|
||||
// all unused copper layer z position are set to 0
|
||||
int layer;
|
||||
int copper_layers_cnt = m_CopperLayersCount;
|
||||
|
||||
for( layer = 0; layer < copper_layers_cnt; layer++ )
|
||||
{
|
||||
m_LayerZcoord[layer] =
|
||||
m_EpoxyThickness * layer / (copper_layers_cnt - 1);
|
||||
m_layerZcoord[layer] =
|
||||
m_epoxyThickness - (m_epoxyThickness * layer / (copper_layers_cnt - 1));
|
||||
}
|
||||
|
||||
#define layerThicknessMargin 1.1
|
||||
double zpos_offset = m_NonCopperLayerThickness * layerThicknessMargin;
|
||||
double zpos_copper_back = m_LayerZcoord[0] - layerThicknessMargin*m_CopperThickness/2;
|
||||
double zpos_copper_front = m_EpoxyThickness + layerThicknessMargin*m_CopperThickness/2;
|
||||
double zpos_offset = m_nonCopperLayerThickness * layerThicknessMargin;
|
||||
double zpos_copper_back = - layerThicknessMargin*m_copperThickness/2;
|
||||
double zpos_copper_front = m_epoxyThickness + layerThicknessMargin*m_copperThickness/2;
|
||||
|
||||
// Fill remaining unused copper layers and front layer zpos
|
||||
// with m_EpoxyThickness
|
||||
for( ; layer <= LAST_COPPER_LAYER; layer++ )
|
||||
// Fill remaining unused copper layers and back layer zpos
|
||||
// with 0
|
||||
for( ; layer < MAX_CU_LAYERS; layer++ )
|
||||
{
|
||||
m_LayerZcoord[layer] = m_EpoxyThickness;
|
||||
m_layerZcoord[layer] = 0;
|
||||
}
|
||||
|
||||
// calculate z position for each non copper layer
|
||||
for( int layer_id = FIRST_NON_COPPER_LAYER; layer_id < NB_PCB_LAYERS; layer_id++ )
|
||||
// Solder mask and Solder paste have the same Z position
|
||||
for( int layer_id = MAX_CU_LAYERS; layer_id < LAYER_ID_COUNT; layer_id++ )
|
||||
{
|
||||
double zpos;
|
||||
|
||||
switch( layer_id )
|
||||
{
|
||||
case ADHESIVE_N_BACK:
|
||||
zpos = zpos_copper_back - 4 * zpos_offset;
|
||||
break;
|
||||
|
||||
case ADHESIVE_N_FRONT:
|
||||
zpos = zpos_copper_front + 4 * zpos_offset;
|
||||
break;
|
||||
|
||||
case SOLDERPASTE_N_BACK:
|
||||
case B_Adhes:
|
||||
zpos = zpos_copper_back - 3 * zpos_offset;
|
||||
break;
|
||||
|
||||
case SOLDERPASTE_N_FRONT:
|
||||
case F_Adhes:
|
||||
zpos = zpos_copper_front + 3 * zpos_offset;
|
||||
break;
|
||||
|
||||
case SOLDERMASK_N_BACK:
|
||||
case B_Paste:
|
||||
zpos = zpos_copper_back - 1 * zpos_offset;
|
||||
break;
|
||||
|
||||
case SOLDERMASK_N_FRONT:
|
||||
case F_Paste:
|
||||
zpos = zpos_copper_front + 1 * zpos_offset;
|
||||
break;
|
||||
|
||||
case SILKSCREEN_N_BACK:
|
||||
case B_Mask:
|
||||
zpos = zpos_copper_back - 1 * zpos_offset;
|
||||
break;
|
||||
|
||||
case F_Mask:
|
||||
zpos = zpos_copper_front + 1 * zpos_offset;
|
||||
break;
|
||||
|
||||
case B_SilkS:
|
||||
zpos = zpos_copper_back - 2 * zpos_offset;
|
||||
break;
|
||||
|
||||
case SILKSCREEN_N_FRONT:
|
||||
case F_SilkS:
|
||||
zpos = zpos_copper_front + 2 * zpos_offset;
|
||||
break;
|
||||
|
||||
default:
|
||||
zpos = zpos_copper_front +
|
||||
(layer_id - FIRST_NON_COPPER_LAYER + 5) * zpos_offset;
|
||||
zpos = zpos_copper_front + (layer_id - MAX_CU_LAYERS + 4) * zpos_offset;
|
||||
break;
|
||||
}
|
||||
|
||||
m_LayerZcoord[layer_id] = zpos;
|
||||
m_layerZcoord[layer_id] = zpos;
|
||||
}
|
||||
}
|
||||
|
||||
/* return the Z position of 3D shapes, in 3D Units
|
||||
* aIsFlipped: true for modules on Front (top) layer, false
|
||||
* if on back (bottom) layer
|
||||
* Note: in draw functions, the copper has a thickness = m_CopperThickness
|
||||
* Vias and tracks are draw with the top side position = m_CopperThickness/2
|
||||
* and the bottom side position = -m_CopperThickness/2 from the Z layer position
|
||||
* Note: in draw functions, the copper has a thickness = m_copperThickness
|
||||
* Vias and tracks are draw with the top side position = m_copperThickness/2
|
||||
* and the bottom side position = -m_copperThickness/2 from the Z layer position
|
||||
*/
|
||||
double INFO3D_VISU::GetModulesZcoord3DIU( bool aIsFlipped )
|
||||
{
|
||||
if( aIsFlipped )
|
||||
return m_LayerZcoord[LAYER_N_BACK] - ( m_CopperThickness / 2 );
|
||||
return m_layerZcoord[B_Paste] - ( m_copperThickness / 2 ); //B_Cu NOTE: in order to display modules in top of Paste and near the shadow
|
||||
else
|
||||
return m_LayerZcoord[LAYER_N_FRONT] + ( m_CopperThickness / 2 );
|
||||
return m_layerZcoord[F_Paste] + ( m_copperThickness / 2 ); //F_Cu
|
||||
}
|
||||
|
||||
|
||||
+25
-19
@@ -71,10 +71,10 @@ enum DISPLAY3D_FLG {
|
||||
FL_USE_COPPER_THICKNESS,
|
||||
FL_SHOW_BOARD_BODY,
|
||||
FL_USE_REALISTIC_MODE,
|
||||
FL_USE_MAXQUALITY_IN_REALISTIC_MODE,
|
||||
FL_LAST
|
||||
};
|
||||
|
||||
|
||||
class INFO3D_VISU
|
||||
{
|
||||
public:
|
||||
@@ -95,11 +95,14 @@ public:
|
||||
// to scale 3D units between -1.0 and +1.0
|
||||
double m_CurrentZpos; // temporary storage of current value of Z position,
|
||||
// used in some calculation
|
||||
|
||||
double zpos_offset;
|
||||
|
||||
private:
|
||||
double m_LayerZcoord[NB_LAYERS]; // Z position of each layer (normalized)
|
||||
double m_CopperThickness; // Copper thickness (normalized)
|
||||
double m_EpoxyThickness; // Epoxy thickness (normalized)
|
||||
double m_NonCopperLayerThickness; // Non copper layers thickness
|
||||
double m_layerZcoord[LAYER_ID_COUNT]; // Z position of each layer (normalized)
|
||||
double m_copperThickness; // Copper thickness (normalized)
|
||||
double m_epoxyThickness; // Epoxy thickness (normalized)
|
||||
double m_nonCopperLayerThickness; // Non copper layers thickness
|
||||
bool m_drawFlags[FL_LAST]; // Enable/disable flags (see DISPLAY3D_FLG list)
|
||||
|
||||
public: INFO3D_VISU();
|
||||
@@ -134,7 +137,7 @@ public: INFO3D_VISU();
|
||||
*/
|
||||
int GetLayerZcoordBIU( int aLayerId )
|
||||
{
|
||||
return KiROUND( m_LayerZcoord[aLayerId] / m_BiuTo3Dunits );
|
||||
return KiROUND( m_layerZcoord[aLayerId] / m_BiuTo3Dunits );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -148,10 +151,10 @@ public: INFO3D_VISU();
|
||||
*/
|
||||
int GetCopperThicknessBIU() const
|
||||
{
|
||||
bool use_copper_thickness = GetFlag( FL_USE_COPPER_THICKNESS ) ||
|
||||
GetFlag( FL_USE_REALISTIC_MODE );
|
||||
return use_copper_thickness ?
|
||||
KiROUND( m_CopperThickness / m_BiuTo3Dunits )
|
||||
bool use_thickness = GetFlag( FL_USE_COPPER_THICKNESS );
|
||||
|
||||
return use_thickness ?
|
||||
KiROUND( m_copperThickness / m_BiuTo3Dunits )
|
||||
: 0;
|
||||
}
|
||||
|
||||
@@ -161,7 +164,7 @@ public: INFO3D_VISU();
|
||||
*/
|
||||
int GetEpoxyThicknessBIU() const
|
||||
{
|
||||
return KiROUND( m_EpoxyThickness / m_BiuTo3Dunits );
|
||||
return KiROUND( m_epoxyThickness / m_BiuTo3Dunits );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -173,10 +176,11 @@ public: INFO3D_VISU();
|
||||
*/
|
||||
int GetNonCopperLayerThicknessBIU() const
|
||||
{
|
||||
bool use_copper_thickness = GetFlag( FL_USE_COPPER_THICKNESS ) ||
|
||||
GetFlag( FL_USE_REALISTIC_MODE );
|
||||
return use_copper_thickness ?
|
||||
KiROUND( m_NonCopperLayerThickness / m_BiuTo3Dunits )
|
||||
bool use_thickness = GetFlag( FL_USE_COPPER_THICKNESS )
|
||||
// || GetFlag( FL_USE_REALISTIC_MODE )
|
||||
;
|
||||
return use_thickness ?
|
||||
KiROUND( m_nonCopperLayerThickness / m_BiuTo3Dunits )
|
||||
: 0;
|
||||
}
|
||||
|
||||
@@ -187,14 +191,16 @@ public: INFO3D_VISU();
|
||||
*
|
||||
* Note: if m_drawFlags[FL_USE_COPPER_THICKNESS] is not set, returns 0
|
||||
*/
|
||||
int GetLayerObjectThicknessBIU( int aLayerId) const
|
||||
int GetLayerObjectThicknessBIU( int aLayerId ) const
|
||||
{
|
||||
return aLayerId >= FIRST_NON_COPPER_LAYER ?
|
||||
GetNonCopperLayerThicknessBIU() :
|
||||
GetCopperThicknessBIU();
|
||||
return IsCopperLayer( aLayerId ) ?
|
||||
GetCopperThicknessBIU() :
|
||||
GetNonCopperLayerThicknessBIU()
|
||||
;
|
||||
}
|
||||
|
||||
bool IsRealisticMode() { return GetFlag( FL_USE_REALISTIC_MODE ); }
|
||||
bool HightQualityMode() { return GetFlag( FL_USE_MAXQUALITY_IN_REALISTIC_MODE ); }
|
||||
};
|
||||
|
||||
extern INFO3D_VISU g_Parm_3D_Visu;
|
||||
|
||||
+101
-47
@@ -32,13 +32,9 @@
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <wx/string.h>
|
||||
|
||||
#include <3d_mesh_model.h>
|
||||
|
||||
class S3D_MASTER;
|
||||
class S3D_VERTEX;
|
||||
|
||||
extern void Set_Object_Data( std::vector< S3D_VERTEX >& aVertices, double aBiuTo3DUnits );
|
||||
|
||||
class S3D_MODEL_PARSER;
|
||||
class X3D_MODEL_PARSER;
|
||||
|
||||
@@ -118,13 +114,17 @@ public:
|
||||
static void GetNodeProperties( wxXmlNode* aNode, PROPERTY_MAP& aProps );
|
||||
|
||||
/**
|
||||
* Return string representing x3d file in vrml format
|
||||
* Return string representing x3d file in vrml2 format
|
||||
* Function Load must be called before this function, otherwise empty
|
||||
* data set is returned.
|
||||
*/
|
||||
wxString VRML_representation();
|
||||
wxString VRML2_representation();
|
||||
|
||||
private:
|
||||
wxString m_Filename;
|
||||
S3D_MESH *m_model;
|
||||
std::vector<S3D_MESH *> childs;
|
||||
|
||||
std::vector< wxString > vrml_materials;
|
||||
std::vector< wxString > vrml_points;
|
||||
std::vector< wxString > vrml_coord_indexes;
|
||||
@@ -137,8 +137,98 @@ private:
|
||||
void rotate( S3D_VERTEX& aCoordinate, S3D_VERTEX& aRotAxis, double angle );
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* class WRL_MODEL_PARSER
|
||||
* class VRML2_MODEL_PARSER
|
||||
* Parses
|
||||
*/
|
||||
class VRML2_MODEL_PARSER: public S3D_MODEL_PARSER
|
||||
{
|
||||
public:
|
||||
VRML2_MODEL_PARSER( S3D_MASTER* aMaster );
|
||||
~VRML2_MODEL_PARSER();
|
||||
void Load( const wxString aFilename );
|
||||
|
||||
/**
|
||||
* Return string representing VRML2 file in vrml2 format
|
||||
* Function Load must be called before this function, otherwise empty
|
||||
* data set is returned.
|
||||
*/
|
||||
wxString VRML2_representation();
|
||||
|
||||
private:
|
||||
int read_Transform();
|
||||
int read_DEF();
|
||||
int read_Shape();
|
||||
int read_Appearance();
|
||||
int read_material();
|
||||
int read_Material();
|
||||
int read_IndexedFaceSet();
|
||||
int read_Coordinate();
|
||||
int read_Normal();
|
||||
int read_NormalIndex();
|
||||
int read_Color();
|
||||
int read_coordIndex();
|
||||
int read_colorIndex();
|
||||
|
||||
bool m_normalPerVertex;
|
||||
bool colorPerVertex;
|
||||
S3D_MESH *m_model;
|
||||
std::vector<S3D_MESH *> childs;
|
||||
FILE *m_file;
|
||||
S3D_MATERIAL *m_Materials;
|
||||
wxString m_Filename;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* class VRML1_MODEL_PARSER
|
||||
* Parses
|
||||
*/
|
||||
class VRML1_MODEL_PARSER: public S3D_MODEL_PARSER
|
||||
{
|
||||
public:
|
||||
VRML1_MODEL_PARSER( S3D_MASTER* aMaster );
|
||||
~VRML1_MODEL_PARSER();
|
||||
void Load( const wxString aFilename );
|
||||
|
||||
/**
|
||||
* Return string representing VRML2 file in vrml2 format
|
||||
* Function Load must be called before this function, otherwise empty
|
||||
* data set is returned.
|
||||
*/
|
||||
wxString VRML2_representation();
|
||||
|
||||
private:
|
||||
int read_separator();
|
||||
int readMaterial();
|
||||
int readCoordinate3();
|
||||
int readIndexedFaceSet();
|
||||
|
||||
int readMaterial_ambientColor();
|
||||
int readMaterial_diffuseColor();
|
||||
int readMaterial_emissiveColor();
|
||||
int readMaterial_specularColor();
|
||||
int readMaterial_shininess();
|
||||
int readMaterial_transparency();
|
||||
|
||||
int readCoordinate3_point();
|
||||
|
||||
int readIndexedFaceSet_coordIndex();
|
||||
int readIndexedFaceSet_materialIndex();
|
||||
|
||||
bool m_normalPerVertex;
|
||||
bool colorPerVertex;
|
||||
S3D_MESH *m_model;
|
||||
std::vector<S3D_MESH *> childs;
|
||||
S3D_MATERIAL *m_Materials;
|
||||
FILE *m_file;
|
||||
wxString m_Filename;
|
||||
};
|
||||
|
||||
/**
|
||||
* class VRML_MODEL_PARSER
|
||||
* Parses
|
||||
*/
|
||||
class VRML_MODEL_PARSER: public S3D_MODEL_PARSER
|
||||
@@ -149,45 +239,9 @@ public:
|
||||
void Load( const wxString aFilename );
|
||||
|
||||
private:
|
||||
/**
|
||||
* Function ReadMaterial
|
||||
* read the description of a 3D material definition in the form:
|
||||
* DEF yellow material Material (
|
||||
* DiffuseColor 1.00000 1.00000 0.00000e 0
|
||||
* EmissiveColor 0.00000e 0 0.00000e 0 0.00000e 0
|
||||
* SpecularColor 1.00000 1.00000 1.00000
|
||||
* AmbientIntensity 1.00000
|
||||
* Transparency 0.00000e 0
|
||||
* Shininess 1.00000
|
||||
*)
|
||||
* Or type:
|
||||
* USE yellow material
|
||||
*/
|
||||
int readMaterial( FILE* file, int* LineNum );
|
||||
int readChildren( FILE* file, int* LineNum );
|
||||
int readShape( FILE* file, int* LineNum );
|
||||
int readAppearance( FILE* file, int* LineNum );
|
||||
int readGeometry( FILE* file, int* LineNum );
|
||||
|
||||
/**
|
||||
* Function ReadCoordList
|
||||
* reads 3D coordinate lists like:
|
||||
* coord Coordinate { point [
|
||||
* -5.24489 6.57640e-3 -9.42129e-2,
|
||||
* -5.11821 6.57421e-3 0.542654,
|
||||
* -3.45868 0.256565 1.32000 ] }
|
||||
* or:
|
||||
* normal Normal { vector [
|
||||
* 0.995171 -6.08102e-6 9.81541e-2,
|
||||
* 0.923880 -4.09802e-6 0.382683,
|
||||
* 0.707107 -9.38186e-7 0.707107]
|
||||
* }
|
||||
*
|
||||
* text_buffer contains the first line of this node :
|
||||
* "coord Coordinate { point ["
|
||||
*/
|
||||
void readCoordsList( FILE* file, char* text_buffer, std::vector< double >& aList,
|
||||
int* LineNum );
|
||||
VRML1_MODEL_PARSER *vrml1_parser;
|
||||
VRML2_MODEL_PARSER *vrml2_parser;
|
||||
};
|
||||
|
||||
|
||||
#endif // MODELPARSERS_H
|
||||
|
||||
@@ -0,0 +1,922 @@
|
||||
/* GIMP RGBA C-Source image dump (text_pcb.c) */
|
||||
|
||||
static const struct {
|
||||
unsigned int width;
|
||||
unsigned int height;
|
||||
unsigned int bytes_per_pixel; /* 2:RGB16, 3:RGB, 4:RGBA */
|
||||
unsigned char pixel_data[64 * 64 * 4 + 1];
|
||||
} text_pcb = {
|
||||
64, 64, 4,
|
||||
"\357\357\357\377\357\357\357\377\355\355\355\377\362\362\362\377\362\362"
|
||||
"\362\377\366\366\366\377\366\366\366\377\370\370\370\377\370\370\370\377"
|
||||
"\363\363\363\377\363\363\363\377\357\357\357\377\360\360\360\377\354\354"
|
||||
"\354\377\354\354\354\377\351\351\351\377\351\351\351\377\357\357\357\377"
|
||||
"\357\357\357\377\363\363\363\377\357\357\357\377\366\366\366\377\366\366"
|
||||
"\366\377\366\366\366\377\366\366\366\377\362\362\362\377\363\363\363\377"
|
||||
"\355\355\355\377\346\346\346\377\340\340\340\377\335\335\335\377\331\331"
|
||||
"\331\377\331\331\331\377\335\335\335\377\335\335\335\377\343\343\343\377"
|
||||
"\351\351\351\377\355\355\355\377\355\355\355\377\362\362\362\377\362\362"
|
||||
"\362\377\363\363\363\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\360\360\360\377\360\360\360\377\354\354\354\377\351\351\351\377\343\343"
|
||||
"\343\377\343\343\343\377\343\343\343\377\343\343\343\377\352\352\352\377"
|
||||
"\352\352\352\377\357\357\357\377\355\355\355\377\360\360\360\377\360\360"
|
||||
"\360\377\355\355\355\377\355\355\355\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\355\355\355\377\357\357\357\377\355\355\355\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\357\357\357\377\357\357"
|
||||
"\357\377\354\354\354\377\346\346\346\377\346\346\346\377\351\351\351\377"
|
||||
"\357\357\357\377\360\360\360\377\363\363\363\377\360\360\360\377\366\366"
|
||||
"\366\377\366\366\366\377\366\366\366\377\366\366\366\377\363\363\363\377"
|
||||
"\363\363\363\377\355\355\355\377\346\346\346\377\343\343\343\377\335\335"
|
||||
"\335\377\331\331\331\377\331\331\331\377\335\335\335\377\340\340\340\377"
|
||||
"\343\343\343\377\351\351\351\377\355\355\355\377\357\357\357\377\362\362"
|
||||
"\362\377\362\362\362\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\360\360\360\377\360\360\360\377\354\354\354\377\351\351"
|
||||
"\351\377\343\343\343\377\343\343\343\377\344\344\344\377\344\344\344\377"
|
||||
"\352\352\352\377\352\352\352\377\357\357\357\377\357\357\357\377\357\357"
|
||||
"\357\377\357\357\357\377\360\360\360\377\355\355\355\377\357\357\357\377"
|
||||
"\357\357\357\377\354\354\354\377\357\357\357\377\357\357\357\377\357\357"
|
||||
"\357\377\357\357\357\377\362\362\362\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\360\360\360\377\357\357"
|
||||
"\357\377\357\357\357\377\351\351\351\377\351\351\351\377\351\351\351\377"
|
||||
"\351\351\351\377\355\355\355\377\355\355\355\377\363\363\363\377\363\363"
|
||||
"\363\377\366\366\366\377\366\366\366\377\366\366\366\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\355\355\355\377\343\343\343\377\340\340"
|
||||
"\340\377\335\335\335\377\331\331\331\377\331\331\331\377\335\335\335\377"
|
||||
"\340\340\340\377\346\346\346\377\351\351\351\377\355\355\355\377\357\357"
|
||||
"\357\377\362\362\362\377\362\362\362\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\360\360\360\377\360\360\360\377\354\354"
|
||||
"\354\377\354\354\354\377\351\351\351\377\343\343\343\377\344\344\344\377"
|
||||
"\344\344\344\377\352\352\352\377\352\352\352\377\357\357\357\377\357\357"
|
||||
"\357\377\357\357\357\377\357\357\357\377\360\360\360\377\360\360\360\377"
|
||||
"\360\360\360\377\357\357\357\377\354\354\354\377\352\352\352\377\352\352"
|
||||
"\352\377\352\352\352\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377\360\360"
|
||||
"\360\377\354\354\354\377\355\355\355\377\354\354\354\377\351\351\351\377"
|
||||
"\351\351\351\377\351\351\351\377\355\355\355\377\355\355\355\377\363\363"
|
||||
"\363\377\363\363\363\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\366\366\366\377\363\363\363\377\363\363\363\377\355\355\355\377\346\346"
|
||||
"\346\377\340\340\340\377\335\335\335\377\331\331\331\377\331\331\331\377"
|
||||
"\335\335\335\377\340\340\340\377\346\346\346\377\351\351\351\377\355\355"
|
||||
"\355\377\360\360\360\377\362\362\362\377\362\362\362\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\360\360\360\377\360\360"
|
||||
"\360\377\354\354\354\377\355\355\355\377\351\351\351\377\343\343\343\377"
|
||||
"\344\344\344\377\344\344\344\377\352\352\352\377\352\352\352\377\357\357"
|
||||
"\357\377\355\355\355\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\352\352\352\377\351\351\351\377\354\354\354\377\354\354"
|
||||
"\354\377\354\354\354\377\354\354\354\377\360\360\360\377\360\360\360\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377\363\363"
|
||||
"\363\377\363\363\363\377\355\355\355\377\355\355\355\377\351\351\351\377"
|
||||
"\351\351\351\377\351\351\351\377\351\351\351\377\357\357\357\377\357\357"
|
||||
"\357\377\363\363\363\377\363\363\363\377\362\362\362\377\362\362\362\377"
|
||||
"\363\363\363\377\366\366\366\377\363\363\363\377\355\355\355\377\351\351"
|
||||
"\351\377\346\346\346\377\340\340\340\377\335\335\335\377\332\332\332\377"
|
||||
"\332\332\332\377\335\335\335\377\335\335\335\377\343\343\343\377\352\352"
|
||||
"\352\377\355\355\355\377\360\360\360\377\365\365\365\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\363\363\363\377\362\362"
|
||||
"\362\377\362\362\362\377\355\355\355\377\357\357\357\377\352\352\352\377"
|
||||
"\344\344\344\377\344\344\344\377\344\344\344\377\352\352\352\377\352\352"
|
||||
"\352\377\357\357\357\377\355\355\355\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\357\357\357\377\355\355\355\377\351\351\351\377\354\354"
|
||||
"\354\377\354\354\354\377\357\357\357\377\357\357\357\377\354\354\354\377"
|
||||
"\354\354\354\377\357\357\357\377\357\357\357\377\357\357\357\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\355\355\355\377\355\355\355\377"
|
||||
"\351\351\351\377\343\343\343\377\343\343\343\377\352\352\352\377\357\357"
|
||||
"\357\377\357\357\357\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\363\363\363\377\365\365\365\377\363\363\363\377\355\355"
|
||||
"\355\377\352\352\352\377\346\346\346\377\342\342\342\377\337\337\337\377"
|
||||
"\332\332\332\377\327\327\327\377\335\335\335\377\337\337\337\377\343\343"
|
||||
"\343\377\352\352\352\377\355\355\355\377\360\360\360\377\365\365\365\377"
|
||||
"\363\363\363\377\362\362\362\377\362\362\362\377\363\363\363\377\363\363"
|
||||
"\363\377\362\362\362\377\362\362\362\377\355\355\355\377\357\357\357\377"
|
||||
"\352\352\352\377\344\344\344\377\344\344\344\377\344\344\344\377\352\352"
|
||||
"\352\377\352\352\352\377\357\357\357\377\357\357\357\377\355\355\355\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\357\357\357\377\357\357"
|
||||
"\357\377\362\362\362\377\354\354\354\377\357\357\357\377\357\357\357\377"
|
||||
"\354\354\354\377\354\354\354\377\357\357\357\377\357\357\357\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\362\362\362\377\355\355\355\377"
|
||||
"\352\352\352\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344"
|
||||
"\344\377\352\352\352\377\355\355\355\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\363\363\363\377\365\365\365\377\365\365\365\377\360\360"
|
||||
"\360\377\355\355\355\377\352\352\352\377\347\347\347\377\342\342\342\377"
|
||||
"\335\335\335\377\327\327\327\377\327\327\327\377\335\335\335\377\337\337"
|
||||
"\337\377\344\344\344\377\346\346\346\377\352\352\352\377\360\360\360\377"
|
||||
"\365\365\365\377\365\365\365\377\365\365\365\377\363\363\363\377\365\365"
|
||||
"\365\377\363\363\363\377\362\362\362\377\362\362\362\377\355\355\355\377"
|
||||
"\357\357\357\377\352\352\352\377\344\344\344\377\344\344\344\377\344\344"
|
||||
"\344\377\352\352\352\377\352\352\352\377\357\357\357\377\357\357\357\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377\357\357"
|
||||
"\357\377\357\357\357\377\362\362\362\377\354\354\354\377\354\354\354\377"
|
||||
"\354\354\354\377\357\357\357\377\357\357\357\377\360\360\360\377\360\360"
|
||||
"\360\377\362\362\362\377\362\362\362\377\362\362\362\377\357\357\357\377"
|
||||
"\355\355\355\377\352\352\352\377\344\344\344\377\344\344\344\377\337\337"
|
||||
"\337\377\344\344\344\377\352\352\352\377\355\355\355\377\362\362\362\377"
|
||||
"\362\362\362\377\363\363\363\377\365\365\365\377\365\365\365\377\365\365"
|
||||
"\365\377\360\360\360\377\360\360\360\377\354\354\354\377\347\347\347\377"
|
||||
"\342\342\342\377\335\335\335\377\327\327\327\377\327\327\327\377\335\335"
|
||||
"\335\377\337\337\337\377\344\344\344\377\347\347\347\377\352\352\352\377"
|
||||
"\360\360\360\377\365\365\365\377\365\365\365\377\365\365\365\377\363\363"
|
||||
"\363\377\363\363\363\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\355\355\355\377\355\355\355\377\352\352\352\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\352\352\352\377\352\352\352\377\357\357\357\377"
|
||||
"\357\357\357\377\352\352\352\377\352\352\352\377\355\355\355\377\355\355"
|
||||
"\355\377\357\357\357\377\357\357\357\377\357\357\357\377\354\354\354\377"
|
||||
"\354\354\354\377\354\354\354\377\357\357\357\377\357\357\357\377\360\360"
|
||||
"\360\377\362\362\362\377\362\362\362\377\362\362\362\377\357\357\357\377"
|
||||
"\357\357\357\377\352\352\352\377\352\352\352\377\344\344\344\377\344\344"
|
||||
"\344\377\337\337\337\377\337\337\337\377\344\344\344\377\352\352\352\377"
|
||||
"\357\357\357\377\362\362\362\377\365\365\365\377\365\365\365\377\363\363"
|
||||
"\363\377\363\363\363\377\360\360\360\377\352\352\352\377\347\347\347\377"
|
||||
"\344\344\344\377\337\337\337\377\335\335\335\377\331\331\331\377\331\331"
|
||||
"\331\377\335\335\335\377\337\337\337\377\344\344\344\377\347\347\347\377"
|
||||
"\354\354\354\377\360\360\360\377\363\363\363\377\363\363\363\377\365\365"
|
||||
"\365\377\365\365\365\377\363\363\363\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\355\355\355\377\352\352\352\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\344\344\344\377\352\352\352\377\352\352\352\377"
|
||||
"\357\357\357\377\357\357\357\377\352\352\352\377\352\352\352\377\355\355"
|
||||
"\355\377\355\355\355\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377\354\354"
|
||||
"\354\377\354\354\354\377\355\355\355\377\355\355\355\377\355\355\355\377"
|
||||
"\355\355\355\377\355\355\355\377\352\352\352\377\352\352\352\377\344\344"
|
||||
"\344\377\342\342\342\377\337\337\337\377\337\337\337\377\344\344\344\377"
|
||||
"\354\354\354\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\360\360\360\377\352\352\352\377"
|
||||
"\347\347\347\377\344\344\344\377\342\342\342\377\337\337\337\377\331\331"
|
||||
"\331\377\331\331\331\377\337\337\337\377\342\342\342\377\344\344\344\377"
|
||||
"\347\347\347\377\354\354\354\377\360\360\360\377\360\360\360\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\360\360\360\377\355\355\355\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\347\347\347\377\347\347"
|
||||
"\347\377\347\347\347\377\347\347\347\377\347\347\347\377\354\354\354\377"
|
||||
"\354\354\354\377\354\354\354\377\362\362\362\377\357\357\357\377\357\357"
|
||||
"\357\377\357\357\357\377\357\357\357\377\357\357\357\377\355\355\355\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377\355\355"
|
||||
"\355\377\355\355\355\377\355\355\355\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\355\355\355\377\352\352\352\377\352\352\352\377\344\344"
|
||||
"\344\377\342\342\342\377\342\342\342\377\342\342\342\377\342\342\342\377"
|
||||
"\347\347\347\377\354\354\354\377\355\355\355\377\360\360\360\377\363\363"
|
||||
"\363\377\363\363\363\377\360\360\360\377\360\360\360\377\352\352\352\377"
|
||||
"\352\352\352\377\344\344\344\377\344\344\344\377\342\342\342\377\337\337"
|
||||
"\337\377\331\331\331\377\331\331\331\377\337\337\337\377\342\342\342\377"
|
||||
"\347\347\347\377\344\344\344\377\352\352\352\377\352\352\352\377\355\355"
|
||||
"\355\377\360\360\360\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\355\355\355\377\352\352\352\377\347\347\347\377\344\344"
|
||||
"\344\377\347\347\347\377\347\347\347\377\351\351\351\377\351\351\351\377"
|
||||
"\351\351\351\377\354\354\354\377\355\355\355\377\354\354\354\377\357\357"
|
||||
"\357\377\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\357\357\357\377\351\351\351\377\351\351\351\377\351\351"
|
||||
"\351\377\351\351\351\377\351\351\351\377\352\352\352\377\352\352\352\377"
|
||||
"\352\352\352\377\352\352\352\377\352\352\352\377\352\352\352\377\344\344"
|
||||
"\344\377\344\344\344\377\342\342\342\377\342\342\342\377\342\342\342\377"
|
||||
"\343\343\343\377\343\343\343\377\351\351\351\377\351\351\351\377\355\355"
|
||||
"\355\377\355\355\355\377\355\355\355\377\360\360\360\377\355\355\355\377"
|
||||
"\354\354\354\377\352\352\352\377\344\344\344\377\347\347\347\377\342\342"
|
||||
"\342\377\334\334\334\377\331\331\331\377\331\331\331\377\334\334\334\377"
|
||||
"\342\342\342\377\347\347\347\377\344\344\344\377\352\352\352\377\354\354"
|
||||
"\354\377\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\351\351\351\377\351\351"
|
||||
"\351\377\344\344\344\377\343\343\343\377\343\343\343\377\343\343\343\377"
|
||||
"\343\343\343\377\346\346\346\377\351\351\351\377\351\351\351\377\355\355"
|
||||
"\355\377\354\354\354\377\352\352\352\377\352\352\352\377\352\352\352\377"
|
||||
"\352\352\352\377\352\352\352\377\352\352\352\377\351\351\351\377\352\352"
|
||||
"\352\377\352\352\352\377\352\352\352\377\352\352\352\377\352\352\352\377"
|
||||
"\352\352\352\377\352\352\352\377\352\352\352\377\352\352\352\377\347\347"
|
||||
"\347\377\344\344\344\377\344\344\344\377\342\342\342\377\342\342\342\377"
|
||||
"\343\343\343\377\343\343\343\377\343\343\343\377\346\346\346\377\346\346"
|
||||
"\346\377\351\351\351\377\351\351\351\377\352\352\352\377\352\352\352\377"
|
||||
"\354\354\354\377\352\352\352\377\347\347\347\377\344\344\344\377\342\342"
|
||||
"\342\377\334\334\334\377\331\331\331\377\331\331\331\377\331\331\331\377"
|
||||
"\331\331\331\377\334\334\334\377\342\342\342\377\344\344\344\377\347\347"
|
||||
"\347\377\352\352\352\377\354\354\354\377\352\352\352\377\351\351\351\377"
|
||||
"\351\351\351\377\351\351\351\377\351\351\351\377\351\351\351\377\351\351"
|
||||
"\351\377\346\346\346\377\346\346\346\377\343\343\343\377\343\343\343\377"
|
||||
"\343\343\343\377\343\343\343\377\346\346\346\377\346\346\346\377\351\351"
|
||||
"\351\377\351\351\351\377\347\347\347\377\347\347\347\377\344\344\344\377"
|
||||
"\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377"
|
||||
"\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\347\347"
|
||||
"\347\377\344\344\344\377\343\343\343\377\343\343\343\377\340\340\340\377"
|
||||
"\340\340\340\377\335\335\335\377\335\335\335\377\340\340\340\377\340\340"
|
||||
"\340\377\343\343\343\377\343\343\343\377\343\343\343\377\346\346\346\377"
|
||||
"\346\346\346\377\347\347\347\377\347\347\347\377\351\351\351\377\344\344"
|
||||
"\344\377\342\342\342\377\334\334\334\377\331\331\331\377\325\325\325\377"
|
||||
"\325\325\325\377\331\331\331\377\334\334\334\377\342\342\342\377\344\344"
|
||||
"\344\377\351\351\351\377\347\347\347\377\347\347\347\377\346\346\346\377"
|
||||
"\346\346\346\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343"
|
||||
"\343\377\343\343\343\377\343\343\343\377\343\343\343\377\340\340\340\377"
|
||||
"\340\340\340\377\340\340\340\377\340\340\340\377\343\343\343\377\343\343"
|
||||
"\343\377\343\343\343\377\343\343\343\377\343\343\343\377\342\342\342\377"
|
||||
"\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337"
|
||||
"\337\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377"
|
||||
"\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\346\346\346\377\343\343\343\377\343\343\343\377"
|
||||
"\340\340\340\377\335\335\335\377\335\335\335\377\335\335\335\377\340\340"
|
||||
"\340\377\340\340\340\377\340\340\340\377\343\343\343\377\351\351\351\377"
|
||||
"\346\346\346\377\346\346\346\377\352\352\352\377\347\347\347\377\347\347"
|
||||
"\347\377\342\342\342\377\337\337\337\377\331\331\331\377\334\334\334\377"
|
||||
"\326\326\326\377\326\326\326\377\334\334\334\377\331\331\331\377\337\337"
|
||||
"\337\377\342\342\342\377\347\347\347\377\347\347\347\377\352\352\352\377"
|
||||
"\346\346\346\377\346\346\346\377\343\343\343\377\343\343\343\377\343\343"
|
||||
"\343\377\343\343\343\377\346\346\346\377\343\343\343\377\343\343\343\377"
|
||||
"\340\340\340\377\335\335\335\377\335\335\335\377\340\340\340\377\343\343"
|
||||
"\343\377\343\343\343\377\351\351\351\377\343\343\343\377\343\343\343\377"
|
||||
"\343\343\343\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337"
|
||||
"\337\377\337\337\337\377\344\344\344\377\344\344\344\377\344\344\344\377"
|
||||
"\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\344\344\344\377\346\346\346\377\343\343\343\377"
|
||||
"\343\343\343\377\340\340\340\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\340\340\340\377\340\340\340\377\340\340\340\377\346\346\346\377"
|
||||
"\351\351\351\377\346\346\346\377\352\352\352\377\352\352\352\377\347\347"
|
||||
"\347\377\347\347\347\377\342\342\342\377\337\337\337\377\334\334\334\377"
|
||||
"\335\335\335\377\327\327\327\377\327\327\327\377\335\335\335\377\334\334"
|
||||
"\334\377\337\337\337\377\342\342\342\377\347\347\347\377\344\344\344\377"
|
||||
"\352\352\352\377\351\351\351\377\346\346\346\377\346\346\346\377\343\343"
|
||||
"\343\377\343\343\343\377\343\343\343\377\343\343\343\377\340\340\340\377"
|
||||
"\340\340\340\377\340\340\340\377\335\335\335\377\335\335\335\377\340\340"
|
||||
"\340\377\343\343\343\377\343\343\343\377\351\351\351\377\351\351\351\377"
|
||||
"\351\351\351\377\351\351\351\377\344\344\344\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377"
|
||||
"\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\344\344\344\377\347\347\347\377\346\346\346\377"
|
||||
"\343\343\343\377\343\343\343\377\340\340\340\377\340\340\340\377\335\335"
|
||||
"\335\377\335\335\335\377\340\340\340\377\340\340\340\377\343\343\343\377"
|
||||
"\346\346\346\377\346\346\346\377\346\346\346\377\347\347\347\377\352\352"
|
||||
"\352\377\347\347\347\377\347\347\347\377\342\342\342\377\337\337\337\377"
|
||||
"\334\334\334\377\335\335\335\377\327\327\327\377\327\327\327\377\335\335"
|
||||
"\335\377\334\334\334\377\337\337\337\377\342\342\342\377\347\347\347\377"
|
||||
"\347\347\347\377\352\352\352\377\346\346\346\377\346\346\346\377\346\346"
|
||||
"\346\377\346\346\346\377\343\343\343\377\343\343\343\377\343\343\343\377"
|
||||
"\340\340\340\377\340\340\340\377\340\340\340\377\340\340\340\377\340\340"
|
||||
"\340\377\340\340\340\377\343\343\343\377\343\343\343\377\351\351\351\377"
|
||||
"\351\351\351\377\351\351\351\377\347\347\347\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\344\344\344\377\344\344\344\377\352\352\352\377"
|
||||
"\352\352\352\377\352\352\352\377\352\352\352\377\352\352\352\377\352\352"
|
||||
"\352\377\352\352\352\377\352\352\352\377\352\352\352\377\354\354\354\377"
|
||||
"\351\351\351\377\346\346\346\377\346\346\346\377\343\343\343\377\343\343"
|
||||
"\343\377\343\343\343\377\343\343\343\377\343\343\343\377\346\346\346\377"
|
||||
"\346\346\346\377\352\352\352\377\352\352\352\377\352\352\352\377\354\354"
|
||||
"\354\377\352\352\352\377\347\347\347\377\347\347\347\377\342\342\342\377"
|
||||
"\340\340\340\377\334\334\334\377\335\335\335\377\327\327\327\377\327\327"
|
||||
"\327\377\335\335\335\377\335\335\335\377\340\340\340\377\342\342\342\377"
|
||||
"\347\347\347\377\347\347\347\377\352\352\352\377\354\354\354\377\352\352"
|
||||
"\352\377\352\352\352\377\352\352\352\377\351\351\351\377\351\351\351\377"
|
||||
"\346\346\346\377\346\346\346\377\346\346\346\377\343\343\343\377\343\343"
|
||||
"\343\377\340\340\340\377\343\343\343\377\346\346\346\377\351\351\351\377"
|
||||
"\351\351\351\377\355\355\355\377\355\355\355\377\355\355\355\377\352\352"
|
||||
"\352\377\352\352\352\377\352\352\352\377\352\352\352\377\352\352\352\377"
|
||||
"\352\352\352\377\352\352\352\377\355\355\355\377\355\355\355\377\355\355"
|
||||
"\355\377\355\355\355\377\355\355\355\377\355\355\355\377\352\352\352\377"
|
||||
"\354\354\354\377\351\351\351\377\351\351\351\377\351\351\351\377\343\343"
|
||||
"\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377"
|
||||
"\351\351\351\377\352\352\352\377\352\352\352\377\352\352\352\377\354\354"
|
||||
"\354\377\354\354\354\377\354\354\354\377\351\351\351\377\351\351\351\377"
|
||||
"\344\344\344\377\340\340\340\377\335\335\335\377\335\335\335\377\327\327"
|
||||
"\327\377\327\327\327\377\335\335\335\377\335\335\335\377\340\340\340\377"
|
||||
"\344\344\344\377\351\351\351\377\351\351\351\377\352\352\352\377\354\354"
|
||||
"\354\377\354\354\354\377\352\352\352\377\352\352\352\377\351\351\351\377"
|
||||
"\351\351\351\377\351\351\351\377\351\351\351\377\351\351\351\377\343\343"
|
||||
"\343\377\343\343\343\377\340\340\340\377\343\343\343\377\351\351\351\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377\355\355"
|
||||
"\355\377\352\352\352\377\352\352\352\377\352\352\352\377\352\352\352\377"
|
||||
"\352\352\352\377\357\357\357\377\357\357\357\377\357\357\357\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\362\362\362\377\357\357\357\377"
|
||||
"\357\357\357\377\360\360\360\377\355\355\355\377\351\351\351\377\351\351"
|
||||
"\351\377\343\343\343\377\346\346\346\377\346\346\346\377\343\343\343\377"
|
||||
"\351\351\351\377\355\355\355\377\360\360\360\377\360\360\360\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\357\357\357\377\354\354\354\377"
|
||||
"\351\351\351\377\346\346\346\377\343\343\343\377\335\335\335\377\335\335"
|
||||
"\335\377\327\327\327\377\327\327\327\377\335\335\335\377\335\335\335\377"
|
||||
"\343\343\343\377\346\346\346\377\351\351\351\377\354\354\354\377\357\357"
|
||||
"\357\377\362\362\362\377\362\362\362\377\362\362\362\377\360\360\360\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\351\351\351\377\351\351"
|
||||
"\351\377\343\343\343\377\346\346\346\377\346\346\346\377\346\346\346\377"
|
||||
"\351\351\351\377\355\355\355\377\363\363\363\377\363\363\363\377\363\363"
|
||||
"\363\377\363\363\363\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\363\363\363\377\362\362\362\377\363\363\363\377\360\360\360\377\355\355"
|
||||
"\355\377\351\351\351\377\343\343\343\377\343\343\343\377\343\343\343\377"
|
||||
"\343\343\343\377\351\351\351\377\360\360\360\377\360\360\360\377\360\360"
|
||||
"\360\377\362\362\362\377\362\362\362\377\362\362\362\377\363\363\363\377"
|
||||
"\357\357\357\377\351\351\351\377\346\346\346\377\343\343\343\377\335\335"
|
||||
"\335\377\335\335\335\377\327\327\327\377\327\327\327\377\335\335\335\377"
|
||||
"\335\335\335\377\343\343\343\377\346\346\346\377\351\351\351\377\357\357"
|
||||
"\357\377\363\363\363\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\360\360\360\377\360\360\360\377\355\355\355\377\355\355\355\377\351\351"
|
||||
"\351\377\351\351\351\377\343\343\343\377\343\343\343\377\346\346\346\377"
|
||||
"\351\351\351\377\355\355\355\377\360\360\360\377\363\363\363\377\363\363"
|
||||
"\363\377\363\363\363\377\363\363\363\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\362\362\362\377\362\362"
|
||||
"\362\377\362\362\362\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\363\363\363\377\363\363\363\377\363\363\363\377\363\363"
|
||||
"\363\377\355\355\355\377\351\351\351\377\351\351\351\377\346\346\346\377"
|
||||
"\346\346\346\377\351\351\351\377\351\351\351\377\360\360\360\377\363\363"
|
||||
"\363\377\363\363\363\377\365\365\365\377\365\365\365\377\363\363\363\377"
|
||||
"\363\363\363\377\357\357\357\377\354\354\354\377\347\347\347\377\343\343"
|
||||
"\343\377\335\335\335\377\335\335\335\377\327\327\327\377\327\327\327\377"
|
||||
"\335\335\335\377\335\335\335\377\343\343\343\377\347\347\347\377\351\351"
|
||||
"\351\377\357\357\357\377\363\363\363\377\363\363\363\377\365\365\365\377"
|
||||
"\365\365\365\377\365\365\365\377\363\363\363\377\360\360\360\377\355\355"
|
||||
"\355\377\351\351\351\377\351\351\351\377\351\351\351\377\346\346\346\377"
|
||||
"\351\351\351\377\351\351\351\377\355\355\355\377\360\360\360\377\365\365"
|
||||
"\365\377\365\365\365\377\365\365\365\377\365\365\365\377\363\363\363\377"
|
||||
"\362\362\362\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\362\362\362\377\363\363\363\377\363\363\363\377\363\363"
|
||||
"\363\377\363\363\363\377\355\355\355\377\355\355\355\377\351\351\351\377"
|
||||
"\351\351\351\377\351\351\351\377\351\351\351\377\360\360\360\377\360\360"
|
||||
"\360\377\363\363\363\377\363\363\363\377\365\365\365\377\365\365\365\377"
|
||||
"\363\363\363\377\363\363\363\377\357\357\357\377\355\355\355\377\347\347"
|
||||
"\347\377\343\343\343\377\335\335\335\377\335\335\335\377\327\327\327\377"
|
||||
"\327\327\327\377\335\335\335\377\335\335\335\377\343\343\343\377\347\347"
|
||||
"\347\377\351\351\351\377\357\357\357\377\363\363\363\377\363\363\363\377"
|
||||
"\365\365\365\377\365\365\365\377\365\365\365\377\363\363\363\377\363\363"
|
||||
"\363\377\360\360\360\377\355\355\355\377\355\355\355\377\351\351\351\377"
|
||||
"\351\351\351\377\351\351\351\377\351\351\351\377\355\355\355\377\360\360"
|
||||
"\360\377\365\365\365\377\365\365\365\377\365\365\365\377\365\365\365\377"
|
||||
"\363\363\363\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\363\363\363\377\365\365\365\377\365\365\365\377\365\365"
|
||||
"\365\377\363\363\363\377\363\363\363\377\355\355\355\377\355\355\355\377"
|
||||
"\351\351\351\377\351\351\351\377\351\351\351\377\352\352\352\377\360\360"
|
||||
"\360\377\360\360\360\377\363\363\363\377\365\365\365\377\365\365\365\377"
|
||||
"\370\370\370\377\363\363\363\377\363\363\363\377\360\360\360\377\355\355"
|
||||
"\355\377\347\347\347\377\343\343\343\377\335\335\335\377\335\335\335\377"
|
||||
"\327\327\327\377\327\327\327\377\335\335\335\377\335\335\335\377\343\343"
|
||||
"\343\377\347\347\347\377\354\354\354\377\357\357\357\377\363\363\363\377"
|
||||
"\363\363\363\377\362\362\362\377\362\362\362\377\362\362\362\377\363\363"
|
||||
"\363\377\363\363\363\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\352\352\352\377\351\351\351\377\351\351\351\377\351\351\351\377\355\355"
|
||||
"\355\377\360\360\360\377\365\365\365\377\365\365\365\377\365\365\365\377"
|
||||
"\365\365\365\377\365\365\365\377\363\363\363\377\362\362\362\377\362\362"
|
||||
"\362\377\362\362\362\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\365\365\365\377\365\365\365\377\365\365\365\377\365\365"
|
||||
"\365\377\365\365\365\377\363\363\363\377\363\363\363\377\355\355\355\377"
|
||||
"\355\355\355\377\351\351\351\377\352\352\352\377\352\352\352\377\352\352"
|
||||
"\352\377\360\360\360\377\360\360\360\377\365\365\365\377\365\365\365\377"
|
||||
"\365\365\365\377\370\370\370\377\363\363\363\377\357\357\357\377\352\352"
|
||||
"\352\377\355\355\355\377\347\347\347\377\343\343\343\377\335\335\335\377"
|
||||
"\335\335\335\377\327\327\327\377\327\327\327\377\335\335\335\377\335\335"
|
||||
"\335\377\343\343\343\377\347\347\347\377\355\355\355\377\354\354\354\377"
|
||||
"\357\357\357\377\363\363\363\377\363\363\363\377\362\362\362\377\362\362"
|
||||
"\362\377\363\363\363\377\363\363\363\377\360\360\360\377\360\360\360\377"
|
||||
"\352\352\352\377\352\352\352\377\352\352\352\377\352\352\352\377\351\351"
|
||||
"\351\377\351\351\351\377\355\355\355\377\363\363\363\377\365\365\365\377"
|
||||
"\365\365\365\377\365\365\365\377\365\365\365\377\365\365\365\377\363\363"
|
||||
"\363\377\363\363\363\377\363\363\363\377\360\360\360\377\360\360\360\377"
|
||||
"\360\360\360\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\355\355\355\377\355\355\355\377\352\352\352\377\351\351\351\377\351\351"
|
||||
"\351\377\352\352\352\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\363\363\363\377\357\357"
|
||||
"\357\377\355\355\355\377\355\355\355\377\347\347\347\377\343\343\343\377"
|
||||
"\335\335\335\377\337\337\337\377\331\331\331\377\331\331\331\377\337\337"
|
||||
"\337\377\335\335\335\377\343\343\343\377\347\347\347\377\355\355\355\377"
|
||||
"\352\352\352\377\357\357\357\377\357\357\357\377\357\357\357\377\354\354"
|
||||
"\354\377\354\354\354\377\362\362\362\377\360\360\360\377\360\360\360\377"
|
||||
"\352\352\352\377\351\351\351\377\346\346\346\377\346\346\346\377\346\346"
|
||||
"\346\377\346\346\346\377\351\351\351\377\355\355\355\377\355\355\355\377"
|
||||
"\360\360\360\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\360\360\360\377\355\355\355\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377\355\355"
|
||||
"\355\377\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377"
|
||||
"\355\355\355\377\360\360\360\377\352\352\352\377\351\351\351\377\351\351"
|
||||
"\351\377\352\352\352\377\354\354\354\377\354\354\354\377\354\354\354\377"
|
||||
"\354\354\354\377\357\357\357\377\357\357\357\377\357\357\357\377\357\357"
|
||||
"\357\377\355\355\355\377\355\355\355\377\352\352\352\377\346\346\346\377"
|
||||
"\335\335\335\377\332\332\332\377\331\331\331\377\331\331\331\377\331\331"
|
||||
"\331\377\337\337\337\377\335\335\335\377\343\343\343\377\346\346\346\377"
|
||||
"\352\352\352\377\352\352\352\377\354\354\354\377\357\357\357\377\357\357"
|
||||
"\357\377\357\357\357\377\357\357\357\377\354\354\354\377\354\354\354\377"
|
||||
"\354\354\354\377\354\354\354\377\351\351\351\377\346\346\346\377\346\346"
|
||||
"\346\377\346\346\346\377\346\346\346\377\351\351\351\377\354\354\354\377"
|
||||
"\352\352\352\377\360\360\360\377\360\360\360\377\355\355\355\377\355\355"
|
||||
"\355\377\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377"
|
||||
"\351\351\351\377\351\351\351\377\351\351\351\377\351\351\351\377\351\351"
|
||||
"\351\377\351\351\351\377\351\351\351\377\351\351\351\377\351\351\351\377"
|
||||
"\351\351\351\377\352\352\352\377\352\352\352\377\352\352\352\377\347\347"
|
||||
"\347\377\344\344\344\377\344\344\344\377\347\347\347\377\347\347\347\377"
|
||||
"\347\347\347\377\351\351\351\377\351\351\351\377\351\351\351\377\351\351"
|
||||
"\351\377\351\351\351\377\352\352\352\377\352\352\352\377\347\347\347\377"
|
||||
"\343\343\343\377\335\335\335\377\327\327\327\377\331\331\331\377\331\331"
|
||||
"\331\377\331\331\331\377\337\337\337\377\335\335\335\377\343\343\343\377"
|
||||
"\346\346\346\377\352\352\352\377\351\351\351\377\347\347\347\377\351\351"
|
||||
"\351\377\351\351\351\377\351\351\351\377\351\351\351\377\347\347\347\377"
|
||||
"\347\347\347\377\347\347\347\377\347\347\347\377\344\344\344\377\344\344"
|
||||
"\344\377\342\342\342\377\342\342\342\377\344\344\344\377\344\344\344\377"
|
||||
"\347\347\347\377\347\347\347\377\354\354\354\377\352\352\352\377\352\352"
|
||||
"\352\377\351\351\351\377\351\351\351\377\351\351\351\377\351\351\351\377"
|
||||
"\351\351\351\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343"
|
||||
"\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377"
|
||||
"\343\343\343\377\346\346\346\377\346\346\346\377\346\346\346\377\347\347"
|
||||
"\347\377\347\347\347\377\344\344\344\377\344\344\344\377\344\344\344\377"
|
||||
"\347\347\347\377\347\347\347\377\347\347\347\377\347\347\347\377\347\347"
|
||||
"\347\377\347\347\347\377\351\351\351\377\346\346\346\377\346\346\346\377"
|
||||
"\343\343\343\377\340\340\340\377\335\335\335\377\327\327\327\377\331\331"
|
||||
"\331\377\331\331\331\377\331\331\331\377\334\334\334\377\335\335\335\377"
|
||||
"\335\335\335\377\340\340\340\377\346\346\346\377\351\351\351\377\347\347"
|
||||
"\347\377\347\347\347\377\347\347\347\377\347\347\347\377\347\347\347\377"
|
||||
"\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377\337\337"
|
||||
"\337\377\337\337\337\377\337\337\337\377\337\337\337\377\344\344\344\377"
|
||||
"\344\344\344\377\344\344\344\377\344\344\344\377\347\347\347\377\347\347"
|
||||
"\347\377\346\346\346\377\346\346\346\377\343\343\343\377\343\343\343\377"
|
||||
"\343\343\343\377\343\343\343\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\335\335\335\377\335\335\335\377\335\335\335\377\340\340\340\377"
|
||||
"\340\340\340\377\340\340\340\377\342\342\342\377\342\342\342\377\342\342"
|
||||
"\342\377\342\342\342\377\342\342\342\377\337\337\337\377\337\337\337\377"
|
||||
"\337\337\337\377\342\342\342\377\342\342\342\377\342\342\342\377\342\342"
|
||||
"\342\377\342\342\342\377\342\342\342\377\346\346\346\377\340\340\340\377"
|
||||
"\340\340\340\377\335\335\335\377\335\335\335\377\335\335\335\377\327\327"
|
||||
"\327\377\331\331\331\377\337\337\337\377\337\337\337\377\331\331\331\377"
|
||||
"\327\327\327\377\335\335\335\377\340\340\340\377\346\346\346\377\343\343"
|
||||
"\343\377\342\342\342\377\342\342\342\377\342\342\342\377\342\342\342\377"
|
||||
"\342\342\342\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337"
|
||||
"\337\377\335\335\335\377\332\332\332\377\332\332\332\377\335\335\335\377"
|
||||
"\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\342\342"
|
||||
"\342\377\342\342\342\377\342\342\342\377\340\340\340\377\340\340\340\377"
|
||||
"\335\335\335\377\335\335\335\377\335\335\335\377\334\334\334\377\334\334"
|
||||
"\334\377\334\334\334\377\334\334\334\377\335\335\335\377\335\335\335\377"
|
||||
"\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337"
|
||||
"\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377"
|
||||
"\337\337\337\377\342\342\342\377\342\342\342\377\337\337\337\377\337\337"
|
||||
"\337\377\337\337\337\377\337\337\337\377\337\337\337\377\340\340\340\377"
|
||||
"\335\335\335\377\335\335\335\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\327\327\327\377\331\331\331\377\337\337\337\377\335\335\335\377"
|
||||
"\327\327\327\377\327\327\327\377\335\335\335\377\335\335\335\377\343\343"
|
||||
"\343\377\337\337\337\377\342\342\342\377\342\342\342\377\342\342\342\377"
|
||||
"\342\342\342\377\337\337\337\377\337\337\337\377\335\335\335\377\335\335"
|
||||
"\335\377\335\335\335\377\332\332\332\377\332\332\332\377\332\332\332\377"
|
||||
"\335\335\335\377\335\335\335\377\335\335\335\377\335\335\335\377\337\337"
|
||||
"\337\377\337\337\337\377\337\337\337\377\337\337\337\377\335\335\335\377"
|
||||
"\335\335\335\377\334\334\334\377\334\334\334\377\334\334\334\377\331\331"
|
||||
"\331\377\331\331\331\377\331\331\331\377\331\331\331\377\331\331\331\377"
|
||||
"\331\331\331\377\332\332\332\377\332\332\332\377\332\332\332\377\332\332"
|
||||
"\332\377\332\332\332\377\332\332\332\377\332\332\332\377\332\332\332\377"
|
||||
"\332\332\332\377\332\332\332\377\334\334\334\377\334\334\334\377\331\331"
|
||||
"\331\377\331\331\331\377\331\331\331\377\331\331\331\377\331\331\331\377"
|
||||
"\335\335\335\377\335\335\335\377\327\327\327\377\327\327\327\377\327\327"
|
||||
"\327\377\327\327\327\377\327\327\327\377\327\327\327\377\327\327\327\377"
|
||||
"\327\327\327\377\332\332\332\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\340\340\340\377\334\334\334\377\334\334\334\377\334\334\334\377"
|
||||
"\334\334\334\377\332\332\332\377\332\332\332\377\332\332\332\377\332\332"
|
||||
"\332\377\332\332\332\377\327\327\327\377\332\332\332\377\332\332\332\377"
|
||||
"\327\327\327\377\327\327\327\377\327\327\327\377\332\332\332\377\332\332"
|
||||
"\332\377\332\332\332\377\332\332\332\377\332\332\332\377\332\332\332\377"
|
||||
"\331\331\331\377\331\331\331\377\331\331\331\377\326\326\326\377\326\326"
|
||||
"\326\377\326\326\326\377\326\326\326\377\326\326\326\377\331\331\331\377"
|
||||
"\331\331\331\377\331\331\331\377\332\332\332\377\332\332\332\377\332\332"
|
||||
"\332\377\332\332\332\377\332\332\332\377\332\332\332\377\332\332\332\377"
|
||||
"\332\332\332\377\332\332\332\377\332\332\332\377\334\334\334\377\331\331"
|
||||
"\331\377\331\331\331\377\331\331\331\377\331\331\331\377\331\331\331\377"
|
||||
"\331\331\331\377\335\335\335\377\335\335\335\377\327\327\327\377\327\327"
|
||||
"\327\377\327\327\327\377\327\327\327\377\327\327\327\377\327\327\327\377"
|
||||
"\327\327\327\377\327\327\327\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\335\335\335\377\334\334\334\377\334\334\334\377\334\334\334\377"
|
||||
"\334\334\334\377\332\332\332\377\332\332\332\377\332\332\332\377\332\332"
|
||||
"\332\377\332\332\332\377\332\332\332\377\332\332\332\377\332\332\332\377"
|
||||
"\332\332\332\377\327\327\327\377\327\327\327\377\332\332\332\377\332\332"
|
||||
"\332\377\332\332\332\377\332\332\332\377\332\332\332\377\332\332\332\377"
|
||||
"\332\332\332\377\331\331\331\377\331\331\331\377\326\326\326\377\326\326"
|
||||
"\326\377\326\326\326\377\334\334\334\377\334\334\334\377\334\334\334\377"
|
||||
"\334\334\334\377\335\335\335\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\335\335\335\377\337\337\337\377\337\337\337\377\337\337\337\377"
|
||||
"\337\337\337\377\337\337\337\377\337\337\337\377\335\335\335\377\332\332"
|
||||
"\332\377\334\334\334\377\337\337\337\377\337\337\337\377\337\337\337\377"
|
||||
"\337\337\337\377\337\337\337\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\335\335\335\377\335\335\335\377\335\335\335\377\335\335\335\377"
|
||||
"\332\332\332\377\327\327\327\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\340\340\340\377\342\342\342\377\342\342\342\377\342\342\342\377"
|
||||
"\342\342\342\377\337\337\337\377\337\337\337\377\337\337\337\377\335\335"
|
||||
"\335\377\335\335\335\377\335\335\335\377\335\335\335\377\335\335\335\377"
|
||||
"\335\335\335\377\335\335\335\377\332\332\332\377\332\332\332\377\335\335"
|
||||
"\335\377\335\335\335\377\335\335\335\377\335\335\335\377\335\335\335\377"
|
||||
"\335\335\335\377\335\335\335\377\335\335\335\377\334\334\334\377\334\334"
|
||||
"\334\377\334\334\334\377\334\334\334\377\335\335\335\377\335\335\335\377"
|
||||
"\335\335\335\377\335\335\335\377\340\340\340\377\340\340\340\377\340\340"
|
||||
"\340\377\343\343\343\377\343\343\343\377\343\343\343\377\340\340\340\377"
|
||||
"\340\340\340\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337"
|
||||
"\337\377\332\332\332\377\334\334\334\377\342\342\342\377\342\342\342\377"
|
||||
"\342\342\342\377\342\342\342\377\342\342\342\377\342\342\342\377\335\335"
|
||||
"\335\377\340\340\340\377\340\340\340\377\340\340\340\377\335\335\335\377"
|
||||
"\335\335\335\377\335\335\335\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\334\334\334\377\337\337\337\377\342\342\342\377\342\342\342\377"
|
||||
"\347\347\347\377\344\344\344\377\344\344\344\377\344\344\344\377\343\343"
|
||||
"\343\377\340\340\340\377\340\340\340\377\340\340\340\377\335\335\335\377"
|
||||
"\335\335\335\377\335\335\335\377\335\335\335\377\334\334\334\377\334\334"
|
||||
"\334\377\335\335\335\377\335\335\335\377\335\335\335\377\335\335\335\377"
|
||||
"\335\335\335\377\335\335\335\377\335\335\335\377\335\335\335\377\335\335"
|
||||
"\335\377\335\335\335\377\335\335\335\377\335\335\335\377\343\343\343\377"
|
||||
"\343\343\343\377\343\343\343\377\343\343\343\377\346\346\346\377\346\346"
|
||||
"\346\377\346\346\346\377\346\346\346\377\346\346\346\377\346\346\346\377"
|
||||
"\343\343\343\377\346\346\346\377\343\343\343\377\344\344\344\377\344\344"
|
||||
"\344\377\342\342\342\377\337\337\337\377\337\337\337\377\344\344\344\377"
|
||||
"\344\344\344\377\347\347\347\377\347\347\347\377\347\347\347\377\347\347"
|
||||
"\347\377\342\342\342\377\342\342\342\377\342\342\342\377\346\346\346\377"
|
||||
"\343\343\343\377\335\335\335\377\335\335\335\377\335\335\335\377\331\331"
|
||||
"\331\377\337\337\337\377\337\337\337\377\342\342\342\377\344\344\344\377"
|
||||
"\344\344\344\377\352\352\352\377\351\351\351\377\351\351\351\377\351\351"
|
||||
"\351\377\346\346\346\377\346\346\346\377\346\346\346\377\346\346\346\377"
|
||||
"\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\340\340"
|
||||
"\340\377\340\340\340\377\343\343\343\377\343\343\343\377\343\343\343\377"
|
||||
"\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343"
|
||||
"\343\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377"
|
||||
"\351\351\351\377\351\351\351\377\351\351\351\377\351\351\351\377\351\351"
|
||||
"\351\377\351\351\351\377\355\355\355\377\355\355\355\377\355\355\355\377"
|
||||
"\355\355\355\377\351\351\351\377\352\352\352\377\346\346\346\377\346\346"
|
||||
"\346\377\343\343\343\377\344\344\344\377\344\344\344\377\344\344\344\377"
|
||||
"\344\344\344\377\344\344\344\377\347\347\347\377\351\351\351\377\351\351"
|
||||
"\351\377\351\351\351\377\347\347\347\377\347\347\347\377\344\344\344\377"
|
||||
"\344\344\344\377\343\343\343\377\335\335\335\377\334\334\334\377\331\331"
|
||||
"\331\377\334\334\334\377\342\342\342\377\342\342\342\377\344\344\344\377"
|
||||
"\347\347\347\377\352\352\352\377\355\355\355\377\360\360\360\377\355\355"
|
||||
"\355\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\360\360\360\377\355\355\355\377\355\355\355\377\351\351\351\377\351\351"
|
||||
"\351\377\343\343\343\377\343\343\343\377\351\351\351\377\351\351\351\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377\351\351"
|
||||
"\351\377\351\351\351\377\351\351\351\377\351\351\351\377\343\343\343\377"
|
||||
"\343\343\343\377\354\354\354\377\354\354\354\377\354\354\354\377\355\355"
|
||||
"\355\377\355\355\355\377\355\355\355\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\355\355\355\377\355\355\355\377\351\351"
|
||||
"\351\377\346\346\346\377\346\346\346\377\346\346\346\377\346\346\346\377"
|
||||
"\351\351\351\377\351\351\351\377\351\351\351\377\352\352\352\377\354\354"
|
||||
"\354\377\354\354\354\377\357\357\357\377\354\354\354\377\354\354\354\377"
|
||||
"\351\351\351\377\344\344\344\377\342\342\342\377\337\337\337\377\337\337"
|
||||
"\337\377\337\337\337\377\334\334\334\377\342\342\342\377\342\342\342\377"
|
||||
"\344\344\344\377\352\352\352\377\355\355\355\377\362\362\362\377\363\363"
|
||||
"\363\377\365\365\365\377\365\365\365\377\365\365\365\377\362\362\362\377"
|
||||
"\362\362\362\377\362\362\362\377\357\357\357\377\357\357\357\377\352\352"
|
||||
"\352\377\352\352\352\377\344\344\344\377\344\344\344\377\352\352\352\377"
|
||||
"\354\354\354\377\363\363\363\377\363\363\363\377\363\363\363\377\363\363"
|
||||
"\363\377\355\355\355\377\355\355\355\377\354\354\354\377\354\354\354\377"
|
||||
"\347\347\347\377\347\347\347\377\355\355\355\377\355\355\355\377\355\355"
|
||||
"\355\377\355\355\355\377\360\360\360\377\360\360\360\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\363\363\363\377\360\360"
|
||||
"\360\377\355\355\355\377\351\351\351\377\343\343\343\377\343\343\343\377"
|
||||
"\343\343\343\377\351\351\351\377\352\352\352\377\352\352\352\377\360\360"
|
||||
"\360\377\362\362\362\377\362\362\362\377\362\362\362\377\357\357\357\377"
|
||||
"\354\354\354\377\354\354\354\377\347\347\347\377\347\347\347\377\342\342"
|
||||
"\342\377\337\337\337\377\334\334\334\377\334\334\334\377\337\337\337\377"
|
||||
"\344\344\344\377\351\351\351\377\355\355\355\377\360\360\360\377\365\365"
|
||||
"\365\377\366\366\366\377\371\371\371\377\370\370\370\377\366\366\366\377"
|
||||
"\366\366\366\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362"
|
||||
"\362\377\355\355\355\377\355\355\355\377\352\352\352\377\352\352\352\377"
|
||||
"\355\355\355\377\357\357\357\377\357\357\357\377\357\357\357\377\357\357"
|
||||
"\357\377\357\357\357\377\355\355\355\377\355\355\355\377\355\355\355\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\362\362\362\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\363\363\363\377\363\363\363\377\363\363\363\377\363\363"
|
||||
"\363\377\360\360\360\377\355\355\355\377\351\351\351\377\351\351\351\377"
|
||||
"\343\343\343\377\343\343\343\377\351\351\351\377\354\354\354\377\355\355"
|
||||
"\355\377\362\362\362\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\362\362\362\377\357\357\357\377\352\352\352\377\347\347\347\377\344\344"
|
||||
"\344\377\337\337\337\377\337\337\337\377\332\332\332\377\337\337\337\377"
|
||||
"\337\337\337\377\343\343\343\377\351\351\351\377\355\355\355\377\363\363"
|
||||
"\363\377\366\366\366\377\366\366\366\377\371\371\371\377\373\373\373\377"
|
||||
"\373\373\373\377\371\371\371\377\365\365\365\377\365\365\365\377\365\365"
|
||||
"\365\377\365\365\365\377\360\360\360\377\360\360\360\377\355\355\355\377"
|
||||
"\357\357\357\377\357\357\357\377\362\362\362\377\362\362\362\377\363\363"
|
||||
"\363\377\363\363\363\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\362\362\362\377\363\363\363\377\363\363\363\377\362\362"
|
||||
"\362\377\362\362\362\377\355\355\355\377\355\355\355\377\351\351\351\377"
|
||||
"\351\351\351\377\343\343\343\377\343\343\343\377\351\351\351\377\355\355"
|
||||
"\355\377\360\360\360\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\362\362\362\377\360\360\360\377\355\355\355\377\354\354"
|
||||
"\354\377\347\347\347\377\342\342\342\377\337\337\337\377\335\335\335\377"
|
||||
"\337\337\337\377\340\340\340\377\343\343\343\377\346\346\346\377\355\355"
|
||||
"\355\377\365\365\365\377\370\370\370\377\371\371\371\377\373\373\373\377"
|
||||
"\373\373\373\377\373\373\373\377\371\371\371\377\366\366\366\377\366\366"
|
||||
"\366\377\366\366\366\377\365\365\365\377\365\365\365\377\360\360\360\377"
|
||||
"\360\360\360\377\355\355\355\377\355\355\355\377\360\360\360\377\363\363"
|
||||
"\363\377\363\363\363\377\363\363\363\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\362\362\362\377\357\357\357\377\362\362\362\377\362\362"
|
||||
"\362\377\363\363\363\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\355\355\355\377\352\352\352\377"
|
||||
"\347\347\347\377\347\347\347\377\343\343\343\377\351\351\351\377\351\351"
|
||||
"\351\377\355\355\355\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\360\360\360\377\360\360"
|
||||
"\360\377\352\352\352\377\346\346\346\377\342\342\342\377\337\337\337\377"
|
||||
"\335\335\335\377\335\335\335\377\340\340\340\377\340\340\340\377\351\351"
|
||||
"\351\377\360\360\360\377\363\363\363\377\366\366\366\377\373\373\373\377"
|
||||
"\373\373\373\377\371\371\371\377\371\371\371\377\373\373\373\377\373\373"
|
||||
"\373\377\370\370\370\377\370\370\370\377\363\363\363\377\363\363\363\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377\363\363"
|
||||
"\363\377\363\363\363\377\363\363\363\377\363\363\363\377\365\365\365\377"
|
||||
"\365\365\365\377\363\363\363\377\363\363\363\377\360\360\360\377\360\360"
|
||||
"\360\377\363\363\363\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\360\360\360\377\363\363\363\377\362\362\362\377\362\362\362\377\362\362"
|
||||
"\362\377\362\362\362\377\362\362\362\377\362\362\362\377\355\355\355\377"
|
||||
"\352\352\352\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344"
|
||||
"\344\377\352\352\352\377\354\354\354\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\363\363\363\377\360\360"
|
||||
"\360\377\355\355\355\377\351\351\351\377\346\346\346\377\343\343\343\377"
|
||||
"\335\335\335\377\335\335\335\377\334\334\334\377\340\340\340\377\343\343"
|
||||
"\343\377\351\351\351\377\357\357\357\377\362\362\362\377\366\366\366\377"
|
||||
"\373\373\373\377\371\371\371\377\371\371\371\377\370\370\370\377\373\373"
|
||||
"\373\377\373\373\373\377\370\370\370\377\370\370\370\377\363\363\363\377"
|
||||
"\363\363\363\377\357\357\357\377\357\357\357\377\357\357\357\377\357\357"
|
||||
"\357\377\360\360\360\377\363\363\363\377\362\362\362\377\362\362\362\377"
|
||||
"\363\363\363\377\363\363\363\377\360\360\360\377\360\360\360\377\357\357"
|
||||
"\357\377\357\357\357\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\360\360\360\377\357\357\357\377\360\360\360\377\363\363\363\377\363\363"
|
||||
"\363\377\363\363\363\377\363\363\363\377\362\362\362\377\362\362\362\377"
|
||||
"\355\355\355\377\352\352\352\377\344\344\344\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\352\352\352\377\352\352\352\377\357\357\357\377"
|
||||
"\355\355\355\377\365\365\365\377\365\365\365\377\365\365\365\377\365\365"
|
||||
"\365\377\363\363\363\377\355\355\355\377\351\351\351\377\346\346\346\377"
|
||||
"\340\340\340\377\340\340\340\377\334\334\334\377\334\334\334\377\340\340"
|
||||
"\340\377\343\343\343\377\347\347\347\377\355\355\355\377\362\362\362\377"
|
||||
"\366\366\366\377\371\371\371\377\371\371\371\377\366\366\366\377\365\365"
|
||||
"\365\377\365\365\365\377\365\365\365\377\366\366\366\377\366\366\366\377"
|
||||
"\362\362\362\377\362\362\362\377\355\355\355\377\357\357\357\377\360\360"
|
||||
"\360\377\360\360\360\377\357\357\357\377\357\357\357\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\360\360\360\377\360\360"
|
||||
"\360\377\357\357\357\377\357\357\357\377\360\360\360\377\360\360\360\377"
|
||||
"\360\360\360\377\360\360\360\377\357\357\357\377\357\357\357\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\360\360\360\377\355\355\355\377"
|
||||
"\360\360\360\377\354\354\354\377\352\352\352\377\344\344\344\377\344\344"
|
||||
"\344\377\344\344\344\377\344\344\344\377\352\352\352\377\355\355\355\377"
|
||||
"\357\357\357\377\360\360\360\377\362\362\362\377\362\362\362\377\363\363"
|
||||
"\363\377\365\365\365\377\363\363\363\377\363\363\363\377\355\355\355\377"
|
||||
"\346\346\346\377\340\340\340\377\340\340\340\377\334\334\334\377\334\334"
|
||||
"\334\377\340\340\340\377\343\343\343\377\347\347\347\377\355\355\355\377"
|
||||
"\362\362\362\377\366\366\366\377\371\371\371\377\371\371\371\377\365\365"
|
||||
"\365\377\365\365\365\377\365\365\365\377\365\365\365\377\366\366\366\377"
|
||||
"\366\366\366\377\362\362\362\377\362\362\362\377\355\355\355\377\357\357"
|
||||
"\357\377\357\357\357\377\360\360\360\377\357\357\357\377\357\357\357\377"
|
||||
"\363\363\363\377\363\363\363\377\363\363\363\377\363\363\363\377\360\360"
|
||||
"\360\377\360\360\360\377\357\357\357\377\357\357\357\377\360\360\360\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377\357\357"
|
||||
"\357\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\354\354\354\377\357\357\357\377\351\351\351\377\351\351\351\377\343\343"
|
||||
"\343\377\343\343\343\377\344\344\344\377\344\344\344\377\352\352\352\377"
|
||||
"\355\355\355\377\362\362\362\377\362\362\362\377\357\357\357\377\357\357"
|
||||
"\357\377\363\363\363\377\363\363\363\377\362\362\362\377\363\363\363\377"
|
||||
"\355\355\355\377\346\346\346\377\340\340\340\377\340\340\340\377\335\335"
|
||||
"\335\377\335\335\335\377\340\340\340\377\342\342\342\377\344\344\344\377"
|
||||
"\355\355\355\377\362\362\362\377\366\366\366\377\363\363\363\377\365\365"
|
||||
"\365\377\370\370\370\377\370\370\370\377\366\366\366\377\366\366\366\377"
|
||||
"\363\363\363\377\363\363\363\377\362\362\362\377\362\362\362\377\355\355"
|
||||
"\355\377\355\355\355\377\352\352\352\377\352\352\352\377\360\360\360\377"
|
||||
"\360\360\360\377\363\363\363\377\363\363\363\377\360\360\360\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\354\354\354\377\354\354\354\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377\354\354"
|
||||
"\354\377\357\357\357\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\360\360\360\377\357\357\357\377\357\357\357\377\351\351\351\377\351\351"
|
||||
"\351\377\343\343\343\377\343\343\343\377\343\343\343\377\343\343\343\377"
|
||||
"\351\351\351\377\354\354\354\377\360\360\360\377\362\362\362\377\357\357"
|
||||
"\357\377\362\362\362\377\363\363\363\377\363\363\363\377\357\357\357\377"
|
||||
"\357\357\357\377\354\354\354\377\351\351\351\377\343\343\343\377\340\340"
|
||||
"\340\377\335\335\335\377\335\335\335\377\337\337\337\377\337\337\337\377"
|
||||
"\344\344\344\377\355\355\355\377\362\362\362\377\363\363\363\377\363\363"
|
||||
"\363\377\363\363\363\377\370\370\370\377\370\370\370\377\366\366\366\377"
|
||||
"\366\366\366\377\363\363\363\377\362\362\362\377\357\357\357\377\357\357"
|
||||
"\357\377\355\355\355\377\355\355\355\377\355\355\355\377\352\352\352\377"
|
||||
"\357\357\357\377\360\360\360\377\363\363\363\377\363\363\363\377\360\360"
|
||||
"\360\377\357\357\357\377\357\357\357\377\357\357\357\377\354\354\354\377"
|
||||
"\354\354\354\377\357\357\357\377\355\355\355\377\355\355\355\377\355\355"
|
||||
"\355\377\355\355\355\377\357\357\357\377\354\354\354\377\354\354\354\377"
|
||||
"\354\354\354\377\354\354\354\377\357\357\357\377\357\357\357\377\351\351"
|
||||
"\351\377\346\346\346\377\343\343\343\377\343\343\343\377\343\343\343\377"
|
||||
"\343\343\343\377\351\351\351\377\354\354\354\377\355\355\355\377\360\360"
|
||||
"\360\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\357\357\357\377\357\357\357\377\352\352\352\377\347\347\347\377\343\343"
|
||||
"\343\377\343\343\343\377\335\335\335\377\335\335\335\377\337\337\337\377"
|
||||
"\337\337\337\377\344\344\344\377\355\355\355\377\362\362\362\377\360\360"
|
||||
"\360\377\360\360\360\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\362\362\362\377\362\362\362\377\362\362\362\377\357\357\357\377\355\355"
|
||||
"\355\377\352\352\352\377\352\352\352\377\352\352\352\377\352\352\352\377"
|
||||
"\352\352\352\377\355\355\355\377\357\357\357\377\357\357\357\377\357\357"
|
||||
"\357\377\357\357\357\377\355\355\355\377\352\352\352\377\352\352\352\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377\355\355"
|
||||
"\355\377\355\355\355\377\355\355\355\377\355\355\355\377\352\352\352\377"
|
||||
"\352\352\352\377\352\352\352\377\354\354\354\377\357\357\357\377\357\357"
|
||||
"\357\377\351\351\351\377\346\346\346\377\340\340\340\377\340\340\340\377"
|
||||
"\340\340\340\377\343\343\343\377\351\351\351\377\351\351\351\377\355\355"
|
||||
"\355\377\355\355\355\377\360\360\360\377\360\360\360\377\362\362\362\377"
|
||||
"\362\362\362\377\357\357\357\377\357\357\357\377\352\352\352\377\344\344"
|
||||
"\344\377\342\342\342\377\342\342\342\377\334\334\334\377\334\334\334\377"
|
||||
"\337\337\337\377\337\337\337\377\344\344\344\377\352\352\352\377\357\357"
|
||||
"\357\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\360\360\360\377\357\357\357\377\357\357\357\377\357\357\357\377\357\357"
|
||||
"\357\377\355\355\355\377\352\352\352\377\352\352\352\377\352\352\352\377"
|
||||
"\352\352\352\377\352\352\352\377\352\352\352\377\357\357\357\377\357\357"
|
||||
"\357\377\357\357\357\377\355\355\355\377\355\355\355\377\355\355\355\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\355\355\355\377\344\344"
|
||||
"\344\377\344\344\344\377\344\344\344\377\344\344\344\377\347\347\347\377"
|
||||
"\352\352\352\377\347\347\347\377\347\347\347\377\347\347\347\377\347\347"
|
||||
"\347\377\352\352\352\377\347\347\347\377\346\346\346\377\340\340\340\377"
|
||||
"\340\340\340\377\340\340\340\377\340\340\340\377\346\346\346\377\346\346"
|
||||
"\346\377\354\354\354\377\354\354\354\377\355\355\355\377\355\355\355\377"
|
||||
"\355\355\355\377\355\355\355\377\355\355\355\377\357\357\357\377\352\352"
|
||||
"\352\377\344\344\344\377\342\342\342\377\342\342\342\377\334\334\334\377"
|
||||
"\334\334\334\377\337\337\337\377\337\337\337\377\344\344\344\377\352\352"
|
||||
"\352\377\357\357\357\377\355\355\355\377\360\360\360\377\354\354\354\377"
|
||||
"\354\354\354\377\354\354\354\377\352\352\352\377\352\352\352\377\352\352"
|
||||
"\352\377\352\352\352\377\352\352\352\377\344\344\344\377\344\344\344\377"
|
||||
"\346\346\346\377\346\346\346\377\346\346\346\377\346\346\346\377\351\351"
|
||||
"\351\377\351\351\351\377\351\351\351\377\347\347\347\377\347\347\347\377"
|
||||
"\347\347\347\377\347\347\347\377\347\347\347\377\347\347\347\377\347\347"
|
||||
"\347\377\344\344\344\377\344\344\344\377\344\344\344\377\344\344\344\377"
|
||||
"\347\347\347\377\352\352\352\377\347\347\347\377\347\347\347\377\347\347"
|
||||
"\347\377\347\347\347\377\347\347\347\377\344\344\344\377\344\344\344\377"
|
||||
"\337\337\337\377\332\332\332\377\332\332\332\377\337\337\337\377\346\346"
|
||||
"\346\377\346\346\346\377\351\351\351\377\351\351\351\377\354\354\354\377"
|
||||
"\351\351\351\377\354\354\354\377\355\355\355\377\354\354\354\377\357\357"
|
||||
"\357\377\352\352\352\377\344\344\344\377\342\342\342\377\342\342\342\377"
|
||||
"\334\334\334\377\334\334\334\377\335\335\335\377\335\335\335\377\342\342"
|
||||
"\342\377\344\344\344\377\352\352\352\377\354\354\354\377\360\360\360\377"
|
||||
"\357\357\357\377\354\354\354\377\354\354\354\377\354\354\354\377\355\355"
|
||||
"\355\377\352\352\352\377\352\352\352\377\347\347\347\377\344\344\344\377"
|
||||
"\340\340\340\377\340\340\340\377\340\340\340\377\340\340\340\377\346\346"
|
||||
"\346\377\346\346\346\377\354\354\354\377\354\354\354\377\347\347\347\377"
|
||||
"\347\347\347\377\347\347\347\377\347\347\347\377\347\347\347\377\347\347"
|
||||
"\347\377\347\347\347\377\347\347\347\377\347\347\347\377\347\347\347\377"
|
||||
"\347\347\347\377\347\347\347\377\352\352\352\377\352\352\352\377\355\355"
|
||||
"\355\377\355\355\355\377\352\352\352\377\352\352\352\377\344\344\344\377"
|
||||
"\344\344\344\377\342\342\342\377\337\337\337\377\337\337\337\377\342\342"
|
||||
"\342\377\344\344\344\377\344\344\344\377\352\352\352\377\354\354\354\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\360\360\360\377\360\360"
|
||||
"\360\377\355\355\355\377\352\352\352\377\344\344\344\377\342\342\342\377"
|
||||
"\342\342\342\377\334\334\334\377\332\332\332\377\335\335\335\377\335\335"
|
||||
"\335\377\342\342\342\377\344\344\344\377\352\352\352\377\354\354\354\377"
|
||||
"\360\360\360\377\357\357\357\377\354\354\354\377\354\354\354\377\354\354"
|
||||
"\354\377\355\355\355\377\352\352\352\377\352\352\352\377\344\344\344\377"
|
||||
"\344\344\344\377\340\340\340\377\340\340\340\377\340\340\340\377\340\340"
|
||||
"\340\377\346\346\346\377\346\346\346\377\354\354\354\377\351\351\351\377"
|
||||
"\354\354\354\377\352\352\352\377\352\352\352\377\352\352\352\377\352\352"
|
||||
"\352\377\352\352\352\377\352\352\352\377\346\346\346\377\346\346\346\377"
|
||||
"\346\346\346\377\347\347\347\377\347\347\347\377\347\347\347\377\352\352"
|
||||
"\352\377\352\352\352\377\352\352\352\377\355\355\355\377\352\352\352\377"
|
||||
"\352\352\352\377\347\347\347\377\347\347\347\377\344\344\344\377\344\344"
|
||||
"\344\377\347\347\347\377\347\347\347\377\352\352\352\377\352\352\352\377"
|
||||
"\355\355\355\377\357\357\357\377\357\357\357\377\357\357\357\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\355\355\355\377\344\344\344\377"
|
||||
"\337\337\337\377\337\337\337\377\332\332\332\377\332\332\332\377\337\337"
|
||||
"\337\377\337\337\337\377\344\344\344\377\352\352\352\377\357\357\357\377"
|
||||
"\355\355\355\377\360\360\360\377\354\354\354\377\354\354\354\377\354\354"
|
||||
"\354\377\354\354\354\377\354\354\354\377\352\352\352\377\352\352\352\377"
|
||||
"\351\351\351\377\351\351\351\377\346\346\346\377\340\340\340\377\340\340"
|
||||
"\340\377\340\340\340\377\346\346\346\377\351\351\351\377\351\351\351\377"
|
||||
"\351\351\351\377\354\354\354\377\352\352\352\377\352\352\352\377\352\352"
|
||||
"\352\377\352\352\352\377\352\352\352\377\352\352\352\377\354\354\354\377"
|
||||
"\354\354\354\377\354\354\354\377\354\354\354\377\354\354\354\377\354\354"
|
||||
"\354\377\357\357\357\377\357\357\357\377\360\360\360\377\362\362\362\377"
|
||||
"\357\357\357\377\357\357\357\377\355\355\355\377\355\355\355\377\352\352"
|
||||
"\352\377\352\352\352\377\355\355\355\377\355\355\355\377\357\357\357\377"
|
||||
"\357\357\357\377\362\362\362\377\362\362\362\377\363\363\363\377\363\363"
|
||||
"\363\377\365\365\365\377\365\365\365\377\360\360\360\377\354\354\354\377"
|
||||
"\344\344\344\377\337\337\337\377\337\337\337\377\332\332\332\377\332\332"
|
||||
"\332\377\337\337\337\377\337\337\337\377\344\344\344\377\352\352\352\377"
|
||||
"\357\357\357\377\360\360\360\377\363\363\363\377\360\360\360\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\360\360\360\377\357\357\357\377"
|
||||
"\357\357\357\377\354\354\354\377\354\354\354\377\346\346\346\377\346\346"
|
||||
"\346\377\343\343\343\377\346\346\346\377\346\346\346\377\354\354\354\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\355\355\355\377\357\357"
|
||||
"\357\377\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\360\360\360\377\357\357\357\377\357\357\357\377\352\352\352\377\355\355"
|
||||
"\355\377\352\352\352\377\352\352\352\377\355\355\355\377\362\362\362\377"
|
||||
"\362\362\362\377\362\362\362\377\363\363\363\377\363\363\363\377\363\363"
|
||||
"\363\377\365\365\365\377\365\365\365\377\365\365\365\377\363\363\363\377"
|
||||
"\355\355\355\377\352\352\352\377\344\344\344\377\337\337\337\377\332\332"
|
||||
"\332\377\332\332\332\377\337\337\337\377\337\337\337\377\344\344\344\377"
|
||||
"\355\355\355\377\362\362\362\377\360\360\360\377\363\363\363\377\360\360"
|
||||
"\360\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360\360\377"
|
||||
"\357\357\357\377\357\357\357\377\354\354\354\377\354\354\354\377\346\346"
|
||||
"\346\377\346\346\346\377\346\346\346\377\346\346\346\377\354\354\354\377"
|
||||
"\354\354\354\377\357\357\357\377\357\357\357\377\357\357\357\377\355\355"
|
||||
"\355\377\357\357\357\377\355\355\355\377\357\357\357\377\362\362\362\377"
|
||||
"\362\362\362\377\363\363\363\377\363\363\363\377\363\363\363\377\363\363"
|
||||
"\363\377\365\365\365\377\365\365\365\377\365\365\365\377\365\365\365\377"
|
||||
"\365\365\365\377\365\365\365\377\363\363\363\377\360\360\360\377\357\357"
|
||||
"\357\377\354\354\354\377\354\354\354\377\354\354\354\377\351\351\351\377"
|
||||
"\362\362\362\377\363\363\363\377\366\366\366\377\370\370\370\377\370\370"
|
||||
"\370\377\370\370\370\377\370\370\370\377\370\370\370\377\365\365\365\377"
|
||||
"\363\363\363\377\355\355\355\377\352\352\352\377\344\344\344\377\337\337"
|
||||
"\337\377\332\332\332\377\332\332\332\377\337\337\337\377\337\337\337\377"
|
||||
"\344\344\344\377\355\355\355\377\362\362\362\377\360\360\360\377\365\365"
|
||||
"\365\377\363\363\363\377\363\363\363\377\363\363\363\377\362\362\362\377"
|
||||
"\362\362\362\377\360\360\360\377\360\360\360\377\354\354\354\377\354\354"
|
||||
"\354\377\346\346\346\377\346\346\346\377\346\346\346\377\346\346\346\377"
|
||||
"\354\354\354\377\354\354\354\377\360\360\360\377\360\360\360\377\363\363"
|
||||
"\363\377\357\357\357\377\362\362\362\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\366\366\366\377\360\360\360\377\360\360\360\377\360\360"
|
||||
"\360\377\363\363\363\377\365\365\365\377\365\365\365\377\365\365\365\377"
|
||||
"\365\365\365\377\365\365\365\377\365\365\365\377\365\365\365\377\360\360"
|
||||
"\360\377\360\360\360\377\357\357\357\377\354\354\354\377\351\351\351\377"
|
||||
"\351\351\351\377\357\357\357\377\362\362\362\377\370\370\370\377\370\370"
|
||||
"\370\377\370\370\370\377\370\370\370\377\370\370\370\377\370\370\370\377"
|
||||
"\365\365\365\377\365\365\365\377\360\360\360\377\352\352\352\377\344\344"
|
||||
"\344\377\337\337\337\377\332\332\332\377\332\332\332\377\337\337\337\377"
|
||||
"\337\337\337\377\344\344\344\377\355\355\355\377\362\362\362\377\360\360"
|
||||
"\360\377\365\365\365\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\362\362\362\377\362\362\362\377\360\360\360\377\360\360\360\377\354\354"
|
||||
"\354\377\354\354\354\377\346\346\346\377\346\346\346\377\346\346\346\377"
|
||||
"\346\346\346\377\354\354\354\377\354\354\354\377\360\360\360\377\360\360"
|
||||
"\360\377\362\362\362\377\355\355\355\377\362\362\362\377\362\362\362\377"
|
||||
"\362\362\362\377\366\366\366\377\366\366\366\377\363\363\363\377\365\365"
|
||||
"\365\377\365\365\365\377\365\365\365\377\365\365\365\377\371\371\371\377"
|
||||
"\371\371\371\377\371\371\371\377\371\371\371\377\365\365\365\377\365\365"
|
||||
"\365\377\360\360\360\377\363\363\363\377\357\357\357\377\357\357\357\377"
|
||||
"\354\354\354\377\357\357\357\377\357\357\357\377\360\360\360\377\365\365"
|
||||
"\365\377\370\370\370\377\376\376\376\377\376\376\376\377\370\370\370\377"
|
||||
"\370\370\370\377\365\365\365\377\363\363\363\377\360\360\360\377\352\352"
|
||||
"\352\377\344\344\344\377\337\337\337\377\332\332\332\377\332\332\332\377"
|
||||
"\337\337\337\377\337\337\337\377\344\344\344\377\355\355\355\377\362\362"
|
||||
"\362\377\362\362\362\377\365\365\365\377\363\363\363\377\363\363\363\377"
|
||||
"\363\363\363\377\357\357\357\377\357\357\357\377\360\360\360\377\360\360"
|
||||
"\360\377\354\354\354\377\354\354\354\377\346\346\346\377\346\346\346\377"
|
||||
"\346\346\346\377\346\346\346\377\354\354\354\377\354\354\354\377\360\360"
|
||||
"\360\377\360\360\360\377\357\357\357\377\355\355\355\377\362\362\362\377"
|
||||
"\362\362\362\377\362\362\362\377\362\362\362\377\366\366\366\377\362\362"
|
||||
"\362\377\363\363\363\377\363\363\363\377\363\363\363\377\370\370\370\377"
|
||||
"\370\370\370\377\370\370\370\377\370\370\370\377\371\371\371\377\365\365"
|
||||
"\365\377\365\365\365\377\360\360\360\377\363\363\363\377\357\357\357\377"
|
||||
"\357\357\357\377\357\357\357\377\357\357\357\377\360\360\360\377\360\360"
|
||||
"\360\377\365\365\365\377\366\366\366\377\376\376\376\377\376\376\376\377"
|
||||
"\370\370\370\377\370\370\370\377\365\365\365\377\360\360\360\377\355\355"
|
||||
"\355\377\343\343\343\377\337\337\337\377\337\337\337\377\332\332\332\377"
|
||||
"\332\332\332\377\337\337\337\377\337\337\337\377\344\344\344\377\355\355"
|
||||
"\355\377\362\362\362\377\362\362\362\377\365\365\365\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\357\357\357\377\357\357\357\377\360\360"
|
||||
"\360\377\360\360\360\377\354\354\354\377\354\354\354\377\346\346\346\377"
|
||||
"\346\346\346\377\346\346\346\377\346\346\346\377\354\354\354\377\354\354"
|
||||
"\354\377\360\360\360\377\360\360\360\377\357\357\357\377\357\357\357\377"
|
||||
"\362\362\362\377\362\362\362\377\362\362\362\377\362\362\362\377\366\366"
|
||||
"\366\377\357\357\357\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\370\370\370\377\370\370\370\377\370\370\370\377\370\370\370\377\370\370"
|
||||
"\370\377\363\363\363\377\363\363\363\377\360\360\360\377\360\360\360\377"
|
||||
"\357\357\357\377\354\354\354\377\354\354\354\377\357\357\357\377\360\360"
|
||||
"\360\377\360\360\360\377\365\365\365\377\365\365\365\377\376\376\376\377"
|
||||
"\370\370\370\377\370\370\370\377\370\370\370\377\365\365\365\377\360\360"
|
||||
"\360\377\355\355\355\377\343\343\343\377\337\337\337\377\335\335\335\377"
|
||||
"\332\332\332\377\332\332\332\377\335\335\335\377\337\337\337\377\344\344"
|
||||
"\344\377\355\355\355\377\362\362\362\377\362\362\362\377\363\363\363\377"
|
||||
"\363\363\363\377\363\363\363\377\360\360\360\377\360\360\360\377\360\360"
|
||||
"\360\377\354\354\354\377\357\357\357\377\354\354\354\377\354\354\354\377"
|
||||
"\346\346\346\377\346\346\346\377\346\346\346\377\346\346\346\377\354\354"
|
||||
"\354\377\354\354\354\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\355\355\355\377\355\355\355\377\362\362\362\377\362\362"
|
||||
"\362\377\366\366\366\377\355\355\355\377\360\360\360\377\362\362\362\377"
|
||||
"\362\362\362\377\362\362\362\377\366\366\366\377\370\370\370\377\370\370"
|
||||
"\370\377\370\370\370\377\363\363\363\377\363\363\363\377\360\360\360\377"
|
||||
"\357\357\357\377\354\354\354\377\354\354\354\377\354\354\354\377\354\354"
|
||||
"\354\377\357\357\357\377\360\360\360\377\365\365\365\377\365\365\365\377"
|
||||
"\371\371\371\377\370\370\370\377\370\370\370\377\366\366\366\377\362\362"
|
||||
"\362\377\360\360\360\377\355\355\355\377\343\343\343\377\337\337\337\377"
|
||||
"\335\335\335\377\332\332\332\377\332\332\332\377\335\335\335\377\335\335"
|
||||
"\335\377\342\342\342\377\352\352\352\377\357\357\357\377\362\362\362\377"
|
||||
"\363\363\363\377\360\360\360\377\360\360\360\377\360\360\360\377\360\360"
|
||||
"\360\377\360\360\360\377\354\354\354\377\357\357\357\377\354\354\354\377"
|
||||
"\354\354\354\377\346\346\346\377\346\346\346\377\346\346\346\377\346\346"
|
||||
"\346\377\354\354\354\377\354\354\354\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\357\357\357\377\355\355\355\377\355\355\355\377\362\362"
|
||||
"\362\377\362\362\362\377\363\363\363\377\352\352\352\377\355\355\355\377"
|
||||
"\355\355\355\377\362\362\362\377\362\362\362\377\362\362\362\377\362\362"
|
||||
"\362\377\363\363\363\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\357\357\357\377\357\357\357\377\351\351\351\377\351\351\351\377\346\346"
|
||||
"\346\377\351\351\351\377\357\357\357\377\360\360\360\377\365\365\365\377"
|
||||
"\365\365\365\377\365\365\365\377\370\370\370\377\363\363\363\377\363\363"
|
||||
"\363\377\362\362\362\377\360\360\360\377\355\355\355\377\343\343\343\377"
|
||||
"\337\337\337\377\335\335\335\377\327\327\327\377\327\327\327\377\335\335"
|
||||
"\335\377\335\335\335\377\342\342\342\377\352\352\352\377\357\357\357\377"
|
||||
"\357\357\357\377\363\363\363\377\360\360\360\377\360\360\360\377\360\360"
|
||||
"\360\377\357\357\357\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\351\351\351\377\351\351\351\377\346\346\346\377\340\340\340\377\340\340"
|
||||
"\340\377\346\346\346\377\351\351\351\377\351\351\351\377\357\357\357\377"
|
||||
"\354\354\354\377\352\352\352\377\352\352\352\377\355\355\355\377\355\355"
|
||||
"\355\377\362\362\362\377\362\362\362\377\360\360\360\377\355\355\355\377"
|
||||
"\352\352\352\377\355\355\355\377\360\360\360\377\362\362\362\377\362\362"
|
||||
"\362\377\362\362\362\377\363\363\363\377\363\363\363\377\363\363\363\377"
|
||||
"\362\362\362\377\354\354\354\377\354\354\354\377\351\351\351\377\351\351"
|
||||
"\351\377\346\346\346\377\346\346\346\377\354\354\354\377\357\357\357\377"
|
||||
"\363\363\363\377\365\365\365\377\365\365\365\377\363\363\363\377\362\362"
|
||||
"\362\377\362\362\362\377\355\355\355\377\357\357\357\377\354\354\354\377"
|
||||
"\343\343\343\377\335\335\335\377\335\335\335\377\327\327\327\377\327\327"
|
||||
"\327\377\335\335\335\377\335\335\335\377\342\342\342\377\352\352\352\377"
|
||||
"\357\357\357\377\357\357\357\377\363\363\363\377\360\360\360\377\360\360"
|
||||
"\360\377\360\360\360\377\357\357\357\377\357\357\357\377\357\357\357\377"
|
||||
"\357\357\357\377\351\351\351\377\346\346\346\377\340\340\340\377\340\340"
|
||||
"\340\377\340\340\340\377\340\340\340\377\346\346\346\377\351\351\351\377"
|
||||
"\357\357\357\377\357\357\357\377\352\352\352\377\352\352\352\377\354\354"
|
||||
"\354\377\357\357\357\377\357\357\357\377\360\360\360\377\360\360\360\377"
|
||||
"\352\352\352\377\355\355\355\377\355\355\355\377\355\355\355\377\355\355"
|
||||
"\355\377\357\357\357\377\355\355\355\377\357\357\357\377\362\362\362\377"
|
||||
"\357\357\357\377\362\362\362\377\354\354\354\377\354\354\354\377\346\346"
|
||||
"\346\377\346\346\346\377\344\344\344\377\344\344\344\377\354\354\354\377"
|
||||
"\357\357\357\377\363\363\363\377\360\360\360\377\360\360\360\377\363\363"
|
||||
"\363\377\362\362\362\377\362\362\362\377\355\355\355\377\357\357\357\377"
|
||||
"\354\354\354\377\340\340\340\377\335\335\335\377\335\335\335\377\327\327"
|
||||
"\327\377\327\327\327\377\335\335\335\377\335\335\335\377\342\342\342\377"
|
||||
"\352\352\352\377\357\357\357\377\357\357\357\377\363\363\363\377\357\357"
|
||||
"\357\377\357\357\357\377\357\357\357\377\360\360\360\377\360\360\360\377"
|
||||
"\357\357\357\377\357\357\357\377\351\351\351\377\346\346\346\377\340\340"
|
||||
"\340\377\340\340\340\377\340\340\340\377\340\340\340\377\346\346\346\377"
|
||||
"\351\351\351\377\357\357\357\377\354\354\354\377\355\355\355\377\355\355"
|
||||
"\355\377\354\354\354\377\354\354\354\377\355\355\355\377\352\352\352\377"
|
||||
"\352\352\352\377",
|
||||
};
|
||||
|
||||
@@ -0,0 +1,922 @@
|
||||
/* GIMP RGBA C-Source image dump (text_silk.c) */
|
||||
|
||||
static const struct {
|
||||
unsigned int width;
|
||||
unsigned int height;
|
||||
unsigned int bytes_per_pixel; /* 2:RGB16, 3:RGB, 4:RGBA */
|
||||
unsigned char pixel_data[64 * 64 * 4 + 1];
|
||||
} text_silk = {
|
||||
64, 64, 4,
|
||||
"\377\377\377\366\377\377\377\372\377\377\377\375\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\376\377\377\377\377\377\377\377\374\377\377"
|
||||
"\377\366\377\377\377\365\377\377\377\364\377\377\377\366\377\377\377\370"
|
||||
"\377\377\377\365\377\377\377\362\377\377\377\364\377\377\377\366\377\377"
|
||||
"\377\370\377\377\377\372\377\377\377\363\377\377\377\354\377\377\377\350"
|
||||
"\377\377\377\351\377\377\377\352\377\377\377\354\377\377\377\356\377\377"
|
||||
"\377\361\377\377\377\366\377\377\377\372\377\377\377\375\377\377\377\375"
|
||||
"\377\377\377\373\377\377\377\365\377\377\377\366\377\377\377\371\377\377"
|
||||
"\377\372\377\377\377\374\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\366\377\377"
|
||||
"\377\357\377\377\377\350\377\377\377\346\377\377\377\342\377\377\377\335"
|
||||
"\377\377\377\346\377\377\377\351\377\377\377\351\377\377\377\357\377\377"
|
||||
"\377\357\377\377\377\363\377\377\377\363\377\377\377\361\377\377\377\361"
|
||||
"\377\377\377\362\377\377\377\357\377\377\377\365\377\377\377\372\377\377"
|
||||
"\377\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\377\377\377"
|
||||
"\377\375\377\377\377\370\377\377\377\365\377\377\377\364\377\377\377\367"
|
||||
"\377\377\377\370\377\377\377\363\377\377\377\357\377\377\377\356\377\377"
|
||||
"\377\360\377\377\377\364\377\377\377\370\377\377\377\365\377\377\377\355"
|
||||
"\377\377\377\350\377\377\377\347\377\377\377\344\377\377\377\344\377\377"
|
||||
"\377\352\377\377\377\357\377\377\377\362\377\377\377\370\377\377\377\374"
|
||||
"\377\377\377\372\377\377\377\366\377\377\377\362\377\377\377\363\377\377"
|
||||
"\377\363\377\377\377\363\377\377\377\365\377\377\377\371\377\377\377\375"
|
||||
"\377\377\377\375\377\377\377\376\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\373\377\377\377\363\377\377\377\352\377\377\377\347\377\377\377\346"
|
||||
"\377\377\377\342\377\377\377\345\377\377\377\344\377\377\377\340\377\377"
|
||||
"\377\344\377\377\377\351\377\377\377\355\377\377\377\356\377\377\377\357"
|
||||
"\377\377\377\354\377\377\377\354\377\377\377\356\377\377\377\364\377\377"
|
||||
"\377\371\377\377\377\375\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\376\377\377\377\374\377\377\377\373\377\377\377\372"
|
||||
"\377\377\377\374\377\377\377\372\377\377\377\362\377\377\377\360\377\377"
|
||||
"\377\356\377\377\377\357\377\377\377\366\377\377\377\367\377\377\377\361"
|
||||
"\377\377\377\351\377\377\377\346\377\377\377\350\377\377\377\344\377\377"
|
||||
"\377\340\377\377\377\347\377\377\377\360\377\377\377\361\377\377\377\365"
|
||||
"\377\377\377\370\377\377\377\365\377\377\377\362\377\377\377\356\377\377"
|
||||
"\377\355\377\377\377\355\377\377\377\354\377\377\377\356\377\377\377\360"
|
||||
"\377\377\377\364\377\377\377\370\377\377\377\372\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\372\377\377\377\364\377\377\377\352\377\377\377\342"
|
||||
"\377\377\377\342\377\377\377\340\377\377\377\342\377\377\377\342\377\377"
|
||||
"\377\333\377\377\377\327\377\377\377\336\377\377\377\345\377\377\377\352"
|
||||
"\377\377\377\357\377\377\377\355\377\377\377\354\377\377\377\357\377\377"
|
||||
"\377\364\377\377\377\371\377\377\377\374\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\376\377\377\377\372\377\377\377\366\377\377"
|
||||
"\377\363\377\377\377\362\377\377\377\365\377\377\377\370\377\377\377\365"
|
||||
"\377\377\377\357\377\377\377\352\377\377\377\351\377\377\377\355\377\377"
|
||||
"\377\351\377\377\377\343\377\377\377\347\377\377\377\360\377\377\377\364"
|
||||
"\377\377\377\366\377\377\377\365\377\377\377\363\377\377\377\360\377\377"
|
||||
"\377\351\377\377\377\346\377\377\377\352\377\377\377\353\377\377\377\347"
|
||||
"\377\377\377\352\377\377\377\361\377\377\377\365\377\377\377\370\377\377"
|
||||
"\377\376\377\377\377\376\377\377\377\366\377\377\377\361\377\377\377\353"
|
||||
"\377\377\377\336\377\377\377\332\377\377\377\334\377\377\377\335\377\377"
|
||||
"\377\336\377\377\377\327\377\377\377\316\377\377\377\322\377\377\377\333"
|
||||
"\377\377\377\344\377\377\377\357\377\377\377\357\377\377\377\357\377\377"
|
||||
"\377\361\377\377\377\364\377\377\377\372\377\377\377\375\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\366\377\377"
|
||||
"\377\365\377\377\377\365\377\377\377\370\377\377\377\374\377\377\377\374"
|
||||
"\377\377\377\366\377\377\377\360\377\377\377\353\377\377\377\353\377\377"
|
||||
"\377\361\377\377\377\356\377\377\377\353\377\377\377\357\377\377\377\365"
|
||||
"\377\377\377\371\377\377\377\371\377\377\377\367\377\377\377\361\377\377"
|
||||
"\377\354\377\377\377\351\377\377\377\351\377\377\377\352\377\377\377\350"
|
||||
"\377\377\377\343\377\377\377\354\377\377\377\366\377\377\377\373\377\377"
|
||||
"\377\374\377\377\377\375\377\377\377\374\377\377\377\363\377\377\377\351"
|
||||
"\377\377\377\342\377\377\377\332\377\377\377\333\377\377\377\340\377\377"
|
||||
"\377\341\377\377\377\340\377\377\377\326\377\377\377\312\377\377\377\317"
|
||||
"\377\377\377\327\377\377\377\343\377\377\377\357\377\377\377\360\377\377"
|
||||
"\377\361\377\377\377\357\377\377\377\364\377\377\377\372\377\377\377\376"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\372\377\377\377\371\377\377\377\372\377\377\377\374\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\371\377\377\377\357\377\377\377\355\377\377"
|
||||
"\377\360\377\377\377\365\377\377\377\365\377\377\377\362\377\377\377\365"
|
||||
"\377\377\377\372\377\377\377\374\377\377\377\372\377\377\377\366\377\377"
|
||||
"\377\361\377\377\377\360\377\377\377\356\377\377\377\356\377\377\377\353"
|
||||
"\377\377\377\347\377\377\377\347\377\377\377\361\377\377\377\372\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\373\377\377\377\365\377\377\377\355"
|
||||
"\377\377\377\345\377\377\377\335\377\377\377\333\377\377\377\337\377\377"
|
||||
"\377\344\377\377\377\347\377\377\377\343\377\377\377\330\377\377\377\317"
|
||||
"\377\377\377\317\377\377\377\322\377\377\377\337\377\377\377\352\377\377"
|
||||
"\377\354\377\377\377\356\377\377\377\364\377\377\377\367\377\377\377\372"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\376\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\376\377\377\377\376\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\375\377\377\377\373\377\377\377\370\377\377\377\363\377\377"
|
||||
"\377\361\377\377\377\363\377\377\377\366\377\377\377\367\377\377\377\365"
|
||||
"\377\377\377\371\377\377\377\373\377\377\377\371\377\377\377\370\377\377"
|
||||
"\377\364\377\377\377\360\377\377\377\361\377\377\377\357\377\377\377\356"
|
||||
"\377\377\377\357\377\377\377\357\377\377\377\361\377\377\377\366\377\377"
|
||||
"\377\372\377\377\377\375\377\377\377\377\377\377\377\370\377\377\377\361"
|
||||
"\377\377\377\355\377\377\377\351\377\377\377\342\377\377\377\337\377\377"
|
||||
"\377\340\377\377\377\345\377\377\377\350\377\377\377\343\377\377\377\334"
|
||||
"\377\377\377\325\377\377\377\320\377\377\377\316\377\377\377\335\377\377"
|
||||
"\377\351\377\377\377\356\377\377\377\361\377\377\377\370\377\377\377\372"
|
||||
"\377\377\377\375\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\376\377\377\377\375\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\372\377\377\377\365\377\377\377\363\377\377"
|
||||
"\377\365\377\377\377\363\377\377\377\363\377\377\377\366\377\377\377\366"
|
||||
"\377\377\377\370\377\377\377\374\377\377\377\372\377\377\377\364\377\377"
|
||||
"\377\361\377\377\377\357\377\377\377\354\377\377\377\356\377\377\377\353"
|
||||
"\377\377\377\355\377\377\377\362\377\377\377\367\377\377\377\373\377\377"
|
||||
"\377\375\377\377\377\374\377\377\377\374\377\377\377\375\377\377\377\371"
|
||||
"\377\377\377\363\377\377\377\356\377\377\377\350\377\377\377\343\377\377"
|
||||
"\377\342\377\377\377\344\377\377\377\350\377\377\377\350\377\377\377\346"
|
||||
"\377\377\377\340\377\377\377\333\377\377\377\330\377\377\377\331\377\377"
|
||||
"\377\342\377\377\377\354\377\377\377\362\377\377\377\367\377\377\377\366"
|
||||
"\377\377\377\366\377\377\377\373\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\376\377\377\377\372\377\377\377\374"
|
||||
"\377\377\377\375\377\377\377\373\377\377\377\370\377\377\377\364\377\377"
|
||||
"\377\361\377\377\377\365\377\377\377\365\377\377\377\365\377\377\377\367"
|
||||
"\377\377\377\365\377\377\377\370\377\377\377\373\377\377\377\372\377\377"
|
||||
"\377\366\377\377\377\357\377\377\377\351\377\377\377\351\377\377\377\354"
|
||||
"\377\377\377\352\377\377\377\360\377\377\377\363\377\377\377\370\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\370\377\377\377\363\377\377\377\356\377\377\377\350\377\377"
|
||||
"\377\344\377\377\377\342\377\377\377\343\377\377\377\352\377\377\377\354"
|
||||
"\377\377\377\352\377\377\377\343\377\377\377\340\377\377\377\335\377\377"
|
||||
"\377\340\377\377\377\346\377\377\377\356\377\377\377\362\377\377\377\367"
|
||||
"\377\377\377\363\377\377\377\361\377\377\377\367\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\374\377\377\377\370\377\377\377\366"
|
||||
"\377\377\377\372\377\377\377\372\377\377\377\367\377\377\377\367\377\377"
|
||||
"\377\366\377\377\377\365\377\377\377\366\377\377\377\362\377\377\377\361"
|
||||
"\377\377\377\364\377\377\377\364\377\377\377\370\377\377\377\372\377\377"
|
||||
"\377\374\377\377\377\373\377\377\377\363\377\377\377\355\377\377\377\353"
|
||||
"\377\377\377\352\377\377\377\354\377\377\377\364\377\377\377\367\377\377"
|
||||
"\377\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\372\377\377\377\362\377\377\377\356\377\377"
|
||||
"\377\350\377\377\377\346\377\377\377\342\377\377\377\342\377\377\377\353"
|
||||
"\377\377\377\361\377\377\377\356\377\377\377\353\377\377\377\346\377\377"
|
||||
"\377\337\377\377\377\341\377\377\377\351\377\377\377\361\377\377\377\362"
|
||||
"\377\377\377\364\377\377\377\361\377\377\377\360\377\377\377\370\377\377"
|
||||
"\377\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\375\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\372"
|
||||
"\377\377\377\365\377\377\377\364\377\377\377\365\377\377\377\364\377\377"
|
||||
"\377\364\377\377\377\364\377\377\377\364\377\377\377\361\377\377\377\352"
|
||||
"\377\377\377\354\377\377\377\357\377\377\377\362\377\377\377\372\377\377"
|
||||
"\377\376\377\377\377\375\377\377\377\373\377\377\377\365\377\377\377\361"
|
||||
"\377\377\377\363\377\377\377\362\377\377\377\363\377\377\377\370\377\377"
|
||||
"\377\373\377\377\377\376\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\363\377\377"
|
||||
"\377\353\377\377\377\346\377\377\377\346\377\377\377\347\377\377\377\352"
|
||||
"\377\377\377\356\377\377\377\361\377\377\377\356\377\377\377\357\377\377"
|
||||
"\377\354\377\377\377\350\377\377\377\350\377\377\377\360\377\377\377\366"
|
||||
"\377\377\377\363\377\377\377\362\377\377\377\361\377\377\377\364\377\377"
|
||||
"\377\374\377\377\377\376\377\377\377\376\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\374\377\377"
|
||||
"\377\377\377\377\377\375\377\377\377\374\377\377\377\375\377\377\377\376"
|
||||
"\377\377\377\374\377\377\377\366\377\377\377\361\377\377\377\363\377\377"
|
||||
"\377\366\377\377\377\365\377\377\377\363\377\377\377\361\377\377\377\355"
|
||||
"\377\377\377\344\377\377\377\351\377\377\377\355\377\377\377\360\377\377"
|
||||
"\377\372\377\377\377\377\377\377\377\377\377\377\377\372\377\377\377\366"
|
||||
"\377\377\377\367\377\377\377\370\377\377\377\371\377\377\377\371\377\377"
|
||||
"\377\373\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\377\377"
|
||||
"\377\366\377\377\377\357\377\377\377\351\377\377\377\350\377\377\377\354"
|
||||
"\377\377\377\360\377\377\377\361\377\377\377\363\377\377\377\357\377\377"
|
||||
"\377\361\377\377\377\357\377\377\377\355\377\377\377\360\377\377\377\363"
|
||||
"\377\377\377\365\377\377\377\365\377\377\377\364\377\377\377\370\377\377"
|
||||
"\377\370\377\377\377\375\377\377\377\375\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\375\377\377"
|
||||
"\377\372\377\377\377\376\377\377\377\376\377\377\377\376\377\377\377\377"
|
||||
"\377\377\377\376\377\377\377\372\377\377\377\365\377\377\377\362\377\377"
|
||||
"\377\361\377\377\377\363\377\377\377\365\377\377\377\367\377\377\377\363"
|
||||
"\377\377\377\353\377\377\377\341\377\377\377\345\377\377\377\356\377\377"
|
||||
"\377\365\377\377\377\372\377\377\377\377\377\377\377\377\377\377\377\374"
|
||||
"\377\377\377\367\377\377\377\371\377\377\377\372\377\377\377\375\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\375\377\377\377\370\377\377\377\363\377\377\377\357\377\377\377\356"
|
||||
"\377\377\377\357\377\377\377\357\377\377\377\360\377\377\377\362\377\377"
|
||||
"\377\357\377\377\377\361\377\377\377\356\377\377\377\355\377\377\377\365"
|
||||
"\377\377\377\367\377\377\377\366\377\377\377\372\377\377\377\373\377\377"
|
||||
"\377\376\377\377\377\374\377\377\377\376\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\374\377\377\377\371\377\377\377\375\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\374\377\377\377\370\377\377\377\364\377\377"
|
||||
"\377\361\377\377\377\356\377\377\377\355\377\377\377\362\377\377\377\365"
|
||||
"\377\377\377\357\377\377\377\353\377\377\377\344\377\377\377\344\377\377"
|
||||
"\377\353\377\377\377\365\377\377\377\374\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\370\377\377\377\367\377\377\377\371\377\377"
|
||||
"\377\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\372\377\377"
|
||||
"\377\372\377\377\377\371\377\377\377\370\377\377\377\364\377\377\377\362"
|
||||
"\377\377\377\361\377\377\377\357\377\377\377\356\377\377\377\354\377\377"
|
||||
"\377\357\377\377\377\357\377\377\377\361\377\377\377\361\377\377\377\361"
|
||||
"\377\377\377\366\377\377\377\373\377\377\377\376\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\375\377\377\377\374\377\377\377\376\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\376\377\377\377\376\377\377\377\374\377\377\377\376\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\372\377\377\377\370\377\377\377\367\377\377"
|
||||
"\377\365\377\377\377\362\377\377\377\356\377\377\377\355\377\377\377\356"
|
||||
"\377\377\377\355\377\377\377\350\377\377\377\352\377\377\377\355\377\377"
|
||||
"\377\354\377\377\377\355\377\377\377\363\377\377\377\374\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\372\377\377\377\371\377\377"
|
||||
"\377\372\377\377\377\374\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\374\377\377"
|
||||
"\377\364\377\377\377\361\377\377\377\362\377\377\377\365\377\377\377\366"
|
||||
"\377\377\377\364\377\377\377\361\377\377\377\356\377\377\377\355\377\377"
|
||||
"\377\353\377\377\377\361\377\377\377\360\377\377\377\356\377\377\377\362"
|
||||
"\377\377\377\363\377\377\377\367\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\372\377\377\377\365\377\377\377\372"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\376\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\372\377\377\377\365\377\377\377\366\377\377"
|
||||
"\377\366\377\377\377\364\377\377\377\363\377\377\377\361\377\377\377\360"
|
||||
"\377\377\377\357\377\377\377\351\377\377\377\350\377\377\377\354\377\377"
|
||||
"\377\361\377\377\377\364\377\377\377\364\377\377\377\364\377\377\377\371"
|
||||
"\377\377\377\373\377\377\377\373\377\377\377\373\377\377\377\370\377\377"
|
||||
"\377\371\377\377\377\374\377\377\377\375\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\373\377\377"
|
||||
"\377\370\377\377\377\362\377\377\377\356\377\377\377\356\377\377\377\361"
|
||||
"\377\377\377\365\377\377\377\364\377\377\377\361\377\377\377\360\377\377"
|
||||
"\377\360\377\377\377\361\377\377\377\365\377\377\377\361\377\377\377\353"
|
||||
"\377\377\377\357\377\377\377\365\377\377\377\372\377\377\377\376\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\376\377\377\377\366\377\377\377\357"
|
||||
"\377\377\377\365\377\377\377\372\377\377\377\373\377\377\377\373\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\376\377\377\377\374\377\377\377\367\377\377\377\363\377\377"
|
||||
"\377\366\377\377\377\366\377\377\377\364\377\377\377\367\377\377\377\365"
|
||||
"\377\377\377\362\377\377\377\363\377\377\377\353\377\377\377\353\377\377"
|
||||
"\377\355\377\377\377\362\377\377\377\366\377\377\377\365\377\377\377\363"
|
||||
"\377\377\377\363\377\377\377\365\377\377\377\363\377\377\377\366\377\377"
|
||||
"\377\363\377\377\377\362\377\377\377\370\377\377\377\372\377\377\377\372"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\375\377\377"
|
||||
"\377\374\377\377\377\367\377\377\377\363\377\377\377\357\377\377\377\355"
|
||||
"\377\377\377\362\377\377\377\366\377\377\377\367\377\377\377\364\377\377"
|
||||
"\377\362\377\377\377\357\377\377\377\360\377\377\377\361\377\377\377\356"
|
||||
"\377\377\377\347\377\377\377\350\377\377\377\357\377\377\377\366\377\377"
|
||||
"\377\370\377\377\377\370\377\377\377\372\377\377\377\373\377\377\377\357"
|
||||
"\377\377\377\351\377\377\377\356\377\377\377\364\377\377\377\370\377\377"
|
||||
"\377\373\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\375\377\377\377\374\377\377\377\370\377\377"
|
||||
"\377\365\377\377\377\364\377\377\377\362\377\377\377\362\377\377\377\365"
|
||||
"\377\377\377\364\377\377\377\365\377\377\377\365\377\377\377\356\377\377"
|
||||
"\377\353\377\377\377\356\377\377\377\364\377\377\377\366\377\377\377\365"
|
||||
"\377\377\377\363\377\377\377\357\377\377\377\355\377\377\377\354\377\377"
|
||||
"\377\353\377\377\377\352\377\377\377\353\377\377\377\362\377\377\377\370"
|
||||
"\377\377\377\373\377\377\377\376\377\377\377\376\377\377\377\372\377\377"
|
||||
"\377\374\377\377\377\375\377\377\377\372\377\377\377\366\377\377\377\362"
|
||||
"\377\377\377\361\377\377\377\366\377\377\377\372\377\377\377\367\377\377"
|
||||
"\377\364\377\377\377\357\377\377\377\352\377\377\377\355\377\377\377\352"
|
||||
"\377\377\377\346\377\377\377\343\377\377\377\344\377\377\377\351\377\377"
|
||||
"\377\355\377\377\377\355\377\377\377\356\377\377\377\362\377\377\377\364"
|
||||
"\377\377\377\353\377\377\377\344\377\377\377\346\377\377\377\352\377\377"
|
||||
"\377\357\377\377\377\371\377\377\377\376\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\374\377\377\377\372\377\377"
|
||||
"\377\370\377\377\377\365\377\377\377\362\377\377\377\357\377\377\377\355"
|
||||
"\377\377\377\355\377\377\377\354\377\377\377\362\377\377\377\365\377\377"
|
||||
"\377\362\377\377\377\356\377\377\377\357\377\377\377\364\377\377\377\363"
|
||||
"\377\377\377\362\377\377\377\362\377\377\377\356\377\377\377\356\377\377"
|
||||
"\377\355\377\377\377\351\377\377\377\351\377\377\377\353\377\377\377\357"
|
||||
"\377\377\377\370\377\377\377\373\377\377\377\374\377\377\377\375\377\377"
|
||||
"\377\370\377\377\377\370\377\377\377\372\377\377\377\372\377\377\377\371"
|
||||
"\377\377\377\367\377\377\377\366\377\377\377\370\377\377\377\370\377\377"
|
||||
"\377\361\377\377\377\356\377\377\377\350\377\377\377\346\377\377\377\353"
|
||||
"\377\377\377\347\377\377\377\337\377\377\377\342\377\377\377\346\377\377"
|
||||
"\377\347\377\377\377\350\377\377\377\350\377\377\377\350\377\377\377\355"
|
||||
"\377\377\377\361\377\377\377\351\377\377\377\340\377\377\377\340\377\377"
|
||||
"\377\343\377\377\377\353\377\377\377\367\377\377\377\374\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\376\377\377\377\372\377\377\377\371\377\377"
|
||||
"\377\370\377\377\377\372\377\377\377\372\377\377\377\363\377\377\377\356"
|
||||
"\377\377\377\350\377\377\377\346\377\377\377\344\377\377\377\353\377\377"
|
||||
"\377\363\377\377\377\363\377\377\377\356\377\377\377\355\377\377\377\361"
|
||||
"\377\377\377\360\377\377\377\361\377\377\377\361\377\377\377\357\377\377"
|
||||
"\377\360\377\377\377\361\377\377\377\360\377\377\377\355\377\377\377\353"
|
||||
"\377\377\377\360\377\377\377\367\377\377\377\371\377\377\377\371\377\377"
|
||||
"\377\370\377\377\377\365\377\377\377\366\377\377\377\370\377\377\377\372"
|
||||
"\377\377\377\370\377\377\377\367\377\377\377\371\377\377\377\370\377\377"
|
||||
"\377\365\377\377\377\355\377\377\377\344\377\377\377\337\377\377\377\341"
|
||||
"\377\377\377\344\377\377\377\342\377\377\377\340\377\377\377\340\377\377"
|
||||
"\377\342\377\377\377\342\377\377\377\346\377\377\377\347\377\377\377\346"
|
||||
"\377\377\377\351\377\377\377\354\377\377\377\342\377\377\377\334\377\377"
|
||||
"\377\337\377\377\377\344\377\377\377\360\377\377\377\370\377\377\377\371"
|
||||
"\377\377\377\372\377\377\377\372\377\377\377\365\377\377\377\367\377\377"
|
||||
"\377\370\377\377\377\371\377\377\377\375\377\377\377\374\377\377\377\365"
|
||||
"\377\377\377\356\377\377\377\344\377\377\377\334\377\377\377\332\377\377"
|
||||
"\377\342\377\377\377\354\377\377\377\354\377\377\377\350\377\377\377\350"
|
||||
"\377\377\377\354\377\377\377\354\377\377\377\357\377\377\377\361\377\377"
|
||||
"\377\361\377\377\377\363\377\377\377\363\377\377\377\362\377\377\377\360"
|
||||
"\377\377\377\355\377\377\377\355\377\377\377\360\377\377\377\363\377\377"
|
||||
"\377\365\377\377\377\363\377\377\377\365\377\377\377\367\377\377\377\367"
|
||||
"\377\377\377\372\377\377\377\370\377\377\377\365\377\377\377\366\377\377"
|
||||
"\377\363\377\377\377\357\377\377\377\350\377\377\377\335\377\377\377\326"
|
||||
"\377\377\377\332\377\377\377\333\377\377\377\332\377\377\377\336\377\377"
|
||||
"\377\333\377\377\377\340\377\377\377\347\377\377\377\352\377\377\377\347"
|
||||
"\377\377\377\346\377\377\377\347\377\377\377\346\377\377\377\340\377\377"
|
||||
"\377\336\377\377\377\337\377\377\377\350\377\377\377\363\377\377\377\371"
|
||||
"\377\377\377\367\377\377\377\365\377\377\377\364\377\377\377\363\377\377"
|
||||
"\377\366\377\377\377\366\377\377\377\367\377\377\377\373\377\377\377\373"
|
||||
"\377\377\377\365\377\377\377\362\377\377\377\346\377\377\377\325\377\377"
|
||||
"\377\322\377\377\377\332\377\377\377\346\377\377\377\347\377\377\377\345"
|
||||
"\377\377\377\346\377\377\377\346\377\377\377\347\377\377\377\352\377\377"
|
||||
"\377\353\377\377\377\360\377\377\377\365\377\377\377\365\377\377\377\365"
|
||||
"\377\377\377\362\377\377\377\360\377\377\377\357\377\377\377\353\377\377"
|
||||
"\377\357\377\377\377\364\377\377\377\366\377\377\377\371\377\377\377\371"
|
||||
"\377\377\377\370\377\377\377\372\377\377\377\371\377\377\377\362\377\377"
|
||||
"\377\362\377\377\377\357\377\377\377\351\377\377\377\344\377\377\377\330"
|
||||
"\377\377\377\316\377\377\377\322\377\377\377\327\377\377\377\327\377\377"
|
||||
"\377\326\377\377\377\325\377\377\377\335\377\377\377\350\377\377\377\354"
|
||||
"\377\377\377\352\377\377\377\350\377\377\377\344\377\377\377\343\377\377"
|
||||
"\377\340\377\377\377\344\377\377\377\346\377\377\377\356\377\377\377\366"
|
||||
"\377\377\377\371\377\377\377\365\377\377\377\362\377\377\377\362\377\377"
|
||||
"\377\363\377\377\377\364\377\377\377\364\377\377\377\365\377\377\377\370"
|
||||
"\377\377\377\371\377\377\377\363\377\377\377\362\377\377\377\353\377\377"
|
||||
"\377\336\377\377\377\325\377\377\377\330\377\377\377\343\377\377\377\344"
|
||||
"\377\377\377\343\377\377\377\343\377\377\377\341\377\377\377\347\377\377"
|
||||
"\377\354\377\377\377\356\377\377\377\363\377\377\377\366\377\377\377\367"
|
||||
"\377\377\377\371\377\377\377\365\377\377\377\361\377\377\377\363\377\377"
|
||||
"\377\355\377\377\377\356\377\377\377\364\377\377\377\372\377\377\377\374"
|
||||
"\377\377\377\374\377\377\377\374\377\377\377\373\377\377\377\370\377\377"
|
||||
"\377\363\377\377\377\364\377\377\377\360\377\377\377\350\377\377\377\340"
|
||||
"\377\377\377\317\377\377\377\306\377\377\377\322\377\377\377\327\377\377"
|
||||
"\377\325\377\377\377\324\377\377\377\326\377\377\377\334\377\377\377\344"
|
||||
"\377\377\377\351\377\377\377\353\377\377\377\354\377\377\377\352\377\377"
|
||||
"\377\344\377\377\377\347\377\377\377\351\377\377\377\354\377\377\377\360"
|
||||
"\377\377\377\370\377\377\377\372\377\377\377\366\377\377\377\363\377\377"
|
||||
"\377\361\377\377\377\364\377\377\377\370\377\377\377\370\377\377\377\371"
|
||||
"\377\377\377\370\377\377\377\364\377\377\377\361\377\377\377\362\377\377"
|
||||
"\377\355\377\377\377\344\377\377\377\333\377\377\377\327\377\377\377\335"
|
||||
"\377\377\377\341\377\377\377\342\377\377\377\342\377\377\377\343\377\377"
|
||||
"\377\352\377\377\377\360\377\377\377\364\377\377\377\366\377\377\377\370"
|
||||
"\377\377\377\372\377\377\377\372\377\377\377\365\377\377\377\365\377\377"
|
||||
"\377\365\377\377\377\356\377\377\377\355\377\377\377\363\377\377\377\372"
|
||||
"\377\377\377\374\377\377\377\375\377\377\377\377\377\377\377\375\377\377"
|
||||
"\377\373\377\377\377\367\377\377\377\365\377\377\377\361\377\377\377\346"
|
||||
"\377\377\377\327\377\377\377\310\377\377\377\302\377\377\377\316\377\377"
|
||||
"\377\326\377\377\377\325\377\377\377\332\377\377\377\341\377\377\377\342"
|
||||
"\377\377\377\344\377\377\377\351\377\377\377\354\377\377\377\361\377\377"
|
||||
"\377\361\377\377\377\353\377\377\377\357\377\377\377\356\377\377\377\356"
|
||||
"\377\377\377\356\377\377\377\365\377\377\377\367\377\377\377\364\377\377"
|
||||
"\377\364\377\377\377\364\377\377\377\366\377\377\377\373\377\377\377\372"
|
||||
"\377\377\377\372\377\377\377\372\377\377\377\364\377\377\377\357\377\377"
|
||||
"\377\356\377\377\377\347\377\377\377\335\377\377\377\333\377\377\377\325"
|
||||
"\377\377\377\333\377\377\377\344\377\377\377\351\377\377\377\350\377\377"
|
||||
"\377\351\377\377\377\355\377\377\377\362\377\377\377\365\377\377\377\367"
|
||||
"\377\377\377\372\377\377\377\372\377\377\377\367\377\377\377\361\377\377"
|
||||
"\377\365\377\377\377\366\377\377\377\362\377\377\377\356\377\377\377\363"
|
||||
"\377\377\377\372\377\377\377\371\377\377\377\372\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\376\377\377\377\371\377\377\377\364"
|
||||
"\377\377\377\347\377\377\377\322\377\377\377\307\377\377\377\303\377\377"
|
||||
"\377\312\377\377\377\331\377\377\377\333\377\377\377\340\377\377\377\345"
|
||||
"\377\377\377\347\377\377\377\350\377\377\377\353\377\377\377\357\377\377"
|
||||
"\377\363\377\377\377\365\377\377\377\361\377\377\377\366\377\377\377\364"
|
||||
"\377\377\377\363\377\377\377\364\377\377\377\367\377\377\377\370\377\377"
|
||||
"\377\365\377\377\377\365\377\377\377\365\377\377\377\367\377\377\377\374"
|
||||
"\377\377\377\373\377\377\377\374\377\377\377\374\377\377\377\366\377\377"
|
||||
"\377\355\377\377\377\350\377\377\377\337\377\377\377\327\377\377\377\324"
|
||||
"\377\377\377\317\377\377\377\333\377\377\377\347\377\377\377\351\377\377"
|
||||
"\377\351\377\377\377\356\377\377\377\364\377\377\377\366\377\377\377\370"
|
||||
"\377\377\377\372\377\377\377\372\377\377\377\370\377\377\377\366\377\377"
|
||||
"\377\364\377\377\377\365\377\377\377\367\377\377\377\366\377\377\377\361"
|
||||
"\377\377\377\361\377\377\377\366\377\377\377\367\377\377\377\370\377\377"
|
||||
"\377\373\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\373"
|
||||
"\377\377\377\362\377\377\377\350\377\377\377\333\377\377\377\317\377\377"
|
||||
"\377\307\377\377\377\305\377\377\377\322\377\377\377\335\377\377\377\343"
|
||||
"\377\377\377\351\377\377\377\354\377\377\377\354\377\377\377\356\377\377"
|
||||
"\377\363\377\377\377\367\377\377\377\372\377\377\377\372\377\377\377\374"
|
||||
"\377\377\377\371\377\377\377\370\377\377\377\371\377\377\377\371\377\377"
|
||||
"\377\372\377\377\377\371\377\377\377\367\377\377\377\365\377\377\377\366"
|
||||
"\377\377\377\372\377\377\377\373\377\377\377\376\377\377\377\376\377\377"
|
||||
"\377\364\377\377\377\355\377\377\377\347\377\377\377\337\377\377\377\335"
|
||||
"\377\377\377\331\377\377\377\324\377\377\377\334\377\377\377\343\377\377"
|
||||
"\377\346\377\377\377\354\377\377\377\360\377\377\377\364\377\377\377\366"
|
||||
"\377\377\377\370\377\377\377\373\377\377\377\370\377\377\377\364\377\377"
|
||||
"\377\365\377\377\377\367\377\377\377\365\377\377\377\366\377\377\377\365"
|
||||
"\377\377\377\362\377\377\377\361\377\377\377\360\377\377\377\361\377\377"
|
||||
"\377\366\377\377\377\373\377\377\377\377\377\377\377\377\377\377\377\373"
|
||||
"\377\377\377\364\377\377\377\353\377\377\377\350\377\377\377\342\377\377"
|
||||
"\377\325\377\377\377\320\377\377\377\314\377\377\377\315\377\377\377\332"
|
||||
"\377\377\377\342\377\377\377\352\377\377\377\362\377\377\377\363\377\377"
|
||||
"\377\362\377\377\377\365\377\377\377\370\377\377\377\372\377\377\377\376"
|
||||
"\377\377\377\372\377\377\377\372\377\377\377\367\377\377\377\371\377\377"
|
||||
"\377\374\377\377\377\373\377\377\377\373\377\377\377\372\377\377\377\366"
|
||||
"\377\377\377\367\377\377\377\370\377\377\377\367\377\377\377\373\377\377"
|
||||
"\377\373\377\377\377\365\377\377\377\354\377\377\377\347\377\377\377\345"
|
||||
"\377\377\377\343\377\377\377\336\377\377\377\336\377\377\377\342\377\377"
|
||||
"\377\344\377\377\377\353\377\377\377\361\377\377\377\361\377\377\377\361"
|
||||
"\377\377\377\364\377\377\377\366\377\377\377\366\377\377\377\364\377\377"
|
||||
"\377\364\377\377\377\366\377\377\377\370\377\377\377\367\377\377\377\366"
|
||||
"\377\377\377\365\377\377\377\365\377\377\377\365\377\377\377\362\377\377"
|
||||
"\377\356\377\377\377\363\377\377\377\374\377\377\377\374\377\377\377\372"
|
||||
"\377\377\377\364\377\377\377\353\377\377\377\347\377\377\377\354\377\377"
|
||||
"\377\351\377\377\377\341\377\377\377\337\377\377\377\332\377\377\377\324"
|
||||
"\377\377\377\327\377\377\377\340\377\377\377\351\377\377\377\363\377\377"
|
||||
"\377\371\377\377\377\370\377\377\377\367\377\377\377\366\377\377\377\366"
|
||||
"\377\377\377\371\377\377\377\372\377\377\377\374\377\377\377\367\377\377"
|
||||
"\377\370\377\377\377\373\377\377\377\374\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\374\377\377\377\373\377\377\377\367\377\377\377\363\377\377"
|
||||
"\377\366\377\377\377\365\377\377\377\360\377\377\377\347\377\377\377\344"
|
||||
"\377\377\377\350\377\377\377\344\377\377\377\336\377\377\377\340\377\377"
|
||||
"\377\347\377\377\377\350\377\377\377\357\377\377\377\362\377\377\377\363"
|
||||
"\377\377\377\365\377\377\377\362\377\377\377\361\377\377\377\361\377\377"
|
||||
"\377\362\377\377\377\365\377\377\377\367\377\377\377\367\377\377\377\370"
|
||||
"\377\377\377\367\377\377\377\370\377\377\377\367\377\377\377\365\377\377"
|
||||
"\377\367\377\377\377\365\377\377\377\363\377\377\377\370\377\377\377\367"
|
||||
"\377\377\377\365\377\377\377\361\377\377\377\351\377\377\377\347\377\377"
|
||||
"\377\353\377\377\377\355\377\377\377\354\377\377\377\355\377\377\377\347"
|
||||
"\377\377\377\343\377\377\377\344\377\377\377\350\377\377\377\355\377\377"
|
||||
"\377\364\377\377\377\372\377\377\377\372\377\377\377\371\377\377\377\370"
|
||||
"\377\377\377\370\377\377\377\367\377\377\377\372\377\377\377\370\377\377"
|
||||
"\377\364\377\377\377\362\377\377\377\370\377\377\377\374\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\376\377\377\377\370\377\377\377\363\377\377"
|
||||
"\377\363\377\377\377\366\377\377\377\363\377\377\377\353\377\377\377\345"
|
||||
"\377\377\377\342\377\377\377\346\377\377\377\350\377\377\377\345\377\377"
|
||||
"\377\344\377\377\377\350\377\377\377\352\377\377\377\361\377\377\377\364"
|
||||
"\377\377\377\364\377\377\377\365\377\377\377\357\377\377\377\351\377\377"
|
||||
"\377\355\377\377\377\364\377\377\377\367\377\377\377\366\377\377\377\367"
|
||||
"\377\377\377\371\377\377\377\370\377\377\377\371\377\377\377\370\377\377"
|
||||
"\377\366\377\377\377\371\377\377\377\372\377\377\377\365\377\377\377\365"
|
||||
"\377\377\377\364\377\377\377\357\377\377\377\356\377\377\377\353\377\377"
|
||||
"\377\347\377\377\377\352\377\377\377\360\377\377\377\364\377\377\377\365"
|
||||
"\377\377\377\363\377\377\377\363\377\377\377\360\377\377\377\357\377\377"
|
||||
"\377\362\377\377\377\371\377\377\377\374\377\377\377\374\377\377\377\374"
|
||||
"\377\377\377\372\377\377\377\371\377\377\377\371\377\377\377\370\377\377"
|
||||
"\377\361\377\377\377\356\377\377\377\354\377\377\377\365\377\377\377\372"
|
||||
"\377\377\377\374\377\377\377\377\377\377\377\371\377\377\377\361\377\377"
|
||||
"\377\361\377\377\377\361\377\377\377\362\377\377\377\364\377\377\377\363"
|
||||
"\377\377\377\355\377\377\377\350\377\377\377\346\377\377\377\350\377\377"
|
||||
"\377\355\377\377\377\355\377\377\377\355\377\377\377\356\377\377\377\361"
|
||||
"\377\377\377\360\377\377\377\355\377\377\377\353\377\377\377\351\377\377"
|
||||
"\377\345\377\377\377\347\377\377\377\357\377\377\377\365\377\377\377\367"
|
||||
"\377\377\377\366\377\377\377\371\377\377\377\371\377\377\377\374\377\377"
|
||||
"\377\376\377\377\377\373\377\377\377\373\377\377\377\373\377\377\377\371"
|
||||
"\377\377\377\372\377\377\377\370\377\377\377\361\377\377\377\356\377\377"
|
||||
"\377\353\377\377\377\353\377\377\377\361\377\377\377\365\377\377\377\370"
|
||||
"\377\377\377\371\377\377\377\372\377\377\377\374\377\377\377\367\377\377"
|
||||
"\377\363\377\377\377\365\377\377\377\373\377\377\377\373\377\377\377\375"
|
||||
"\377\377\377\375\377\377\377\374\377\377\377\374\377\377\377\374\377\377"
|
||||
"\377\370\377\377\377\355\377\377\377\347\377\377\377\352\377\377\377\363"
|
||||
"\377\377\377\365\377\377\377\371\377\377\377\372\377\377\377\363\377\377"
|
||||
"\377\355\377\377\377\357\377\377\377\361\377\377\377\362\377\377\377\370"
|
||||
"\377\377\377\375\377\377\377\366\377\377\377\356\377\377\377\351\377\377"
|
||||
"\377\347\377\377\377\356\377\377\377\361\377\377\377\356\377\377\377\355"
|
||||
"\377\377\377\354\377\377\377\352\377\377\377\351\377\377\377\343\377\377"
|
||||
"\377\342\377\377\377\342\377\377\377\345\377\377\377\354\377\377\377\364"
|
||||
"\377\377\377\367\377\377\377\366\377\377\377\370\377\377\377\372\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\375"
|
||||
"\377\377\377\375\377\377\377\377\377\377\377\374\377\377\377\366\377\377"
|
||||
"\377\360\377\377\377\355\377\377\377\360\377\377\377\365\377\377\377\367"
|
||||
"\377\377\377\372\377\377\377\374\377\377\377\375\377\377\377\375\377\377"
|
||||
"\377\374\377\377\377\372\377\377\377\371\377\377\377\371\377\377\377\373"
|
||||
"\377\377\377\375\377\377\377\374\377\377\377\375\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\366\377\377\377\353\377\377\377\346\377\377\377\351"
|
||||
"\377\377\377\357\377\377\377\361\377\377\377\367\377\377\377\370\377\377"
|
||||
"\377\363\377\377\377\356\377\377\377\357\377\377\377\365\377\377\377\367"
|
||||
"\377\377\377\374\377\377\377\377\377\377\377\374\377\377\377\366\377\377"
|
||||
"\377\361\377\377\377\356\377\377\377\361\377\377\377\360\377\377\377\352"
|
||||
"\377\377\377\353\377\377\377\352\377\377\377\352\377\377\377\354\377\377"
|
||||
"\377\343\377\377\377\337\377\377\377\337\377\377\377\346\377\377\377\356"
|
||||
"\377\377\377\364\377\377\377\366\377\377\377\367\377\377\377\371\377\377"
|
||||
"\377\372\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\377\377"
|
||||
"\377\366\377\377\377\363\377\377\377\364\377\377\377\365\377\377\377\366"
|
||||
"\377\377\377\370\377\377\377\375\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\372\377\377\377\366"
|
||||
"\377\377\377\371\377\377\377\375\377\377\377\374\377\377\377\373\377\377"
|
||||
"\377\375\377\377\377\375\377\377\377\361\377\377\377\345\377\377\377\343"
|
||||
"\377\377\377\350\377\377\377\355\377\377\377\357\377\377\377\363\377\377"
|
||||
"\377\366\377\377\377\366\377\377\377\363\377\377\377\364\377\377\377\366"
|
||||
"\377\377\377\370\377\377\377\374\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\375\377\377\377\370\377\377\377\365\377\377\377\365\377\377\377\360"
|
||||
"\377\377\377\354\377\377\377\356\377\377\377\356\377\377\377\354\377\377"
|
||||
"\377\354\377\377\377\347\377\377\377\340\377\377\377\337\377\377\377\347"
|
||||
"\377\377\377\354\377\377\377\361\377\377\377\362\377\377\377\361\377\377"
|
||||
"\377\365\377\377\377\372\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\370\377\377\377\367\377\377\377\367\377\377\377\366"
|
||||
"\377\377\377\371\377\377\377\374\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374"
|
||||
"\377\377\377\367\377\377\377\365\377\377\377\371\377\377\377\373\377\377"
|
||||
"\377\372\377\377\377\372\377\377\377\370\377\377\377\356\377\377\377\340"
|
||||
"\377\377\377\340\377\377\377\344\377\377\377\350\377\377\377\355\377\377"
|
||||
"\377\360\377\377\377\361\377\377\377\363\377\377\377\364\377\377\377\365"
|
||||
"\377\377\377\370\377\377\377\372\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\375\377\377\377\370\377\377\377\367\377\377\377\366"
|
||||
"\377\377\377\361\377\377\377\354\377\377\377\354\377\377\377\356\377\377"
|
||||
"\377\353\377\377\377\347\377\377\377\346\377\377\377\342\377\377\377\345"
|
||||
"\377\377\377\352\377\377\377\351\377\377\377\354\377\377\377\355\377\377"
|
||||
"\377\354\377\377\377\364\377\377\377\374\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\374\377\377\377\374\377\377\377\367"
|
||||
"\377\377\377\365\377\377\377\371\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\375\377\377\377\372\377\377\377\366\377\377\377\365\377\377"
|
||||
"\377\366\377\377\377\370\377\377\377\367\377\377\377\365\377\377\377\356"
|
||||
"\377\377\377\340\377\377\377\335\377\377\377\340\377\377\377\340\377\377"
|
||||
"\377\346\377\377\377\352\377\377\377\350\377\377\377\354\377\377\377\361"
|
||||
"\377\377\377\364\377\377\377\372\377\377\377\375\377\377\377\376\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\374\377\377\377\372"
|
||||
"\377\377\377\372\377\377\377\363\377\377\377\353\377\377\377\354\377\377"
|
||||
"\377\357\377\377\377\352\377\377\377\346\377\377\377\346\377\377\377\345"
|
||||
"\377\377\377\346\377\377\377\347\377\377\377\351\377\377\377\351\377\377"
|
||||
"\377\347\377\377\377\351\377\377\377\363\377\377\377\372\377\377\377\374"
|
||||
"\377\377\377\372\377\377\377\372\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\373\377\377\377\370\377\377\377\371\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\375\377\377\377\372\377\377\377\370\377\377\377\366\377\377"
|
||||
"\377\363\377\377\377\364\377\377\377\366\377\377\377\367\377\377\377\364"
|
||||
"\377\377\377\355\377\377\377\341\377\377\377\334\377\377\377\335\377\377"
|
||||
"\377\333\377\377\377\336\377\377\377\337\377\377\377\335\377\377\377\346"
|
||||
"\377\377\377\360\377\377\377\366\377\377\377\373\377\377\377\374\377\377"
|
||||
"\377\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\376\377\377\377\364\377\377\377\353\377\377"
|
||||
"\377\355\377\377\377\360\377\377\377\351\377\377\377\347\377\377\377\350"
|
||||
"\377\377\377\351\377\377\377\350\377\377\377\344\377\377\377\347\377\377"
|
||||
"\377\352\377\377\377\350\377\377\377\350\377\377\377\354\377\377\377\360"
|
||||
"\377\377\377\361\377\377\377\356\377\377\377\364\377\377\377\374\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\375\377\377\377\375\377\377\377\375\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\374\377\377\377\372\377\377\377\371\377\377\377\366\377\377"
|
||||
"\377\362\377\377\377\363\377\377\377\365\377\377\377\370\377\377\377\370"
|
||||
"\377\377\377\363\377\377\377\354\377\377\377\343\377\377\377\335\377\377"
|
||||
"\377\332\377\377\377\330\377\377\377\327\377\377\377\327\377\377\377\332"
|
||||
"\377\377\377\344\377\377\377\355\377\377\377\367\377\377\377\373\377\377"
|
||||
"\377\371\377\377\377\373\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\376\377\377\377\371\377\377\377\360\377\377"
|
||||
"\377\350\377\377\377\347\377\377\377\353\377\377\377\347\377\377\377\345"
|
||||
"\377\377\377\352\377\377\377\356\377\377\377\357\377\377\377\353\377\377"
|
||||
"\377\350\377\377\377\353\377\377\377\353\377\377\377\346\377\377\377\345"
|
||||
"\377\377\377\350\377\377\377\352\377\377\377\351\377\377\377\357\377\377"
|
||||
"\377\364\377\377\377\374\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\374"
|
||||
"\377\377\377\374\377\377\377\373\377\377\377\371\377\377\377\365\377\377"
|
||||
"\377\361\377\377\377\355\377\377\377\362\377\377\377\365\377\377\377\366"
|
||||
"\377\377\377\367\377\377\377\364\377\377\377\354\377\377\377\343\377\377"
|
||||
"\377\332\377\377\377\325\377\377\377\326\377\377\377\325\377\377\377\325"
|
||||
"\377\377\377\333\377\377\377\342\377\377\377\350\377\377\377\366\377\377"
|
||||
"\377\374\377\377\377\372\377\377\377\372\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\372\377\377\377\366\377\377\377\357\377\377"
|
||||
"\377\354\377\377\377\352\377\377\377\350\377\377\377\352\377\377\377\350"
|
||||
"\377\377\377\350\377\377\377\361\377\377\377\365\377\377\377\364\377\377"
|
||||
"\377\364\377\377\377\355\377\377\377\352\377\377\377\350\377\377\377\345"
|
||||
"\377\377\377\344\377\377\377\344\377\377\377\345\377\377\377\346\377\377"
|
||||
"\377\350\377\377\377\354\377\377\377\370\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\375\377\377\377\375\377\377\377\377\377\377\377\377\377\377\377\375"
|
||||
"\377\377\377\372\377\377\377\371\377\377\377\370\377\377\377\367\377\377"
|
||||
"\377\363\377\377\377\356\377\377\377\354\377\377\377\360\377\377\377\357"
|
||||
"\377\377\377\357\377\377\377\362\377\377\377\363\377\377\377\344\377\377"
|
||||
"\377\333\377\377\377\330\377\377\377\330\377\377\377\325\377\377\377\327"
|
||||
"\377\377\377\335\377\377\377\337\377\377\377\346\377\377\377\356\377\377"
|
||||
"\377\366\377\377\377\374\377\377\377\372\377\377\377\367\377\377\377\372"
|
||||
"\377\377\377\375\377\377\377\372\377\377\377\363\377\377\377\352\377\377"
|
||||
"\377\350\377\377\377\353\377\377\377\353\377\377\377\352\377\377\377\354"
|
||||
"\377\377\377\354\377\377\377\360\377\377\377\370\377\377\377\372\377\377"
|
||||
"\377\372\377\377\377\367\377\377\377\360\377\377\377\355\377\377\377\347"
|
||||
"\377\377\377\342\377\377\377\341\377\377\377\340\377\377\377\340\377\377"
|
||||
"\377\335\377\377\377\336\377\377\377\344\377\377\377\361\377\377\377\374"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\377\377"
|
||||
"\377\372\377\377\377\372\377\377\377\372\377\377\377\374\377\377\377\377"
|
||||
"\377\377\377\374\377\377\377\366\377\377\377\365\377\377\377\366\377\377"
|
||||
"\377\367\377\377\377\363\377\377\377\356\377\377\377\355\377\377\377\352"
|
||||
"\377\377\377\347\377\377\377\351\377\377\377\352\377\377\377\352\377\377"
|
||||
"\377\341\377\377\377\325\377\377\377\325\377\377\377\333\377\377\377\327"
|
||||
"\377\377\377\325\377\377\377\335\377\377\377\345\377\377\377\360\377\377"
|
||||
"\377\370\377\377\377\374\377\377\377\375\377\377\377\370\377\377\377\364"
|
||||
"\377\377\377\366\377\377\377\365\377\377\377\363\377\377\377\360\377\377"
|
||||
"\377\346\377\377\377\345\377\377\377\347\377\377\377\352\377\377\377\354"
|
||||
"\377\377\377\355\377\377\377\357\377\377\377\365\377\377\377\373\377\377"
|
||||
"\377\373\377\377\377\375\377\377\377\370\377\377\377\362\377\377\377\362"
|
||||
"\377\377\377\354\377\377\377\342\377\377\377\340\377\377\377\332\377\377"
|
||||
"\377\325\377\377\377\325\377\377\377\330\377\377\377\337\377\377\377\352"
|
||||
"\377\377\377\365\377\377\377\375\377\377\377\377\377\377\377\376\377\377"
|
||||
"\377\372\377\377\377\367\377\377\377\367\377\377\377\365\377\377\377\366"
|
||||
"\377\377\377\370\377\377\377\370\377\377\377\362\377\377\377\360\377\377"
|
||||
"\377\362\377\377\377\363\377\377\377\355\377\377\377\347\377\377\377\347"
|
||||
"\377\377\377\344\377\377\377\347\377\377\377\352\377\377\377\350\377\377"
|
||||
"\377\346\377\377\377\343\377\377\377\332\377\377\377\323\377\377\377\325"
|
||||
"\377\377\377\327\377\377\377\332\377\377\377\340\377\377\377\354\377\377"
|
||||
"\377\371\377\377\377\375\377\377\377\377\377\377\377\376\377\377\377\370"
|
||||
"\377\377\377\364\377\377\377\363\377\377\377\360\377\377\377\356\377\377"
|
||||
"\377\352\377\377\377\345\377\377\377\350\377\377\377\350\377\377\377\354"
|
||||
"\377\377\377\357\377\377\377\360\377\377\377\360\377\377\377\366\377\377"
|
||||
"\377\374\377\377\377\376\377\377\377\377\377\377\377\370\377\377\377\365"
|
||||
"\377\377\377\365\377\377\377\362\377\377\377\355\377\377\377\343\377\377"
|
||||
"\377\321\377\377\377\307\377\377\377\314\377\377\377\325\377\377\377\332"
|
||||
"\377\377\377\343\377\377\377\356\377\377\377\370\377\377\377\375\377\377"
|
||||
"\377\375\377\377\377\371\377\377\377\364\377\377\377\362\377\377\377\360"
|
||||
"\377\377\377\362\377\377\377\363\377\377\377\362\377\377\377\357\377\377"
|
||||
"\377\354\377\377\377\351\377\377\377\352\377\377\377\347\377\377\377\340"
|
||||
"\377\377\377\337\377\377\377\343\377\377\377\350\377\377\377\345\377\377"
|
||||
"\377\343\377\377\377\344\377\377\377\337\377\377\377\337\377\377\377\333"
|
||||
"\377\377\377\327\377\377\377\333\377\377\377\344\377\377\377\350\377\377"
|
||||
"\377\361\377\377\377\372\377\377\377\374\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\371\377\377\377\365\377\377\377\361\377\377\377\353\377\377"
|
||||
"\377\353\377\377\377\347\377\377\377\347\377\377\377\355\377\377\377\353"
|
||||
"\377\377\377\353\377\377\377\354\377\377\377\355\377\377\377\357\377\377"
|
||||
"\377\365\377\377\377\372\377\377\377\376\377\377\377\376\377\377\377\370"
|
||||
"\377\377\377\370\377\377\377\367\377\377\377\367\377\377\377\365\377\377"
|
||||
"\377\346\377\377\377\321\377\377\377\312\377\377\377\311\377\377\377\312"
|
||||
"\377\377\377\325\377\377\377\340\377\377\377\353\377\377\377\366\377\377"
|
||||
"\377\371\377\377\377\370\377\377\377\366\377\377\377\363\377\377\377\363"
|
||||
"\377\377\377\362\377\377\377\362\377\377\377\355\377\377\377\350\377\377"
|
||||
"\377\347\377\377\377\350\377\377\377\345\377\377\377\341\377\377\377\334"
|
||||
"\377\377\377\333\377\377\377\333\377\377\377\336\377\377\377\337\377\377"
|
||||
"\377\332\377\377\377\337\377\377\377\340\377\377\377\336\377\377\377\343"
|
||||
"\377\377\377\347\377\377\377\341\377\377\377\340\377\377\377\350\377\377"
|
||||
"\377\355\377\377\377\366\377\377\377\372\377\377\377\375\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\372\377\377\377\367\377\377\377\361\377\377"
|
||||
"\377\355\377\377\377\354\377\377\377\350\377\377\377\350\377\377\377\355"
|
||||
"\377\377\377\353\377\377\377\351\377\377\377\351\377\377\377\351\377\377"
|
||||
"\377\356\377\377\377\362\377\377\377\371\377\377\377\376\377\377\377\375"
|
||||
"\377\377\377\367\377\377\377\370\377\377\377\371\377\377\377\372\377\377"
|
||||
"\377\367\377\377\377\353\377\377\377\334\377\377\377\325\377\377\377\317"
|
||||
"\377\377\377\314\377\377\377\325\377\377\377\337\377\377\377\352\377\377"
|
||||
"\377\363\377\377\377\367\377\377\377\365\377\377\377\365\377\377\377\366"
|
||||
"\377\377\377\365\377\377\377\362\377\377\377\356\377\377\377\351\377\377"
|
||||
"\377\344\377\377\377\343\377\377\377\346\377\377\377\346\377\377\377\334"
|
||||
"\377\377\377\325\377\377\377\331\377\377\377\332\377\377\377\332\377\377"
|
||||
"\377\330\377\377\377\322\377\377\377\330\377\377\377\335\377\377\377\336"
|
||||
"\377\377\377\341\377\377\377\347\377\377\377\346\377\377\377\351\377\377"
|
||||
"\377\357\377\377\377\365\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\371\377\377\377\366\377\377"
|
||||
"\377\357\377\377\377\355\377\377\377\353\377\377\377\351\377\377\377\353"
|
||||
"\377\377\377\355\377\377\377\353\377\377\377\351\377\377\377\353\377\377"
|
||||
"\377\352\377\377\377\360\377\377\377\363\377\377\377\370\377\377\377\377"
|
||||
"\377\377\377\374\377\377\377\366\377\377\377\367\377\377\377\370\377\377"
|
||||
"\377\371\377\377\377\370\377\377\377\363\377\377\377\351\377\377\377\341"
|
||||
"\377\377\377\332\377\377\377\324\377\377\377\330\377\377\377\337\377\377"
|
||||
"\377\353\377\377\377\363\377\377\377\367\377\377\377\364\377\377\377\361"
|
||||
"\377\377\377\361\377\377\377\361\377\377\377\356\377\377\377\350\377\377"
|
||||
"\377\346\377\377\377\346\377\377\377\347\377\377\377\347\377\377\377\347"
|
||||
"\377\377\377\340\377\377\377\337\377\377\377\342\377\377\377\337\377\377"
|
||||
"\377\337\377\377\377\334\377\377\377\324\377\377\377\327\377\377\377\337"
|
||||
"\377\377\377\344\377\377\377\344\377\377\377\350\377\377\377\353\377\377"
|
||||
"\377\357\377\377\377\364\377\377\377\372\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\373\377\377"
|
||||
"\377\370\377\377\377\362\377\377\377\356\377\377\377\352\377\377\377\353"
|
||||
"\377\377\377\357\377\377\377\361\377\377\377\361\377\377\377\355\377\377"
|
||||
"\377\360\377\377\377\362\377\377\377\367\377\377\377\371\377\377\377\371"
|
||||
"\377\377\377\371\377\377\377\370\377\377\377\366\377\377\377\370\377\377"
|
||||
"\377\370\377\377\377\370\377\377\377\371\377\377\377\371\377\377\377\362"
|
||||
"\377\377\377\354\377\377\377\343\377\377\377\327\377\377\377\331\377\377"
|
||||
"\377\337\377\377\377\354\377\377\377\364\377\377\377\365\377\377\377\362"
|
||||
"\377\377\377\360\377\377\377\354\377\377\377\356\377\377\377\355\377\377"
|
||||
"\377\350\377\377\377\344\377\377\377\350\377\377\377\353\377\377\377\350"
|
||||
"\377\377\377\350\377\377\377\351\377\377\377\347\377\377\377\347\377\377"
|
||||
"\377\345\377\377\377\340\377\377\377\337\377\377\377\334\377\377\377\334"
|
||||
"\377\377\377\342\377\377\377\352\377\377\377\353\377\377\377\361\377\377"
|
||||
"\377\364\377\377\377\364\377\377\377\370\377\377\377\372\377\377\377\376"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\375\377\377\377\370\377\377\377\364\377\377\377\360\377\377\377\356"
|
||||
"\377\377\377\356\377\377\377\361\377\377\377\365\377\377\377\370\377\377"
|
||||
"\377\364\377\377\377\370\377\377\377\371\377\377\377\373\377\377\377\377"
|
||||
"\377\377\377\373\377\377\377\365\377\377\377\365\377\377\377\365\377\377"
|
||||
"\377\365\377\377\377\370\377\377\377\374\377\377\377\373\377\377\377\371"
|
||||
"\377\377\377\364\377\377\377\356\377\377\377\352\377\377\377\343\377\377"
|
||||
"\377\337\377\377\377\337\377\377\377\347\377\377\377\353\377\377\377\356"
|
||||
"\377\377\377\360\377\377\377\362\377\377\377\361\377\377\377\356\377\377"
|
||||
"\377\354\377\377\377\352\377\377\377\352\377\377\377\353\377\377\377\355"
|
||||
"\377\377\377\352\377\377\377\357\377\377\377\362\377\377\377\355\377\377"
|
||||
"\377\352\377\377\377\351\377\377\377\344\377\377\377\346\377\377\377\347"
|
||||
"\377\377\377\345\377\377\377\350\377\377\377\361\377\377\377\360\377\377"
|
||||
"\377\365\377\377\377\370\377\377\377\371\377\377\377\373\377\377\377\372"
|
||||
"\377\377\377\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\373\377\377\377\370\377\377\377\365\377\377\377\364"
|
||||
"\377\377\377\363\377\377\377\362\377\377\377\363\377\377\377\370\377\377"
|
||||
"\377\374\377\377\377\375\377\377\377\377\377\377\377\375\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\375\377\377\377\370\377\377\377\370\377\377"
|
||||
"\377\366\377\377\377\363\377\377\377\370\377\377\377\375\377\377\377\372"
|
||||
"\377\377\377\365\377\377\377\361\377\377\377\352\377\377\377\352\377\377"
|
||||
"\377\350\377\377\377\340\377\377\377\336\377\377\377\342\377\377\377\343"
|
||||
"\377\377\377\353\377\377\377\360\377\377\377\362\377\377\377\364\377\377"
|
||||
"\377\364\377\377\377\361\377\377\377\356\377\377\377\357\377\377\377\361"
|
||||
"\377\377\377\356\377\377\377\354\377\377\377\364\377\377\377\370\377\377"
|
||||
"\377\362\377\377\377\357\377\377\377\356\377\377\377\353\377\377\377\354"
|
||||
"\377\377\377\356\377\377\377\362\377\377\377\363\377\377\377\366\377\377"
|
||||
"\377\362\377\377\377\367\377\377\377\367\377\377\377\367\377\377\377\371"
|
||||
"\377\377\377\367\377\377\377\371\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\376\377\377\377\372\377\377\377\370\377\377\377\371"
|
||||
"\377\377\377\370\377\377\377\366\377\377\377\367\377\377\377\370\377\377"
|
||||
"\377\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\375"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\377\377"
|
||||
"\377\371\377\377\377\367\377\377\377\363\377\377\377\363\377\377\377\366"
|
||||
"\377\377\377\363\377\377\377\361\377\377\377\356\377\377\377\346\377\377"
|
||||
"\377\345\377\377\377\344\377\377\377\334\377\377\377\334\377\377\377\342"
|
||||
"\377\377\377\347\377\377\377\361\377\377\377\365\377\377\377\366\377\377"
|
||||
"\377\373\377\377\377\373\377\377\377\366\377\377\377\361\377\377\377\364"
|
||||
"\377\377\377\370\377\377\377\364\377\377\377\357\377\377\377\365\377\377"
|
||||
"\377\372\377\377\377\365\377\377\377\361\377\377\377\362\377\377\377\363"
|
||||
"\377\377\377\364\377\377\377\362\377\377\377\365\377\377\377\370\377\377"
|
||||
"\377\374\377\377\377\371\377\377\377\374\377\377\377\375\377\377\377\372"
|
||||
"\377\377\377\371\377\377\377\373\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\376\377\377\377\372\377\377\377\371"
|
||||
"\377\377\377\374\377\377\377\372\377\377\377\367\377\377\377\371\377\377"
|
||||
"\377\375\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\375\377\377\377\370\377\377\377\364\377\377\377\361"
|
||||
"\377\377\377\356\377\377\377\355\377\377\377\355\377\377\377\350\377\377"
|
||||
"\377\342\377\377\377\342\377\377\377\337\377\377\377\331\377\377\377\331"
|
||||
"\377\377\377\342\377\377\377\353\377\377\377\365\377\377\377\371\377\377"
|
||||
"\377\374\377\377\377\377\377\377\377\373\377\377\377\365\377\377\377\364"
|
||||
"\377\377\377\370\377\377\377\372\377\377\377\373\377\377\377\370\377\377"
|
||||
"\377\370\377\377\377\372\377\377\377\371\377\377\377\371\377\377\377\371"
|
||||
"\377\377\377\374\377\377\377\377\377\377\377\372\377\377\377\370\377\377"
|
||||
"\377\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\375\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374"
|
||||
"\377\377\377\371\377\377\377\372\377\377\377\373\377\377\377\370\377\377"
|
||||
"\377\370\377\377\377\372\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\372\377\377\377\365"
|
||||
"\377\377\377\365\377\377\377\361\377\377\377\354\377\377\377\350\377\377"
|
||||
"\377\342\377\377\377\337\377\377\377\343\377\377\377\335\377\377\377\330"
|
||||
"\377\377\377\330\377\377\377\340\377\377\377\353\377\377\377\365\377\377"
|
||||
"\377\373\377\377\377\373\377\377\377\373\377\377\377\372\377\377\377\370"
|
||||
"\377\377\377\371\377\377\377\374\377\377\377\374\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\376\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\373\377\377\377\371\377\377\377\366\377\377"
|
||||
"\377\366\377\377\377\365\377\377\377\367\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\373"
|
||||
"\377\377\377\371\377\377\377\370\377\377\377\365\377\377\377\355\377\377"
|
||||
"\377\347\377\377\377\347\377\377\377\347\377\377\377\350\377\377\377\346"
|
||||
"\377\377\377\341\377\377\377\336\377\377\377\345\377\377\377\357\377\377"
|
||||
"\377\367\377\377\377\371\377\377\377\371\377\377\377\371\377\377\377\370"
|
||||
"\377\377\377\372\377\377\377\375\377\377\377\376\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\374\377\377\377\371\377\377"
|
||||
"\377\362\377\377\377\362\377\377\377\361\377\377\377\365\377\377\377\376"
|
||||
"\377\377\377\377\377\377\377\375\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\376\377\377\377\374\377\377\377\374\377\377\377\370\377\377"
|
||||
"\377\364\377\377\377\361\377\377\377\362\377\377\377\361\377\377\377\356"
|
||||
"\377\377\377\355\377\377\377\352\377\377\377\346\377\377\377\350\377\377"
|
||||
"\377\360\377\377\377\366\377\377\377\367\377\377\377\366\377\377\377\370"
|
||||
"\377\377\377\372\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\372\377\377"
|
||||
"\377\367\377\377\377\362\377\377\377\361\377\377\377\361\377\377\377\361"
|
||||
"\377\377\377\366\377\377\377\371\377\377\377\373\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\375\377\377"
|
||||
"\377\374\377\377\377\374\377\377\377\373\377\377\377\373\377\377\377\372"
|
||||
"\377\377\377\367\377\377\377\363\377\377\377\362\377\377\377\362\377\377"
|
||||
"\377\363\377\377\377\364\377\377\377\367\377\377\377\371\377\377\377\367"
|
||||
"\377\377\377\372\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\372\377\377\377\372\377\377\377\365\377\377\377\360\377\377\377\362"
|
||||
"\377\377\377\361\377\377\377\361\377\377\377\366\377\377\377\370\377\377"
|
||||
"\377\372\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\376\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\375\377\377\377\372\377\377\377\367\377\377"
|
||||
"\377\370\377\377\377\372\377\377\377\373\377\377\377\372\377\377\377\372"
|
||||
"\377\377\377\372\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\372\377\377\377\363"
|
||||
"\377\377\377\362\377\377\377\363\377\377\377\364\377\377\377\367\377\377"
|
||||
"\377\363\377\377\377\361\377\377\377\372\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\374\377\377"
|
||||
"\377\372\377\377\377\372\377\377\377\375\377\377\377\377\377\377\377\375"
|
||||
"\377\377\377\373\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\376"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\371\377\377\377\364\377\377\377\367\377\377\377\366\377\377"
|
||||
"\377\362\377\377\377\360\377\377\377\361\377\377\377\367\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\375\377\377\377\375\377\377\377\376\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\374\377\377\377\374\377\377\377\374\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\376"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\375\377\377\377\372\377\377\377\372\377\377"
|
||||
"\377\364\377\377\377\355\377\377\377\355\377\377\377\363\377\377\377\372"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\375\377\377"
|
||||
"\377\374\377\377\377\374\377\377\377\373\377\377\377\372\377\377\377\374"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\375\377\377\377\375\377\377\377\376\377\377\377\376"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\375\377\377"
|
||||
"\377\367\377\377\377\363\377\377\377\361\377\377\377\360\377\377\377\365"
|
||||
"\377\377\377\372\377\377\377\377\377\377\377\377\377\377\377\376\377\377"
|
||||
"\377\371\377\377\377\366\377\377\377\367\377\377\377\364\377\377\377\364"
|
||||
"\377\377\377\371\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\375\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\373\377\377\377\361\377\377\377\361\377\377\377\365\377\377\377\366"
|
||||
"\377\377\377\370\377\377\377\372\377\377\377\373\377\377\377\375\377\377"
|
||||
"\377\374\377\377\377\372\377\377\377\370\377\377\377\366\377\377\377\364"
|
||||
"\377\377\377\364\377\377\377\366\377\377\377\375\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\377\377"
|
||||
"\377\370\377\377\377\376\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\371\377\377\377\364\377\377\377\362\377\377\377\366"
|
||||
"\377\377\377\370\377\377\377\370\377\377\377\370\377\377\377\371\377\377"
|
||||
"\377\372\377\377\377\371\377\377\377\371\377\377\377\366\377\377\377\364"
|
||||
"\377\377\377\364\377\377\377\366\377\377\377\370\377\377\377\373\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\373\377\377"
|
||||
"\377\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\376\377\377\377\374\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\377\377"
|
||||
"\377\372\377\377\377\373\377\377\377\377\377\377\377\377\377\377\377\376"
|
||||
"\377\377\377\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\373\377\377\377\367\377\377\377\366\377\377\377\370"
|
||||
"\377\377\377\373\377\377\377\372\377\377\377\365\377\377\377\364\377\377"
|
||||
"\377\364\377\377\377\370\377\377\377\371\377\377\377\371\377\377\377\370"
|
||||
"\377\377\377\366\377\377\377\363\377\377\377\366\377\377\377\373\377\377"
|
||||
"\377\375\377\377\377\375\377\377\377\376\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\367\377\377\377\361\377\377"
|
||||
"\377\362\377\377\377\366\377\377\377\366\377\377\377\372\377\377\377\376"
|
||||
"\377\377\377\375\377\377\377\374\377\377\377\375\377\377\377\375\377\377"
|
||||
"\377\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\372\377\377\377\375\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\374\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\375\377\377\377\372\377\377\377\366\377\377\377\367"
|
||||
"\377\377\377\371\377\377\377\373\377\377\377\374\377\377\377\371\377\377"
|
||||
"\377\364\377\377\377\361\377\377\377\362\377\377\377\361\377\377\377\363"
|
||||
"\377\377\377\367\377\377\377\370\377\377\377\365\377\377\377\365\377\377"
|
||||
"\377\372\377\377\377\376\377\377\377\375\377\377\377\374\377\377\377\374"
|
||||
"\377\377\377\375\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\370\377\377\377\356\377\377"
|
||||
"\377\353\377\377\377\351\377\377\377\347\377\377\377\351\377\377\377\362"
|
||||
"\377\377\377\372\377\377\377\370\377\377\377\364\377\377\377\370\377\377"
|
||||
"\377\375\377\377\377\372\377\377\377\372\377\377\377\376\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\375\377\377"
|
||||
"\377\372\377\377\377\370\377\377\377\370\377\377\377\372\377\377\377\370"
|
||||
"\377\377\377\365\377\377\377\366\377\377\377\370\377\377\377\374\377\377"
|
||||
"\377\374\377\377\377\371\377\377\377\363\377\377\377\356\377\377\377\351"
|
||||
"\377\377\377\354\377\377\377\360\377\377\377\362\377\377\377\363\377\377"
|
||||
"\377\364\377\377\377\371\377\377\377\374\377\377\377\374\377\377\377\373"
|
||||
"\377\377\377\372\377\377\377\371\377\377\377\376\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
|
||||
"\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\364\377\377"
|
||||
"\377\353\377\377\377\347\377\377\377\343\377\377\377\335\377\377\377\336"
|
||||
"\377\377\377\351\377\377\377\361\377\377\377\361\377\377\377\361\377\377"
|
||||
"\377\363\377\377\377\370\377\377\377\370\377\377\377\366\377\377\377\367"
|
||||
"\377\377\377\374",
|
||||
};
|
||||
|
||||
@@ -0,0 +1,206 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Mario Luzeiro <mrluzeiro@gmail.com>
|
||||
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file vrml_aux.cpp
|
||||
*/
|
||||
|
||||
#include "vrml_aux.h"
|
||||
|
||||
char SkipGetChar ( FILE* File )
|
||||
{
|
||||
char c;
|
||||
bool re_parse;
|
||||
|
||||
if( (c = fgetc( File )) == EOF )
|
||||
{
|
||||
//DBG( printf( "EOF\n" ) );
|
||||
return EOF;
|
||||
}
|
||||
|
||||
//DBG( printf( "c %c 0x%02X\n", c, c ) );
|
||||
|
||||
do
|
||||
{
|
||||
re_parse = false;
|
||||
|
||||
if ((c == ' ') || (c == '\t') || (c == '{') || (c == '['))
|
||||
{
|
||||
//DBG( printf( "Skipping space \\t or { or [\n" ) );
|
||||
do
|
||||
{
|
||||
if( (c = fgetc( File )) == EOF )
|
||||
{
|
||||
//DBG( printf( "EOF\n" ) );
|
||||
|
||||
return EOF;
|
||||
}
|
||||
}
|
||||
while((c == ' ') || (c == '\t') || (c == '{') || (c == '['));
|
||||
}
|
||||
|
||||
if ((c == '#') || (c == '\n') || (c == '\r') || (c == 0) || (c == ','))
|
||||
{
|
||||
if (c == '#')
|
||||
{
|
||||
//DBG( printf( "Skipping # \\n or \\r or 0, 0x%02X\n", c ) );
|
||||
do
|
||||
{
|
||||
if( (c = fgetc( File )) == EOF )
|
||||
{
|
||||
//DBG( printf( "EOF\n" ) );
|
||||
return EOF;
|
||||
}
|
||||
}
|
||||
while((c != '\n') && (c != '\r') && (c != 0) && (c != ','));
|
||||
}
|
||||
else
|
||||
{
|
||||
if( (c = fgetc( File )) == EOF )
|
||||
{
|
||||
//DBG( printf( "EOF\n" ) );
|
||||
return EOF;
|
||||
}
|
||||
}
|
||||
|
||||
re_parse = true;
|
||||
}
|
||||
}while(re_parse == true);
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
char* GetNextTag( FILE* File, char* tag )
|
||||
{
|
||||
|
||||
char c = SkipGetChar( File );
|
||||
|
||||
if (c == EOF)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
tag[0] = c;
|
||||
tag[1] = 0;
|
||||
//DBG( printf( "tag[0] %c\n", tag[0] ) );
|
||||
if( (c != '}') && (c != ']') )
|
||||
{
|
||||
char *dst = &tag[1];
|
||||
while (fscanf( File, "%c", dst))
|
||||
{
|
||||
if( (*dst == ' ') || (*dst == '[') || (*dst == '{') || (*dst == '\t') || (*dst == '\n')|| (*dst == '\r') )
|
||||
{
|
||||
*dst = 0;
|
||||
break;
|
||||
}
|
||||
dst++;
|
||||
}
|
||||
|
||||
|
||||
//DBG( printf( "tag %s\n", tag ) );
|
||||
c = SkipGetChar( File );
|
||||
|
||||
if (c != EOF)
|
||||
{
|
||||
// Puts again the read char in the buffer
|
||||
ungetc( c, File );
|
||||
}
|
||||
}
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
|
||||
int read_NotImplemented( FILE* File, char closeChar)
|
||||
{
|
||||
char c;
|
||||
//DBG( printf( "look for %c\n", closeChar) );
|
||||
while( (c = fgetc( File )) != EOF )
|
||||
{
|
||||
if( c == '{' )
|
||||
{
|
||||
//DBG( printf( "{\n") );
|
||||
read_NotImplemented( File, '}' );
|
||||
} else if( c == '[' )
|
||||
{
|
||||
//DBG( printf( "[\n") );
|
||||
read_NotImplemented( File, ']' );
|
||||
} else if( c == closeChar )
|
||||
{
|
||||
//DBG( printf( "%c\n", closeChar) );
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
DBG( printf( " NotImplemented failed\n" ) );
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int parseVertexList( FILE* File, std::vector< glm::vec3 > &dst_vector)
|
||||
{
|
||||
//DBG( printf( " parseVertexList\n" ) );
|
||||
|
||||
dst_vector.clear();
|
||||
|
||||
glm::vec3 vertex;
|
||||
while( parseVertex ( File, vertex ) == 3 )
|
||||
{
|
||||
dst_vector.push_back( vertex );
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int parseVertex( FILE* File, glm::vec3 &dst_vertex )
|
||||
{
|
||||
float a,b,c;
|
||||
int ret = fscanf( File, "%e %e %e", &a, &b, &c );
|
||||
|
||||
dst_vertex.x = a;
|
||||
dst_vertex.y = b;
|
||||
dst_vertex.z = c;
|
||||
|
||||
char s = SkipGetChar( File );
|
||||
|
||||
if (s != EOF)
|
||||
{
|
||||
// Puts again the read char in the buffer
|
||||
ungetc( s, File );
|
||||
}
|
||||
//DBG( printf( "ret%d(%.9f,%.9f,%.9f)", ret, a,b,c) );
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int parseFloat( FILE* File, float *dst_float )
|
||||
{
|
||||
float value;
|
||||
int ret = fscanf( File, "%e", &value );
|
||||
*dst_float = value;
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Mario Luzeiro <mrluzeiro@gmail.com>
|
||||
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file vrml_aux.h
|
||||
*/
|
||||
|
||||
#ifndef _VRML_AUX_H
|
||||
#define _VRML_AUX_H
|
||||
|
||||
#include <fctsys.h>
|
||||
#include <common.h>
|
||||
#include <macros.h>
|
||||
#include <base_struct.h>
|
||||
#include <gal/opengl/glm/glm.hpp>
|
||||
#include <vector>
|
||||
#include <kicad_string.h>
|
||||
#include <info3d_visu.h>
|
||||
#ifdef __WXMAC__
|
||||
# ifdef __DARWIN__
|
||||
# include <OpenGL/glu.h>
|
||||
# else
|
||||
# include <glu.h>
|
||||
# endif
|
||||
#else
|
||||
# include <GL/glu.h>
|
||||
#endif
|
||||
#include <wx/glcanvas.h>
|
||||
|
||||
int read_NotImplemented( FILE* File, char closeChar);
|
||||
char SkipGetChar ( FILE* File );
|
||||
int parseVertexList( FILE* File, std::vector< glm::vec3 > &dst_vector);
|
||||
int parseVertex( FILE* File, glm::vec3 &dst_vertex );
|
||||
int parseFloat( FILE* File, float *dst_float );
|
||||
char* GetNextTag( FILE* File, char* tag );
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,444 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Mario Luzeiro <mrluzeiro@gmail.com>
|
||||
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file vrml_v1_modelparser.cpp
|
||||
*/
|
||||
|
||||
#include <fctsys.h>
|
||||
#include <vector>
|
||||
#include <macros.h>
|
||||
#include <kicad_string.h>
|
||||
#include <info3d_visu.h>
|
||||
|
||||
#include "3d_struct.h"
|
||||
#include "modelparsers.h"
|
||||
#include "vrml_aux.h"
|
||||
|
||||
VRML1_MODEL_PARSER::VRML1_MODEL_PARSER( S3D_MASTER* aMaster ) :
|
||||
S3D_MODEL_PARSER( aMaster )
|
||||
{
|
||||
m_model = NULL;
|
||||
m_file = NULL;
|
||||
}
|
||||
|
||||
|
||||
VRML1_MODEL_PARSER::~VRML1_MODEL_PARSER()
|
||||
{
|
||||
for( unsigned int idx = 0; idx < childs.size(); idx++ )
|
||||
{
|
||||
delete childs[idx];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void VRML1_MODEL_PARSER::Load( const wxString aFilename )
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( "Load %s\n", static_cast<const char*>(aFilename.mb_str()) ) );
|
||||
m_file = wxFopen( aFilename, wxT( "rt" ) );
|
||||
|
||||
if( m_file == NULL )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
glShadeModel( GL_SMOOTH );
|
||||
glEnable( GL_NORMALIZE );
|
||||
|
||||
float vrmlunits_to_3Dunits = g_Parm_3D_Visu.m_BiuTo3Dunits * UNITS3D_TO_UNITSPCB;
|
||||
glScalef( vrmlunits_to_3Dunits, vrmlunits_to_3Dunits, vrmlunits_to_3Dunits );
|
||||
|
||||
glm::vec3 matScale( GetMaster()->m_MatScale.x, GetMaster()->m_MatScale.y, GetMaster()->m_MatScale.z );
|
||||
glm::vec3 matRot( GetMaster()->m_MatRotation.x, GetMaster()->m_MatRotation.y, GetMaster()->m_MatRotation.z );
|
||||
glm::vec3 matPos( GetMaster()->m_MatPosition.x, GetMaster()->m_MatPosition.y, GetMaster()->m_MatPosition.z );
|
||||
|
||||
|
||||
#define SCALE_3D_CONV ((IU_PER_MILS * 1000.0f) / UNITS3D_TO_UNITSPCB)
|
||||
|
||||
//glPushMatrix();
|
||||
glTranslatef( matPos.x * SCALE_3D_CONV, matPos.y * SCALE_3D_CONV, matPos.z * SCALE_3D_CONV );
|
||||
|
||||
glRotatef(-matRot.z, 0.0f, 0.0f, 1.0f );
|
||||
glRotatef(-matRot.y, 0.0f, 1.0f, 0.0f );
|
||||
glRotatef(-matRot.x, 1.0f, 0.0f, 0.0f );
|
||||
|
||||
glScalef( matScale.x, matScale.y, matScale.z );
|
||||
|
||||
// Switch the locale to standard C (needed to print floating point numbers like 1.3)
|
||||
SetLocaleTo_C_standard();
|
||||
|
||||
childs.clear();
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
|
||||
if ( ( text == NULL ) || ( *text == '}' ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if( strcmp( text, "Separator" ) == 0 )
|
||||
{
|
||||
m_model = new S3D_MESH();
|
||||
|
||||
childs.push_back( m_model );
|
||||
|
||||
read_separator();
|
||||
}
|
||||
}
|
||||
|
||||
fclose( m_file );
|
||||
SetLocaleTo_Default(); // revert to the current locale
|
||||
|
||||
|
||||
//DBG( printf( "chils size:%lu\n", childs.size() ) );
|
||||
|
||||
if( GetMaster()->IsOpenGlAllowed() )
|
||||
{
|
||||
for( unsigned int idx = 0; idx < childs.size(); idx++ )
|
||||
{
|
||||
childs[idx]->openGL_RenderAllChilds();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int VRML1_MODEL_PARSER::read_separator()
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( "Separator\n" ) );
|
||||
|
||||
while( GetNextTag( m_file, text) )
|
||||
{
|
||||
|
||||
if( strcmp( text, "Material" ) == 0 )
|
||||
{
|
||||
readMaterial( );
|
||||
} else if( strcmp( text, "Coordinate3" ) == 0 )
|
||||
{
|
||||
readCoordinate3();
|
||||
} else if( strcmp( text, "IndexedFaceSet" ) == 0 )
|
||||
{
|
||||
readIndexedFaceSet();
|
||||
} else if( strcmp( text, "Separator" ) == 0 )
|
||||
{
|
||||
S3D_MESH *parent = m_model;
|
||||
|
||||
S3D_MESH *new_mesh_model = new S3D_MESH();
|
||||
|
||||
m_model->childs.push_back( new_mesh_model );
|
||||
|
||||
m_model = new_mesh_model;
|
||||
|
||||
// recursive
|
||||
read_separator();
|
||||
|
||||
m_model = parent;
|
||||
}else if ( ( *text != '}' ) )
|
||||
{
|
||||
//DBG( printf( "read_NotImplemented %s\n", text ) );
|
||||
read_NotImplemented( m_file, '}');
|
||||
} else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readMaterial()
|
||||
{
|
||||
char text[128];
|
||||
S3D_MATERIAL* material = NULL;
|
||||
|
||||
//DBG( printf( " readMaterial\n" ) );
|
||||
|
||||
wxString mat_name;
|
||||
|
||||
material = new S3D_MATERIAL( GetMaster(), mat_name );
|
||||
|
||||
GetMaster()->Insert( material );
|
||||
|
||||
m_model->m_Materials = material;
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "ambientColor" ) == 0 )
|
||||
{
|
||||
readMaterial_ambientColor();
|
||||
} else if( strcmp( text, "diffuseColor" ) == 0 )
|
||||
{
|
||||
readMaterial_diffuseColor( );
|
||||
} else if( strcmp( text, "emissiveColor" ) == 0 )
|
||||
{
|
||||
readMaterial_emissiveColor( );
|
||||
}else if( strcmp( text, "specularColor" ) == 0 )
|
||||
{
|
||||
readMaterial_specularColor( );
|
||||
}else if( strcmp( text, "shininess" ) == 0 )
|
||||
{
|
||||
readMaterial_shininess( );
|
||||
}else if( strcmp( text, "transparency" ) == 0 )
|
||||
{
|
||||
readMaterial_transparency( );
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readCoordinate3( )
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( " readCoordinate3\n" ) );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "point" ) == 0 )
|
||||
{
|
||||
readCoordinate3_point( );
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readIndexedFaceSet( )
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( " readIndexedFaceSet\n" ) );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "coordIndex" ) == 0 )
|
||||
{
|
||||
readIndexedFaceSet_coordIndex( );
|
||||
} else if( strcmp( text, "materialIndex" ) == 0 )
|
||||
{
|
||||
readIndexedFaceSet_materialIndex( );
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int VRML1_MODEL_PARSER::readMaterial_ambientColor( )
|
||||
{
|
||||
//DBG( printf( " readMaterial_ambientColor\n" ) );
|
||||
|
||||
return parseVertexList( m_file, m_model->m_Materials->m_AmbientColor);
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readMaterial_diffuseColor( )
|
||||
{
|
||||
//DBG( printf( " readMaterial_diffuseColor\n" ) );
|
||||
|
||||
return parseVertexList( m_file, m_model->m_Materials->m_DiffuseColor);
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readMaterial_emissiveColor( )
|
||||
{
|
||||
//DBG( printf( " readMaterial_emissiveColor\n" ) );
|
||||
|
||||
int ret = parseVertexList( m_file, m_model->m_Materials->m_EmissiveColor);
|
||||
|
||||
if( GetMaster()->m_use_modelfile_emissiveColor == false)
|
||||
{
|
||||
m_model->m_Materials->m_EmissiveColor.clear();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readMaterial_specularColor()
|
||||
{
|
||||
//DBG( printf( " readMaterial_specularColor\n" ) );
|
||||
|
||||
int ret = parseVertexList( m_file, m_model->m_Materials->m_SpecularColor );
|
||||
|
||||
if( GetMaster()->m_use_modelfile_specularColor == false)
|
||||
{
|
||||
m_model->m_Materials->m_SpecularColor.clear();
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readMaterial_shininess( )
|
||||
{
|
||||
//DBG( printf( " readMaterial_shininess\n" ) );
|
||||
|
||||
m_model->m_Materials->m_Shininess.clear();
|
||||
|
||||
float shininess_value;
|
||||
while( fscanf( m_file, "%f,", &shininess_value ) )
|
||||
{
|
||||
// VRML value is normalized and openGL expects a value 0 - 128
|
||||
shininess_value = shininess_value * 128.0f;
|
||||
m_model->m_Materials->m_Shininess.push_back( shininess_value );
|
||||
}
|
||||
|
||||
if( GetMaster()->m_use_modelfile_shininess == false )
|
||||
{
|
||||
m_model->m_Materials->m_Shininess.clear();
|
||||
}
|
||||
|
||||
//DBG( printf( " m_Shininess.size: %ld\n", m_model->m_Materials->m_Shininess.size() ) );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readMaterial_transparency()
|
||||
{
|
||||
//DBG( printf( " readMaterial_transparency\n" ) );
|
||||
|
||||
m_model->m_Materials->m_Transparency.clear();
|
||||
|
||||
float tmp;
|
||||
while( fscanf (m_file, "%f,", &tmp) )
|
||||
{
|
||||
m_model->m_Materials->m_Transparency.push_back( tmp );
|
||||
}
|
||||
|
||||
if( GetMaster()->m_use_modelfile_transparency == false )
|
||||
{
|
||||
m_model->m_Materials->m_Transparency.clear();
|
||||
}
|
||||
|
||||
//DBG( printf( " m_Transparency.size: %ld\n", m_model->m_Materials->m_Transparency.size() ) );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readCoordinate3_point()
|
||||
{
|
||||
//DBG( printf( " readCoordinate3_point\n" ) );
|
||||
|
||||
if( parseVertexList( m_file, m_model->m_Point ) == 0 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readIndexedFaceSet_coordIndex()
|
||||
{
|
||||
//DBG( printf( " readIndexedFaceSet_coordIndex\n" ) );
|
||||
|
||||
m_model->m_CoordIndex.clear();
|
||||
|
||||
glm::ivec3 coord;
|
||||
|
||||
int dummy; // should be -1
|
||||
while( fscanf( m_file, "%d,%d,%d,%d,", &coord[0], &coord[1], &coord[2], &dummy ) )
|
||||
{
|
||||
std::vector<int> coord_list;
|
||||
|
||||
coord_list.resize( 3 );
|
||||
coord_list[0] = coord[0];
|
||||
coord_list[1] = coord[1];
|
||||
coord_list[2] = coord[2];
|
||||
|
||||
if( (coord[0] == coord[1]) ||
|
||||
(coord[0] == coord[2]) ||
|
||||
(coord[2] == coord[1]) )
|
||||
{
|
||||
//DBG( printf( " invalid coordIndex at index %lu (%d, %d, %d, %d)\n", m_model->m_CoordIndex.size()+1,coord[0], coord[1], coord[2], dummy ) );
|
||||
}
|
||||
|
||||
if (dummy != -1)
|
||||
{
|
||||
//DBG( printf( " Error at index %lu, -1 Expected, got %d\n", m_model->m_CoordIndex.size()+1, dummy ) );
|
||||
}
|
||||
m_model->m_CoordIndex.push_back( coord_list );
|
||||
}
|
||||
|
||||
//DBG( printf( " m_CoordIndex.size: %ld\n", m_model->m_CoordIndex.size() ) );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int VRML1_MODEL_PARSER::readIndexedFaceSet_materialIndex()
|
||||
{
|
||||
//DBG( printf( " readIndexedFaceSet_materialIndex\n" ) );
|
||||
|
||||
m_model->m_MaterialIndex.clear();
|
||||
|
||||
int index;
|
||||
while( fscanf( m_file, "%d,", &index ) )
|
||||
{
|
||||
m_model->m_MaterialIndex.push_back( index );
|
||||
}
|
||||
|
||||
//DBG( printf( " m_MaterialIndex.size: %ld\n", m_model->m_MaterialIndex.size() ) );
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,766 @@
|
||||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Mario Luzeiro <mrluzeiro@gmail.com>
|
||||
* Copyright (C) 2013 Tuomas Vaherkoski <tuomasvaherkoski@gmail.com>
|
||||
* Copyright (C) 2012 Jean-Pierre Charras, jp.charras@wanadoo.fr
|
||||
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you may find one here:
|
||||
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file vrml_v2_modelparser.cpp
|
||||
*/
|
||||
|
||||
#include <fctsys.h>
|
||||
#include <vector>
|
||||
#include <macros.h>
|
||||
#include <kicad_string.h>
|
||||
#include <info3d_visu.h>
|
||||
|
||||
#include "3d_struct.h"
|
||||
#include "modelparsers.h"
|
||||
#include "vrml_aux.h"
|
||||
|
||||
VRML2_MODEL_PARSER::VRML2_MODEL_PARSER( S3D_MASTER* aMaster ) :
|
||||
S3D_MODEL_PARSER( aMaster )
|
||||
{
|
||||
m_model = NULL;
|
||||
}
|
||||
|
||||
|
||||
VRML2_MODEL_PARSER::~VRML2_MODEL_PARSER()
|
||||
{
|
||||
for(unsigned int idx = 0; idx < childs.size(); idx++)
|
||||
{
|
||||
delete childs[idx];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void VRML2_MODEL_PARSER::Load( const wxString aFilename )
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( "Load %s\n", static_cast<const char*>(aFilename.mb_str()) ) );
|
||||
m_file = wxFopen( aFilename, wxT( "rt" ) );
|
||||
|
||||
if( m_file == NULL )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glEnable(GL_NORMALIZE);
|
||||
|
||||
float vrmlunits_to_3Dunits = g_Parm_3D_Visu.m_BiuTo3Dunits * UNITS3D_TO_UNITSPCB;
|
||||
glScalef( vrmlunits_to_3Dunits, vrmlunits_to_3Dunits, vrmlunits_to_3Dunits );
|
||||
|
||||
glm::vec3 matScale( GetMaster()->m_MatScale.x, GetMaster()->m_MatScale.y, GetMaster()->m_MatScale.z );
|
||||
glm::vec3 matRot( GetMaster()->m_MatRotation.x, GetMaster()->m_MatRotation.y, GetMaster()->m_MatRotation.z );
|
||||
glm::vec3 matPos( GetMaster()->m_MatPosition.x, GetMaster()->m_MatPosition.y, GetMaster()->m_MatPosition.z );
|
||||
|
||||
|
||||
#define SCALE_3D_CONV ((IU_PER_MILS * 1000.0f) / UNITS3D_TO_UNITSPCB)
|
||||
|
||||
glTranslatef( matPos.x * SCALE_3D_CONV, matPos.y * SCALE_3D_CONV, matPos.z * SCALE_3D_CONV );
|
||||
|
||||
glRotatef(-matRot.z, 0.0f, 0.0f, 1.0f );
|
||||
glRotatef(-matRot.y, 0.0f, 1.0f, 0.0f );
|
||||
glRotatef(-matRot.x, 1.0f, 0.0f, 0.0f );
|
||||
|
||||
glScalef( matScale.x, matScale.y, matScale.z );
|
||||
|
||||
// Switch the locale to standard C (needed to print floating point numbers like 1.3)
|
||||
SetLocaleTo_C_standard();
|
||||
|
||||
childs.clear();
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
|
||||
if( ( text == NULL ) || ( *text == '}' ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if( strcmp( text, "Transform" ) == 0 )
|
||||
{
|
||||
m_model = new S3D_MESH();
|
||||
|
||||
childs.push_back( m_model );
|
||||
|
||||
read_Transform();
|
||||
|
||||
} else if( strcmp( text, "DEF" ) == 0 )
|
||||
{
|
||||
m_model = new S3D_MESH();
|
||||
|
||||
childs.push_back( m_model );
|
||||
|
||||
read_DEF();
|
||||
}
|
||||
}
|
||||
|
||||
fclose( m_file );
|
||||
SetLocaleTo_Default(); // revert to the current locale
|
||||
|
||||
|
||||
//DBG( printf( "chils size:%lu\n", childs.size() ) );
|
||||
|
||||
if( GetMaster()->IsOpenGlAllowed() )
|
||||
{
|
||||
for( unsigned int idx = 0; idx < childs.size(); idx++ )
|
||||
{
|
||||
childs[idx]->openGL_RenderAllChilds();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_Transform()
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( "Transform\n" ) );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
//DBG( printf( " } Exit Transform\n" ) );
|
||||
break;
|
||||
}
|
||||
if( strcmp( text, "translation" ) == 0 )
|
||||
{
|
||||
parseVertex( m_file, m_model->m_translation );
|
||||
} else if( strcmp( text, "rotation" ) == 0 )
|
||||
{
|
||||
fscanf( m_file, "%f %f %f %f", &m_model->m_rotation[0], &m_model->m_rotation[1], &m_model->m_rotation[2], &m_model->m_rotation[3]);
|
||||
m_model->m_rotation[3] = m_model->m_rotation[3] * 180.0f / 3.14f; // !TODO: use constants or functions
|
||||
} else if( strcmp( text, "scale" ) == 0 )
|
||||
{
|
||||
parseVertex( m_file, m_model->m_scale );
|
||||
} else if( strcmp( text, "scaleOrientation" ) == 0 )
|
||||
{
|
||||
fscanf( m_file, "%f %f %f %f", &m_model->m_scaleOrientation[0], &m_model->m_scaleOrientation[1], &m_model->m_scaleOrientation[2], &m_model->m_scaleOrientation[3]);
|
||||
} else if( strcmp( text, "center" ) == 0 )
|
||||
{
|
||||
parseVertex( m_file, m_model->m_center );
|
||||
} else if( strcmp( text, "children" ) == 0 )
|
||||
{
|
||||
// skip
|
||||
} else if( strcmp( text, "Switch" ) == 0 )
|
||||
{
|
||||
// skip
|
||||
} else if( strcmp( text, "whichChoice" ) == 0 )
|
||||
{
|
||||
int dummy;
|
||||
fscanf( m_file, "%d", &dummy );
|
||||
} else if( strcmp( text, "choice" ) == 0 )
|
||||
{
|
||||
// skip
|
||||
} else if( strcmp( text, "Group" ) == 0 )
|
||||
{
|
||||
// skip
|
||||
} else if( strcmp( text, "Shape" ) == 0 )
|
||||
{
|
||||
S3D_MESH *parent = m_model;
|
||||
|
||||
S3D_MESH *new_mesh_model = new S3D_MESH();
|
||||
|
||||
m_model->childs.push_back( new_mesh_model );
|
||||
|
||||
m_model = new_mesh_model;
|
||||
|
||||
read_Shape();
|
||||
|
||||
m_model = parent;
|
||||
|
||||
} else if( strcmp( text, "DEF" ) == 0 )
|
||||
{
|
||||
read_DEF();
|
||||
} else
|
||||
{
|
||||
DBG( printf( " %s NotImplemented\n", text ) );
|
||||
read_NotImplemented( m_file, '}' );
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_DEF()
|
||||
{
|
||||
char text[128];
|
||||
|
||||
GetNextTag( m_file, text);
|
||||
//DBG( printf( "DEF %s ", text ) );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
//DBG( printf( " skiping %c\n", *text) );
|
||||
continue;
|
||||
}
|
||||
|
||||
if( ( *text == '}' ) )
|
||||
{
|
||||
//DBG( printf( " } Exit DEF\n") );
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "Transform" ) == 0 )
|
||||
{
|
||||
return read_Transform ();
|
||||
} else if( strcmp( text, "children" ) == 0 )
|
||||
{
|
||||
// skip
|
||||
} else if( strcmp( text, "Switch" ) == 0 )
|
||||
{
|
||||
// skip
|
||||
} else if( strcmp( text, "whichChoice" ) == 0 )
|
||||
{
|
||||
// skip
|
||||
} else if( strcmp( text, "choice" ) == 0 )
|
||||
{
|
||||
// skip
|
||||
}else if( strcmp( text, "Shape" ) == 0 )
|
||||
{
|
||||
S3D_MESH *parent = m_model;
|
||||
|
||||
S3D_MESH *new_mesh_model = new S3D_MESH();
|
||||
|
||||
m_model->childs.push_back( new_mesh_model );
|
||||
|
||||
m_model = new_mesh_model;
|
||||
|
||||
read_Shape();
|
||||
|
||||
m_model = parent;
|
||||
}
|
||||
}
|
||||
|
||||
DBG( printf( " DEF failed\n" ) );
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_Shape()
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( " Shape\n") );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
//DBG( printf( " } Exit Shape\n") );
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "appearance" ) == 0 )
|
||||
{
|
||||
//skip
|
||||
} else if( strcmp( text, "Appearance" ) == 0 )
|
||||
{
|
||||
read_Appearance();
|
||||
} else if( strcmp( text, "geometry" ) == 0 )
|
||||
{
|
||||
//skip
|
||||
} else if( strcmp( text, "IndexedFaceSet" ) == 0 )
|
||||
{
|
||||
read_IndexedFaceSet();
|
||||
} else
|
||||
{
|
||||
DBG( printf( " %s NotImplemented\n", text ) );
|
||||
read_NotImplemented( m_file, '}' );
|
||||
}
|
||||
}
|
||||
|
||||
DBG( printf( " Shape failed\n") );
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_Appearance()
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( " Appearance\n") );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "material" ) == 0 )
|
||||
{
|
||||
read_material();
|
||||
}
|
||||
}
|
||||
|
||||
DBG( printf( " Appearance failed\n") );
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_material()
|
||||
{
|
||||
S3D_MATERIAL* material = NULL;
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( " material ") );
|
||||
|
||||
if( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if( strcmp( text, "Material" ) == 0 )
|
||||
{
|
||||
wxString mat_name;
|
||||
material = new S3D_MATERIAL( GetMaster(), mat_name );
|
||||
|
||||
GetMaster()->Insert( material );
|
||||
|
||||
m_model->m_Materials = material;
|
||||
|
||||
if( strcmp( text, "Material" ) == 0 )
|
||||
{
|
||||
return read_Material();
|
||||
}
|
||||
} else if( strcmp( text, "DEF" ) == 0 )
|
||||
{
|
||||
//DBG( printf( "DEF") );
|
||||
|
||||
if( GetNextTag( m_file, text ) )
|
||||
{
|
||||
//DBG( printf( "%s", text ) );
|
||||
|
||||
wxString mat_name;
|
||||
mat_name = FROM_UTF8( text );
|
||||
|
||||
material = new S3D_MATERIAL( GetMaster(), mat_name );
|
||||
|
||||
GetMaster()->Insert( material );
|
||||
|
||||
m_model->m_Materials = material;
|
||||
|
||||
if( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if( strcmp( text, "Material" ) == 0 )
|
||||
{
|
||||
return read_Material();
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if( strcmp( text, "USE" ) == 0 )
|
||||
{
|
||||
//DBG( printf( "USE") );
|
||||
|
||||
if( GetNextTag( m_file, text ) )
|
||||
{
|
||||
//DBG( printf( "%s\n", text ) );
|
||||
|
||||
wxString mat_name;
|
||||
mat_name = FROM_UTF8( text );
|
||||
|
||||
for( material = GetMaster()->m_Materials; material; material = material->Next() )
|
||||
{
|
||||
if( material->m_Name == mat_name )
|
||||
{
|
||||
m_model->m_Materials = material;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
DBG( printf( " read_material error: material not found\n" ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DBG( printf( " failed material\n") );
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_Material()
|
||||
{
|
||||
char text[128];
|
||||
glm::vec3 vertex;
|
||||
|
||||
//DBG( printf( " Material\n") );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "diffuseColor" ) == 0 )
|
||||
{
|
||||
//DBG( printf( " diffuseColor") );
|
||||
parseVertex ( m_file, vertex);
|
||||
//DBG( printf( "\n") );
|
||||
m_model->m_Materials->m_DiffuseColor.push_back( vertex );
|
||||
} else if( strcmp( text, "emissiveColor" ) == 0 )
|
||||
{
|
||||
//DBG( printf( " emissiveColor") );
|
||||
parseVertex ( m_file, vertex);
|
||||
//DBG( printf( "\n") );
|
||||
if( GetMaster()->m_use_modelfile_emissiveColor == true )
|
||||
{
|
||||
m_model->m_Materials->m_EmissiveColor.push_back( vertex );
|
||||
}
|
||||
} else if( strcmp( text, "specularColor" ) == 0 )
|
||||
{
|
||||
//DBG( printf( " specularColor") );
|
||||
parseVertex ( m_file, vertex);
|
||||
//DBG( printf( "\n") );
|
||||
if( GetMaster()->m_use_modelfile_specularColor == true )
|
||||
{
|
||||
m_model->m_Materials->m_SpecularColor.push_back( vertex );
|
||||
}
|
||||
} else if( strcmp( text, "ambientIntensity" ) == 0 )
|
||||
{
|
||||
float ambientIntensity;
|
||||
parseFloat( m_file, &ambientIntensity );
|
||||
//DBG( printf( " ambientIntensity %f\n", ambientIntensity) );
|
||||
if( GetMaster()->m_use_modelfile_ambientIntensity == true )
|
||||
{
|
||||
m_model->m_Materials->m_AmbientColor.push_back( glm::vec3( ambientIntensity, ambientIntensity, ambientIntensity ) );
|
||||
}
|
||||
} else if( strcmp( text, "transparency" ) == 0 )
|
||||
{
|
||||
float transparency;
|
||||
parseFloat( m_file, &transparency );
|
||||
//DBG( printf( " transparency %f\n", transparency) );
|
||||
if( GetMaster()->m_use_modelfile_transparency == true )
|
||||
{
|
||||
m_model->m_Materials->m_Transparency.push_back( transparency );
|
||||
}
|
||||
} else if( strcmp( text, "shininess" ) == 0 )
|
||||
{
|
||||
float shininess;
|
||||
parseFloat( m_file, &shininess );
|
||||
//DBG( printf( " shininess %f\n", shininess) );
|
||||
// VRML value is normalized and openGL expects a value 0 - 128
|
||||
if( GetMaster()->m_use_modelfile_shininess == true )
|
||||
{
|
||||
shininess = shininess * 128.0f;
|
||||
m_model->m_Materials->m_Shininess.push_back( shininess );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DBG( printf( " Material failed\n") );
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_IndexedFaceSet()
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( " IndexedFaceSet\n") );
|
||||
|
||||
m_normalPerVertex = false;
|
||||
colorPerVertex = false;
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
//DBG( printf( " } Exit IndexedFaceSet\n") );
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "normalPerVertex" ) == 0 )
|
||||
{
|
||||
if( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if( strcmp( text, "TRUE" ) == 0 )
|
||||
{
|
||||
//DBG( printf( " m_normalPerVertex TRUE\n") );
|
||||
m_normalPerVertex = true;
|
||||
}
|
||||
}
|
||||
} else if( strcmp( text, "colorPerVertex" ) == 0 )
|
||||
{
|
||||
GetNextTag( m_file, text );
|
||||
if( strcmp( text, "TRUE" ) )
|
||||
{
|
||||
//DBG( printf( " colorPerVertex = true\n") );
|
||||
colorPerVertex = true;
|
||||
} else
|
||||
{
|
||||
colorPerVertex = false;
|
||||
}
|
||||
|
||||
} else if( strcmp( text, "Coordinate" ) == 0 )
|
||||
{
|
||||
read_Coordinate();
|
||||
} else if( strcmp( text, "Normal" ) == 0 )
|
||||
{
|
||||
read_Normal();
|
||||
} else if( strcmp( text, "normalIndex" ) == 0 )
|
||||
{
|
||||
read_NormalIndex();
|
||||
} else if( strcmp( text, "Color" ) == 0 )
|
||||
{
|
||||
read_Color();
|
||||
} else if( strcmp( text, "coordIndex" ) == 0 )
|
||||
{
|
||||
read_coordIndex();
|
||||
} else if( strcmp( text, "colorIndex" ) == 0 )
|
||||
{
|
||||
read_colorIndex();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
DBG( printf( " IndexedFaceSet failed %s\n", text) );
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_colorIndex()
|
||||
{
|
||||
//DBG( printf( " read_colorIndex\n" ) );
|
||||
|
||||
m_model->m_MaterialIndex.clear();
|
||||
|
||||
if( colorPerVertex == true )
|
||||
{
|
||||
int index;
|
||||
int first_index;
|
||||
while( fscanf( m_file, "%d, ", &index ) )
|
||||
{
|
||||
if( index == -1 )
|
||||
{
|
||||
// it only implemented color per face, so it will store as the first in the list
|
||||
m_model->m_MaterialIndex.push_back( first_index );
|
||||
} else
|
||||
{
|
||||
first_index = index;
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
int index;
|
||||
while( fscanf( m_file, "%d,", &index ) )
|
||||
{
|
||||
m_model->m_MaterialIndex.push_back( index );
|
||||
}
|
||||
}
|
||||
|
||||
//DBG( printf( " m_MaterialIndex.size: %ld\n", m_model->m_MaterialIndex.size() ) );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_NormalIndex()
|
||||
{
|
||||
//DBG( printf( " read_NormalIndex\n" ) );
|
||||
|
||||
m_model->m_NormalIndex.clear();
|
||||
|
||||
glm::ivec3 coord;
|
||||
|
||||
int dummy; // should be -1
|
||||
|
||||
std::vector<int> coord_list;
|
||||
coord_list.clear();
|
||||
while( fscanf (m_file, "%d, ", &dummy ) == 1 )
|
||||
{
|
||||
if( dummy == -1 )
|
||||
{
|
||||
m_model->m_NormalIndex.push_back( coord_list );
|
||||
//DBG( printf( " size: %lu ", coord_list.size()) );
|
||||
coord_list.clear();
|
||||
} else
|
||||
{
|
||||
coord_list.push_back( dummy );
|
||||
//DBG( printf( "%d ", dummy) );
|
||||
}
|
||||
}
|
||||
|
||||
//DBG( printf( " m_NormalIndex.size: %ld\n", m_model->m_NormalIndex.size() ) );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_coordIndex()
|
||||
{
|
||||
//DBG( printf( " read_coordIndex\n" ) );
|
||||
|
||||
m_model->m_CoordIndex.clear();
|
||||
|
||||
glm::ivec3 coord;
|
||||
|
||||
int dummy; // should be -1
|
||||
|
||||
std::vector<int> coord_list;
|
||||
coord_list.clear();
|
||||
while( fscanf (m_file, "%d, ", &dummy ) == 1 )
|
||||
{
|
||||
if( dummy == -1 )
|
||||
{
|
||||
m_model->m_CoordIndex.push_back( coord_list );
|
||||
//DBG( printf( " size: %lu ", coord_list.size()) );
|
||||
coord_list.clear();
|
||||
} else
|
||||
{
|
||||
coord_list.push_back( dummy );
|
||||
//DBG( printf( "%d ", dummy) );
|
||||
}
|
||||
}
|
||||
|
||||
//DBG( printf( " m_CoordIndex.size: %ld\n", m_model->m_CoordIndex.size() ) );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_Color()
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( " read_Color\n") );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
//DBG( printf( " m_DiffuseColor.size: %ld\n", m_model->m_Materials->m_DiffuseColor.size() ) );
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "color" ) == 0 )
|
||||
{
|
||||
parseVertexList( m_file, m_model->m_Materials->m_DiffuseColor );
|
||||
}
|
||||
}
|
||||
|
||||
//DBG( printf( " read_Color failed\n") );
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_Normal()
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( " Normal\n") );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
//DBG( printf( " m_PerFaceNormalsNormalized.size: %lu\n", m_model->m_PerFaceNormalsNormalized.size() ) );
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "vector" ) == 0 )
|
||||
{
|
||||
if(m_normalPerVertex == false )
|
||||
{
|
||||
parseVertexList( m_file, m_model->m_PerFaceNormalsNormalized );
|
||||
} else
|
||||
{
|
||||
parseVertexList( m_file, m_model->m_PerVertexNormalsNormalized );
|
||||
|
||||
//DBG( printf( " m_PerVertexNormalsNormalized.size: %lu\n", m_model->m_PerVertexNormalsNormalized.size() ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML2_MODEL_PARSER::read_Coordinate()
|
||||
{
|
||||
char text[128];
|
||||
|
||||
//DBG( printf( " Coordinate\n") );
|
||||
|
||||
while( GetNextTag( m_file, text ) )
|
||||
{
|
||||
if ( ( text == NULL ) || ( *text == ']' ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ( *text == '}' ) )
|
||||
{
|
||||
//DBG( printf( " m_Point.size: %lu\n", m_model->m_Point.size() ) );
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( strcmp( text, "point" ) == 0 )
|
||||
{
|
||||
parseVertexList( m_file, m_model->m_Point);
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
+36
-481
@@ -4,7 +4,7 @@
|
||||
* Copyright (C) 2013 Tuomas Vaherkoski <tuomasvaherkoski@gmail.com>
|
||||
* Copyright (C) 2012 Jean-Pierre Charras, jp.charras@wanadoo.fr
|
||||
* Copyright (C) 2011 Wayne Stambaugh <stambaughw@verizon.net>
|
||||
* Copyright (C) 1992-2011 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
@@ -37,23 +37,34 @@
|
||||
#include "3d_struct.h"
|
||||
#include "modelparsers.h"
|
||||
|
||||
// separator chars
|
||||
static const char* sep_chars = " \t\n\r";
|
||||
|
||||
VRML_MODEL_PARSER::VRML_MODEL_PARSER( S3D_MASTER* aMaster ) :
|
||||
S3D_MODEL_PARSER( aMaster )
|
||||
{}
|
||||
{
|
||||
vrml1_parser = new VRML1_MODEL_PARSER( aMaster );
|
||||
vrml2_parser = new VRML2_MODEL_PARSER( aMaster );
|
||||
}
|
||||
|
||||
|
||||
VRML_MODEL_PARSER::~VRML_MODEL_PARSER()
|
||||
{}
|
||||
{
|
||||
if( vrml1_parser )
|
||||
{
|
||||
delete vrml1_parser;
|
||||
}
|
||||
if( vrml2_parser )
|
||||
{
|
||||
delete vrml2_parser;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void VRML_MODEL_PARSER::Load( const wxString aFilename )
|
||||
{
|
||||
char line[1024], * text;
|
||||
char line[12];
|
||||
FILE* file;
|
||||
int LineNum = 0;
|
||||
|
||||
//DBG( printf( "Load %s", static_cast<const char*>(aFilename.mb_str()) ) );
|
||||
|
||||
file = wxFopen( aFilename, wxT( "rt" ) );
|
||||
|
||||
@@ -62,485 +73,29 @@ void VRML_MODEL_PARSER::Load( const wxString aFilename )
|
||||
return;
|
||||
}
|
||||
|
||||
// Switch the locale to standard C (needed to print floating point numbers like 1.3)
|
||||
SetLocaleTo_C_standard();
|
||||
|
||||
while( GetLine( file, line, &LineNum, 512 ) )
|
||||
if( fgets( line, 11, file ) == NULL )
|
||||
{
|
||||
text = strtok( line, sep_chars );
|
||||
|
||||
if( stricmp( text, "DEF" ) == 0 || stricmp( text, "Group" ) == 0 )
|
||||
{
|
||||
while( GetLine( file, line, &LineNum, 512 ) )
|
||||
{
|
||||
text = strtok( line, sep_chars );
|
||||
|
||||
if( text == NULL )
|
||||
continue;
|
||||
|
||||
if( *text == '}' )
|
||||
break;
|
||||
|
||||
if( stricmp( text, "children" ) == 0 )
|
||||
{
|
||||
readChildren( file, &LineNum );
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose( file );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
fclose( file );
|
||||
SetLocaleTo_Default(); // revert to the current locale
|
||||
}
|
||||
|
||||
|
||||
int VRML_MODEL_PARSER::readMaterial( FILE* file, int* LineNum )
|
||||
{
|
||||
char line[512], * text, * command;
|
||||
wxString mat_name;
|
||||
S3D_MATERIAL* material = NULL;
|
||||
|
||||
command = strtok( NULL, sep_chars );
|
||||
text = strtok( NULL, sep_chars );
|
||||
mat_name = FROM_UTF8( text );
|
||||
|
||||
if( stricmp( command, "USE" ) == 0 )
|
||||
|
||||
|
||||
if( stricmp( line, "#VRML V2.0" ) == 0)
|
||||
{
|
||||
for( material = GetMaster()->m_Materials; material; material = material->Next() )
|
||||
{
|
||||
if( material->m_Name == mat_name )
|
||||
{
|
||||
material->SetMaterial();
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
//DBG( printf( "About to parser a #VRML V2.0 file\n" ) );
|
||||
vrml2_parser->Load( aFilename );
|
||||
|
||||
return;
|
||||
}
|
||||
else if( stricmp( line, "#VRML V1.0" ) == 0)
|
||||
{
|
||||
//DBG( printf( "About to parser a #VRML V1.0 file\n" ) );
|
||||
vrml1_parser->Load( aFilename );
|
||||
|
||||
DBG( printf( "ReadMaterial error: material not found\n" ) );
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if( stricmp( command, "DEF" ) == 0 || stricmp( command, "Material") == 0)
|
||||
{
|
||||
material = new S3D_MATERIAL( GetMaster(), mat_name );
|
||||
|
||||
GetMaster()->Insert( material );
|
||||
|
||||
while( GetLine( file, line, LineNum, 512 ) )
|
||||
{
|
||||
text = strtok( line, sep_chars );
|
||||
|
||||
if( text == NULL )
|
||||
continue;
|
||||
|
||||
if( text[0] == '}' )
|
||||
{
|
||||
material->SetMaterial();
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( stricmp( text, "diffuseColor" ) == 0 )
|
||||
{
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_DiffuseColor.x = atof( text );
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_DiffuseColor.y = atof( text );
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_DiffuseColor.z = atof( text );
|
||||
}
|
||||
else if( stricmp( text, "emissiveColor" ) == 0 )
|
||||
{
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_EmissiveColor.x = atof( text );
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_EmissiveColor.y = atof( text );
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_EmissiveColor.z = atof( text );
|
||||
}
|
||||
else if( strnicmp( text, "specularColor", 13 ) == 0 )
|
||||
{
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_SpecularColor.x = atof( text );
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_SpecularColor.y = atof( text );
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_SpecularColor.z = atof( text );
|
||||
}
|
||||
else if( strnicmp( text, "ambientIntensity", 16 ) == 0 )
|
||||
{
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_AmbientIntensity = atof( text );
|
||||
}
|
||||
else if( strnicmp( text, "transparency", 12 ) == 0 )
|
||||
{
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_Transparency = atof( text );
|
||||
}
|
||||
else if( strnicmp( text, "shininess", 9 ) == 0 )
|
||||
{
|
||||
text = strtok( NULL, sep_chars );
|
||||
material->m_Shininess = atof( text );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int VRML_MODEL_PARSER::readChildren( FILE* file, int* LineNum )
|
||||
{
|
||||
char line[1024], * text;
|
||||
|
||||
while( GetLine( file, line, LineNum, 512 ) )
|
||||
{
|
||||
text = strtok( line, sep_chars );
|
||||
|
||||
if( *text == ']' )
|
||||
return 0;
|
||||
|
||||
if( *text == ',' )
|
||||
continue;
|
||||
|
||||
if( stricmp( text, "Shape" ) == 0 )
|
||||
{
|
||||
readShape( file, LineNum );
|
||||
}
|
||||
else
|
||||
{
|
||||
DBG( printf( "ReadChildren error line %d <%s> \n", *LineNum, text ) );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int VRML_MODEL_PARSER::readShape( FILE* file, int* LineNum )
|
||||
{
|
||||
char line[1024], * text;
|
||||
int err = 1;
|
||||
|
||||
while( GetLine( file, line, LineNum, 512 ) )
|
||||
{
|
||||
text = strtok( line, sep_chars );
|
||||
|
||||
if( *text == '}' )
|
||||
{
|
||||
err = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if( stricmp( text, "appearance" ) == 0 )
|
||||
{
|
||||
readAppearance( file, LineNum );
|
||||
}
|
||||
else if( stricmp( text, "geometry" ) == 0 )
|
||||
{
|
||||
readGeometry( file, LineNum );
|
||||
}
|
||||
else
|
||||
{
|
||||
DBG( printf( "ReadShape error line %d <%s> \n", *LineNum, text ) );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
int VRML_MODEL_PARSER::readAppearance( FILE* file, int* LineNum )
|
||||
{
|
||||
char line[1024], * text;
|
||||
int err = 1;
|
||||
|
||||
while( GetLine( file, line, LineNum, 512 ) )
|
||||
{
|
||||
text = strtok( line, sep_chars );
|
||||
|
||||
if( *text == '}' )
|
||||
{
|
||||
err = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if( stricmp( text, "material" ) == 0 )
|
||||
{
|
||||
readMaterial( file, LineNum );
|
||||
}
|
||||
else
|
||||
{
|
||||
DBG( printf( "ReadAppearance error line %d <%s> \n", *LineNum, text ) );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
#define BUFSIZE 2000
|
||||
|
||||
void VRML_MODEL_PARSER::readCoordsList( FILE* file, char* text_buffer,
|
||||
std::vector< double >& aList, int* LineNum )
|
||||
{
|
||||
unsigned int ii = 0, jj = 0;
|
||||
char* text;
|
||||
bool HasData = false;
|
||||
bool StartData = false;
|
||||
bool EndNode = false;
|
||||
char string_num[512];
|
||||
|
||||
text = text_buffer;
|
||||
|
||||
while( !EndNode )
|
||||
{
|
||||
if( *text == 0 ) // Needs data !
|
||||
{
|
||||
text = text_buffer;
|
||||
GetLine( file, text_buffer, LineNum, 512 );
|
||||
}
|
||||
|
||||
while( !EndNode && *text )
|
||||
{
|
||||
switch( *text )
|
||||
{
|
||||
case '[':
|
||||
StartData = true;
|
||||
jj = 0;
|
||||
string_num[jj] = 0;
|
||||
break;
|
||||
|
||||
case '}':
|
||||
EndNode = true;
|
||||
break;
|
||||
|
||||
case ']':
|
||||
case '\t':
|
||||
case ' ':
|
||||
case ',':
|
||||
jj = 0;
|
||||
|
||||
if( !StartData || !HasData )
|
||||
break;
|
||||
|
||||
aList.push_back( atof( string_num ) );
|
||||
string_num[jj] = 0;
|
||||
ii++;
|
||||
|
||||
HasData = false;
|
||||
|
||||
if( *text == ']' )
|
||||
{
|
||||
StartData = false;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
if( !StartData )
|
||||
break;
|
||||
|
||||
if( jj >= sizeof( string_num ) )
|
||||
break;
|
||||
|
||||
string_num[jj] = *text;
|
||||
jj++;
|
||||
string_num[jj] = 0;
|
||||
HasData = true;
|
||||
break;
|
||||
}
|
||||
|
||||
text++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int VRML_MODEL_PARSER::readGeometry( FILE* file, int* LineNum )
|
||||
{
|
||||
char line[1024], buffer[1024], * text;
|
||||
int err = 1;
|
||||
std::vector< double > points;
|
||||
std::vector< double > list;
|
||||
double vrmlunits_to_3Dunits = g_Parm_3D_Visu.m_BiuTo3Dunits * UNITS3D_TO_UNITSPCB;
|
||||
|
||||
while( GetLine( file, line, LineNum, 512 ) )
|
||||
{
|
||||
strcpy( buffer, line );
|
||||
text = strtok( buffer, sep_chars );
|
||||
|
||||
if( *text == '}' )
|
||||
{
|
||||
err = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if( stricmp( text, "normalPerVertex" ) == 0 )
|
||||
{
|
||||
text = strtok( NULL, " ,\t\n\r" );
|
||||
|
||||
if( stricmp( text, "true" ) == 0 )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if( stricmp( text, "colorPerVertex" ) == 0 )
|
||||
{
|
||||
text = strtok( NULL, " ,\t\n\r" );
|
||||
|
||||
if( stricmp( text, "true" ) == 0 )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if( stricmp( text, "normal" ) == 0 )
|
||||
{
|
||||
readCoordsList( file, line, list, LineNum );
|
||||
list.clear();
|
||||
continue;
|
||||
}
|
||||
|
||||
if( stricmp( text, "normalIndex" ) == 0 )
|
||||
{
|
||||
while( GetLine( file, line, LineNum, 512 ) )
|
||||
{
|
||||
text = strtok( line, " ,\t\n\r" );
|
||||
|
||||
while( text )
|
||||
{
|
||||
if( *text == ']' )
|
||||
break;
|
||||
|
||||
text = strtok( NULL, " ,\t\n\r" );
|
||||
}
|
||||
|
||||
if( text && (*text == ']') )
|
||||
break;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if( stricmp( text, "color" ) == 0 )
|
||||
{
|
||||
readCoordsList( file, line, list, LineNum );
|
||||
list.clear();
|
||||
continue;
|
||||
}
|
||||
|
||||
if( stricmp( text, "solid" ) == 0 )
|
||||
{
|
||||
// ignore solid
|
||||
continue;
|
||||
}
|
||||
|
||||
if( stricmp( text, "colorIndex" ) == 0 )
|
||||
{
|
||||
while( GetLine( file, line, LineNum, 512 ) )
|
||||
{
|
||||
text = strtok( line, " ,\t\n\r" );
|
||||
|
||||
while( text )
|
||||
{
|
||||
if( *text == ']' )
|
||||
break;
|
||||
|
||||
text = strtok( NULL, " ,\t\n\r" );
|
||||
}
|
||||
|
||||
if( text && (*text == ']') )
|
||||
break;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if( stricmp( text, "coord" ) == 0 )
|
||||
{
|
||||
readCoordsList( file, line, points, LineNum );
|
||||
}
|
||||
else if( stricmp( text, "coordIndex" ) == 0 )
|
||||
{
|
||||
if( points.size() < 3 || points.size() % 3 != 0 )
|
||||
{
|
||||
wxLogError( wxT( "3D geometry read error <%s> at line %d." ),
|
||||
GetChars( FROM_UTF8( text ) ), *LineNum );
|
||||
err = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
std::vector< int > coordIndex;
|
||||
std::vector< S3D_VERTEX > vertices;
|
||||
|
||||
while( GetLine( file, line, LineNum, 512 ) )
|
||||
{
|
||||
int jj;
|
||||
text = strtok( line, " ,\t\n\r" );
|
||||
|
||||
while( text )
|
||||
{
|
||||
if( *text == ']' )
|
||||
break;
|
||||
|
||||
jj = atoi( text );
|
||||
|
||||
if( jj < 0 )
|
||||
{
|
||||
for( jj = 0; jj < (int) coordIndex.size(); jj++ )
|
||||
{
|
||||
int kk = coordIndex[jj] * 3;
|
||||
|
||||
if( (kk < 0) || ((kk + 3) > (int)points.size()) )
|
||||
{
|
||||
wxLogError( wxT( "3D geometry index read error <%s> at line %d." ),
|
||||
GetChars( FROM_UTF8( text ) ), *LineNum );
|
||||
err = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
S3D_VERTEX vertex;
|
||||
vertex.x = points[kk];
|
||||
vertex.y = points[kk + 1];
|
||||
vertex.z = points[kk + 2];
|
||||
vertices.push_back( vertex );
|
||||
}
|
||||
|
||||
GetMaster()->Set_Object_Coords( vertices );
|
||||
Set_Object_Data( vertices, vrmlunits_to_3Dunits );
|
||||
vertices.clear();
|
||||
coordIndex.clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
coordIndex.push_back( jj );
|
||||
}
|
||||
|
||||
text = strtok( NULL, " ,\t\n\r" );
|
||||
}
|
||||
|
||||
if( text && (*text == ']') )
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wxLogError( wxT( "3D geometry read error <%s> at line %d." ),
|
||||
GetChars( FROM_UTF8( text ) ), *LineNum );
|
||||
err = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return err;
|
||||
DBG( printf( "Unknown VRML file format: %s\n", line ) );
|
||||
}
|
||||
|
||||
+163
-51
@@ -66,6 +66,36 @@ void X3D_MODEL_PARSER::Load( const wxString aFilename )
|
||||
return;
|
||||
}
|
||||
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glEnable(GL_NORMALIZE);
|
||||
|
||||
float vrmlunits_to_3Dunits = g_Parm_3D_Visu.m_BiuTo3Dunits * UNITS3D_TO_UNITSPCB;
|
||||
glScalef( vrmlunits_to_3Dunits, vrmlunits_to_3Dunits, vrmlunits_to_3Dunits );
|
||||
|
||||
glm::vec3 matScale( GetMaster()->m_MatScale.x, GetMaster()->m_MatScale.y,
|
||||
GetMaster()->m_MatScale.z );
|
||||
glm::vec3 matRot( GetMaster()->m_MatRotation.x, GetMaster()->m_MatRotation.y,
|
||||
GetMaster()->m_MatRotation.z );
|
||||
glm::vec3 matPos( GetMaster()->m_MatPosition.x, GetMaster()->m_MatPosition.y,
|
||||
GetMaster()->m_MatPosition.z );
|
||||
|
||||
|
||||
#define SCALE_3D_CONV ((IU_PER_MILS * 1000.0f) / UNITS3D_TO_UNITSPCB)
|
||||
|
||||
|
||||
glTranslatef( matPos.x * SCALE_3D_CONV, matPos.y * SCALE_3D_CONV, matPos.z * SCALE_3D_CONV );
|
||||
|
||||
glRotatef(-matRot.z, 0.0f, 0.0f, 1.0f );
|
||||
glRotatef(-matRot.y, 0.0f, 1.0f, 0.0f );
|
||||
glRotatef(-matRot.x, 1.0f, 0.0f, 0.0f );
|
||||
|
||||
glScalef( matScale.x, matScale.y, matScale.z );
|
||||
|
||||
// Switch the locale to standard C (needed to print floating point numbers)
|
||||
LOCALE_IO toggle;
|
||||
|
||||
childs.clear();
|
||||
|
||||
// Shapes are inside of Transform nodes
|
||||
// Transform node contains information about
|
||||
// transition, scale and rotation of the shape
|
||||
@@ -76,12 +106,25 @@ void X3D_MODEL_PARSER::Load( const wxString aFilename )
|
||||
node_it != transforms.end();
|
||||
node_it++ )
|
||||
{
|
||||
m_model = new S3D_MESH();
|
||||
childs.push_back( m_model );
|
||||
|
||||
readTransform( *node_it );
|
||||
}
|
||||
|
||||
//DBG( printf( "chils size:%lu\n", childs.size() ) );
|
||||
|
||||
if( GetMaster()->IsOpenGlAllowed() )
|
||||
{
|
||||
for( unsigned int idx = 0; idx < childs.size(); idx++ )
|
||||
{
|
||||
childs[idx]->openGL_RenderAllChilds();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
wxString X3D_MODEL_PARSER::VRML_representation()
|
||||
wxString X3D_MODEL_PARSER::VRML2_representation()
|
||||
{
|
||||
wxString output;
|
||||
|
||||
@@ -188,6 +231,8 @@ void X3D_MODEL_PARSER::readTransform( wxXmlNode* aTransformNode )
|
||||
|
||||
void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
|
||||
{
|
||||
glm::vec3 color;
|
||||
|
||||
PROPERTY_MAP properties;
|
||||
GetNodeProperties( aMatNode, properties );
|
||||
|
||||
@@ -199,30 +244,42 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
|
||||
S3D_MATERIAL* material = new S3D_MATERIAL( GetMaster(), properties[ wxT( "DEF" ) ] );
|
||||
GetMaster()->Insert( material );
|
||||
|
||||
m_model->m_Materials = material;
|
||||
|
||||
if( !parseDoubleTriplet( properties[ wxT( "diffuseColor" ) ],
|
||||
material->m_DiffuseColor ) )
|
||||
color ) )
|
||||
{
|
||||
DBG( printf("diffuseColor parsing error") );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_model->m_Materials->m_DiffuseColor.push_back( color );
|
||||
}
|
||||
|
||||
if( !parseDoubleTriplet( properties[ wxT( "specularColor" ) ],
|
||||
material->m_SpecularColor ) )
|
||||
if( !parseDoubleTriplet( properties[ wxT( "specularColor" ) ], color ) )
|
||||
{
|
||||
DBG( printf("specularColor parsing error") );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_model->m_Materials->m_SpecularColor.push_back( color );
|
||||
}
|
||||
|
||||
if( !parseDoubleTriplet( properties[ wxT( "emissiveColor" ) ],
|
||||
material->m_EmissiveColor ) )
|
||||
if( !parseDoubleTriplet( properties[ wxT( "emissiveColor" ) ], color ) )
|
||||
{
|
||||
DBG( printf("emissiveColor parsing error") );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_model->m_Materials->m_EmissiveColor.push_back( color );
|
||||
}
|
||||
|
||||
wxStringTokenizer values;
|
||||
values.SetString( properties[ wxT( "ambientIntensity" ) ] );
|
||||
|
||||
if( values.GetNextToken().ToDouble( &amb ) )
|
||||
{
|
||||
material->m_AmbientIntensity = amb;
|
||||
m_model->m_Materials->m_AmbientColor.push_back( glm::vec3( amb, amb, amb ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -233,7 +290,9 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
|
||||
|
||||
if( values.GetNextToken().ToDouble( &shine ) )
|
||||
{
|
||||
material->m_Shininess = shine;
|
||||
// VRML value is normalized and openGL expects a value 0 - 128
|
||||
shine = shine * 128.0f;
|
||||
m_model->m_Materials->m_Shininess.push_back( shine );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -244,15 +303,13 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
|
||||
|
||||
if( values.GetNextToken().ToDouble( &transp ) )
|
||||
{
|
||||
material->m_Transparency = transp;
|
||||
m_model->m_Materials->m_Transparency.push_back( transp );
|
||||
}
|
||||
else
|
||||
{
|
||||
DBG( printf( "trans error") );
|
||||
}
|
||||
|
||||
material->SetMaterial();
|
||||
|
||||
// VRML
|
||||
wxString vrml_material;
|
||||
PROPERTY_MAP::const_iterator p = ++properties.begin(); // skip DEF
|
||||
@@ -278,32 +335,33 @@ void X3D_MODEL_PARSER::readMaterial( wxXmlNode* aMatNode )
|
||||
wxString vrml_material;
|
||||
|
||||
vrml_material.Append( wxString::Format( wxT( "specularColor %f %f %f\n" ),
|
||||
material->m_SpecularColor.x,
|
||||
material->m_SpecularColor.y,
|
||||
material->m_SpecularColor.z ) );
|
||||
material->m_SpecularColor[0].x,
|
||||
material->m_SpecularColor[0].y,
|
||||
material->m_SpecularColor[0].z ) );
|
||||
|
||||
vrml_material.Append( wxString::Format( wxT( "diffuseColor %f %f %f\n" ),
|
||||
material->m_DiffuseColor.x,
|
||||
material->m_DiffuseColor.y,
|
||||
material->m_DiffuseColor.z ) );
|
||||
material->m_DiffuseColor[0].x,
|
||||
material->m_DiffuseColor[0].y,
|
||||
material->m_DiffuseColor[0].z ) );
|
||||
|
||||
vrml_material.Append( wxString::Format( wxT( "emissiveColor %f %f %f\n" ),
|
||||
material->m_EmissiveColor.x,
|
||||
material->m_EmissiveColor.y,
|
||||
material->m_EmissiveColor.z ) );
|
||||
material->m_EmissiveColor[0].x,
|
||||
material->m_EmissiveColor[0].y,
|
||||
material->m_EmissiveColor[0].z ) );
|
||||
|
||||
vrml_material.Append( wxString::Format( wxT( "ambientIntensity %f\n"),
|
||||
material->m_AmbientIntensity ) );
|
||||
material->m_AmbientColor[0].x ) );
|
||||
|
||||
vrml_material.Append( wxString::Format( wxT( "shininess %f\n"),
|
||||
material->m_Shininess ) );
|
||||
material->m_Shininess[0] ) );
|
||||
|
||||
vrml_material.Append( wxString::Format( wxT( "transparency %f\n"),
|
||||
material->m_Transparency ) );
|
||||
material->m_Transparency[0] ) );
|
||||
|
||||
vrml_materials.push_back( vrml_material );
|
||||
|
||||
material->SetMaterial();
|
||||
m_model->m_Materials = material;
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -318,9 +376,17 @@ bool X3D_MODEL_PARSER::parseDoubleTriplet( const wxString& aData,
|
||||
{
|
||||
wxStringTokenizer tokens(aData);
|
||||
|
||||
return tokens.GetNextToken().ToDouble( &aResult.x ) &&
|
||||
tokens.GetNextToken().ToDouble( &aResult.y ) &&
|
||||
tokens.GetNextToken().ToDouble( &aResult.z );
|
||||
double x,y,z;
|
||||
|
||||
bool ret = tokens.GetNextToken().ToDouble( &x ) &&
|
||||
tokens.GetNextToken().ToDouble( &y ) &&
|
||||
tokens.GetNextToken().ToDouble( &z );
|
||||
|
||||
aResult.x = x;
|
||||
aResult.y = y;
|
||||
aResult.z = z;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -373,16 +439,20 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
|
||||
double angle = 0.0;
|
||||
wxStringTokenizer tokens(aTransformProps[ wxT( "rotation" ) ]);
|
||||
|
||||
if( !(tokens.GetNextToken().ToDouble( &rotation.x ) &&
|
||||
tokens.GetNextToken().ToDouble( &rotation.y ) &&
|
||||
tokens.GetNextToken().ToDouble( &rotation.z ) &&
|
||||
double x,y,z;
|
||||
if( !(tokens.GetNextToken().ToDouble( &x ) &&
|
||||
tokens.GetNextToken().ToDouble( &y ) &&
|
||||
tokens.GetNextToken().ToDouble( &z ) &&
|
||||
tokens.GetNextToken().ToDouble( &angle ) ) )
|
||||
{
|
||||
DBG( printf("rotation read error") );
|
||||
}
|
||||
|
||||
double vrmlunits_to_3Dunits = g_Parm_3D_Visu.m_BiuTo3Dunits *
|
||||
UNITS3D_TO_UNITSPCB;
|
||||
else
|
||||
{
|
||||
rotation.x = x;
|
||||
rotation.y = y;
|
||||
rotation.z = z;
|
||||
}
|
||||
|
||||
/* Step 2: Read all coordinate points
|
||||
* ---------------------------- */
|
||||
@@ -439,7 +509,7 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
|
||||
point.y += translation.y;
|
||||
point.z += translation.z;
|
||||
|
||||
triplets.push_back(point);
|
||||
m_model->m_Point.push_back( point );
|
||||
|
||||
// VRML
|
||||
vrml_pointlist.Append( wxString::Format( wxT( "%f %f %f\n" ), point.x, point.y, point.z ) );
|
||||
@@ -447,18 +517,71 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
|
||||
|
||||
vrml_points.push_back( vrml_pointlist );
|
||||
|
||||
|
||||
/* Step 3: Read all color points
|
||||
* ---------------------------- */
|
||||
std::vector< double > color_points;
|
||||
NODE_LIST color;
|
||||
GetChildsByName( aFaceNode, wxT( "Color" ), color);
|
||||
|
||||
// Some models lack color information, need to handle this safely
|
||||
if( !color.empty() )
|
||||
{
|
||||
PROPERTY_MAP color_properties;
|
||||
// IndexedFaceSet has one Coordinate child node
|
||||
GetNodeProperties( color[0], color_properties );
|
||||
|
||||
// Save points to vector as doubles
|
||||
wxStringTokenizer colorpoint_tokens( color_properties[ wxT("color") ] );
|
||||
double color_point = 0.0;
|
||||
|
||||
while( colorpoint_tokens.HasMoreTokens() )
|
||||
{
|
||||
if( colorpoint_tokens.GetNextToken().ToDouble( &color_point ) )
|
||||
{
|
||||
color_points.push_back( color_point );
|
||||
}
|
||||
else
|
||||
{
|
||||
wxLogError( wxT( "Error converting to double" ) );
|
||||
}
|
||||
}
|
||||
|
||||
if( color_points.size() % 3 != 0 )
|
||||
{
|
||||
DBG( printf( "Number of points is incorrect" ) );
|
||||
return;
|
||||
}
|
||||
|
||||
/* Create 3D face color from 3 color points
|
||||
*/
|
||||
m_model->m_Materials->m_DiffuseColor.clear();
|
||||
for( unsigned id = 0; id < color_points.size() / 3; id++ )
|
||||
{
|
||||
m_model->m_MaterialIndex.push_back( id );
|
||||
|
||||
int color_triplet_indx = id * 3;
|
||||
glm::vec3 colorface( color_points[ color_triplet_indx + 0 ],
|
||||
color_points[ color_triplet_indx + 1 ],
|
||||
color_points[ color_triplet_indx + 2 ] );
|
||||
|
||||
m_model->m_Materials->m_DiffuseColor.push_back( colorface );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* -- Read coordinate indexes -- */
|
||||
PROPERTY_MAP faceset_properties;
|
||||
GetNodeProperties( aFaceNode, faceset_properties );
|
||||
|
||||
std::vector< S3D_VERTEX > vertices;
|
||||
std::vector< int > coordIndex;
|
||||
|
||||
wxString coordIndex_str = faceset_properties[ wxT( "coordIndex" ) ];
|
||||
wxStringTokenizer index_tokens( coordIndex_str );
|
||||
|
||||
wxString vrml_coord_indx_list;
|
||||
|
||||
std::vector<int> coord_list;
|
||||
coord_list.clear();
|
||||
|
||||
while( index_tokens.HasMoreTokens() )
|
||||
{
|
||||
long index = 0;
|
||||
@@ -470,25 +593,14 @@ void X3D_MODEL_PARSER::readIndexedFaceSet( wxXmlNode* aFaceNode,
|
||||
{
|
||||
/* Step 4: Apply geometry to Master object
|
||||
* --------------------------------------- */
|
||||
std::vector<int>::const_iterator id;
|
||||
m_model->m_CoordIndex.push_back( coord_list );
|
||||
|
||||
for( id = coordIndex.begin();
|
||||
id != coordIndex.end();
|
||||
id++ )
|
||||
{
|
||||
vertices.push_back( triplets.at( *id ) );
|
||||
}
|
||||
|
||||
GetMaster()->Set_Object_Coords( vertices );
|
||||
Set_Object_Data( vertices, vrmlunits_to_3Dunits );
|
||||
|
||||
vertices.clear();
|
||||
coordIndex.clear();
|
||||
coord_list.clear();
|
||||
vrml_coord_indx_list.Append( wxT( "-1\n" ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
coordIndex.push_back( index );
|
||||
coord_list.push_back( index );
|
||||
vrml_coord_indx_list.Append( wxString::Format( wxT( "%u " ), index ) );
|
||||
}
|
||||
}
|
||||
|
||||
+155
-51
@@ -23,8 +23,9 @@ set( CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules )
|
||||
# reports.
|
||||
#
|
||||
|
||||
option( USE_KIWAY_DLLS
|
||||
"Build the major modules as KIFACE DLLs or DSOs, will soon be the norm." OFF )
|
||||
#option( USE_KIWAY_DLLS "Build the major modules as KIFACE DLLs or DSOs, will soon be the norm." ON )
|
||||
set( USE_KIWAY_DLLS true ) # this is now mandatory, the code is the same anyways, the old code is gone.
|
||||
|
||||
|
||||
# The desire is to migrate designs *away from* case independence, and to create designs which use
|
||||
# literally (case specific) interpreted component names. But for backwards compatibility,
|
||||
@@ -58,9 +59,14 @@ option( KICAD_SCRIPTING_WXPYTHON
|
||||
)
|
||||
|
||||
option( KICAD_BUILD_STATIC
|
||||
"Builds Kicad and all libraries static (except wx-widgets)"
|
||||
"Builds Kicad and all libraries static"
|
||||
)
|
||||
|
||||
option( KICAD_BUILD_DYNAMIC
|
||||
"Builds Kicad and all libraries dynamic (required for wxPython)"
|
||||
)
|
||||
|
||||
|
||||
# WARNING: KiCad developers strongly advise you to build Boost with supplied patches,
|
||||
# as it is known to work with KiCad. Other versions may contain bugs that may result
|
||||
# in KiCad errors.
|
||||
@@ -76,7 +82,7 @@ mark_as_advanced( KICAD_SKIP_BOOST ) # Normal builders should build Boost.
|
||||
# when not defined by user, the default is python.exe under Windows and python2 for others
|
||||
# python binary file should be is exec path.
|
||||
|
||||
option( BUILD_GITHUB_PLUGIN "Build the GITHUB_PLUGIN for pcbnew." OFF )
|
||||
option( BUILD_GITHUB_PLUGIN "Build the GITHUB_PLUGIN for pcbnew." ON )
|
||||
|
||||
# This can be set to a custom name to brag about a particular branch in the "About" dialog:
|
||||
set( KICAD_REPO_NAME "product" CACHE STRING "Name of the tree from which this build came." )
|
||||
@@ -93,9 +99,9 @@ set( DOWNLOAD_DIR ${PROJECT_SOURCE_DIR}/.downloads-by-cmake
|
||||
LINK_DIRECTORIES( ${LINK_DIRECTORIES_PATH} )
|
||||
|
||||
if( UNIX )
|
||||
set( KICAD_USER_CONFIG_DIR $ENV{HOME} CACHE PATH "Location of user specifig KiCad config files" )
|
||||
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 specifig KiCad config files" )
|
||||
set( KICAD_USER_CONFIG_DIR $ENV{%APPDATA%} CACHE PATH "Location of user specific KiCad config files" )
|
||||
endif()
|
||||
mark_as_advanced( KICAD_USER_CONFIG_DIR )
|
||||
|
||||
@@ -110,6 +116,12 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
OUTPUT_VARIABLE GCC_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
|
||||
if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
set( TO_LINKER -XLinker )
|
||||
else()
|
||||
set( TO_LINKER -Wl )
|
||||
endif()
|
||||
|
||||
# Establish -Wall early, so specialized relaxations of this may come
|
||||
# subsequently on the command line, such as in pcbnew/github/CMakeLists.txt
|
||||
set( CMAKE_C_FLAGS "-Wall ${CMAKE_C_FLAGS}" )
|
||||
@@ -144,6 +156,20 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden" )
|
||||
endif()
|
||||
|
||||
find_package( OpenMP QUIET )
|
||||
|
||||
if( OPENMP_FOUND )
|
||||
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}" )
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}" )
|
||||
add_definitions( -DUSE_OPENMP )
|
||||
|
||||
# MinGW does not include the OpenMP link library and FindOpenMP.cmake does not
|
||||
# set it either. Not sure this is the most elegant solution but it works.
|
||||
if( MINGW )
|
||||
set( OPENMP_LIBRARIES gomp )
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if( MINGW )
|
||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "-s" )
|
||||
|
||||
@@ -177,17 +203,20 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PIC_FLAG}" )
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PIC_FLAG}" )
|
||||
|
||||
if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
set( TO_LINKER -XLinker )
|
||||
else()
|
||||
set( TO_LINKER -Wl )
|
||||
if( NOT APPLE )
|
||||
# Thou shalt not link vaporware and tell us it's a valid DSO (apple ld doesn't support it)
|
||||
set( CMAKE_SHARED_LINKER_FLAGS "${TO_LINKER},--no-undefined" )
|
||||
set( CMAKE_MODULE_LINKER_FLAGS "${TO_LINKER},--no-undefined" )
|
||||
|
||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "-s" )
|
||||
|
||||
# Defeat ELF's ability to use the GOT to replace locally implemented functions
|
||||
# with ones from another module.
|
||||
# https://bugs.launchpad.net/kicad/+bug/1322354
|
||||
set( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${TO_LINKER},-Bsymbolic" )
|
||||
set( CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${TO_LINKER},-Bsymbolic" )
|
||||
endif()
|
||||
|
||||
# Thou shalt not link vaporware and tell us it's a valid DSO:
|
||||
set( CMAKE_SHARED_LINKER_FLAGS "${TO_LINKER},--no-undefined" )
|
||||
set( CMAKE_MODULE_LINKER_FLAGS "${TO_LINKER},--no-undefined" )
|
||||
|
||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "-s" )
|
||||
endif()
|
||||
|
||||
# quiet GCC while in boost
|
||||
@@ -201,16 +230,16 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__ASSERTMACROS__ -mmacosx-version-min=10.5" )
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__ASSERTMACROS__ -mmacosx-version-min=10.5" )
|
||||
|
||||
# Allows .dylib relocation in the future
|
||||
# Allows .dylib relocation in the future - needed by fixbundle
|
||||
set( CMAKE_LD_FLAGS "${CMAKE_LD_FLAGS} -headerpad_max_install_names")
|
||||
|
||||
if( NOT CMAKE_CXX_COMPILER )
|
||||
EXEC_PROGRAM( wx-config ARGS --cc OUTPUT_VARIABLE CMAKE_C_COMPILER )
|
||||
endif( NOT CMAKE_CXX_COMPILER )
|
||||
endif()
|
||||
|
||||
if( NOT CMAKE_CXX_COMPILER )
|
||||
EXEC_PROGRAM( wx-config ARGS --cxx OUTPUT_VARIABLE CMAKE_CXX_COMPILER )
|
||||
endif( NOT CMAKE_CXX_COMPILER )
|
||||
endif()
|
||||
|
||||
endif()
|
||||
|
||||
@@ -326,7 +355,7 @@ include( ExternalProject )
|
||||
include( CheckFindPackageResult )
|
||||
|
||||
# Turn on wxWidgets compatibility mode for some classes
|
||||
add_definitions(-DWX_COMPATIBILITY)
|
||||
add_definitions( -DWX_COMPATIBILITY )
|
||||
|
||||
#######################
|
||||
# Find OpenGL library #
|
||||
@@ -334,8 +363,25 @@ add_definitions(-DWX_COMPATIBILITY)
|
||||
find_package( OpenGL QUIET )
|
||||
check_find_package_result( OPENGL_FOUND "OpenGL" )
|
||||
|
||||
# Dick 5-Feb-2014:
|
||||
# Marco: We cannot use both ExternalProject_Add() add and find_package()
|
||||
# in the same CMake tree and have them both reference the same package:
|
||||
# http://stackoverflow.com/questions/6351609/cmake-linking-to-library-downloaded-from-externalproject-add
|
||||
# https://www.mail-archive.com/cmake@cmake.org/msg47501.html
|
||||
|
||||
# Handle target used to specify if a target needs wx-widgets or other libraries
|
||||
# Always defined, empty if no libraries are to be built
|
||||
add_custom_target( lib-dependencies )
|
||||
|
||||
if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC )
|
||||
|
||||
# This should be built in all cases, if swig exec is not avaiable
|
||||
# will be impossible also enable SCRIPTING being for PCBNEW required immediately
|
||||
|
||||
include( download_pcre )
|
||||
include( download_swig )
|
||||
|
||||
|
||||
#set(CMAKE_FIND_LIBRARY_SUFFIXES ".a;.so;.dylib;.dll")
|
||||
|
||||
if( KICAD_BUILD_STATIC AND KICAD_BUILD_DYNAMIC )
|
||||
@@ -344,26 +390,49 @@ if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC )
|
||||
|
||||
if( KICAD_BUILD_STATIC )
|
||||
message(STATUS "KICAD_BUILD_STATIC set")
|
||||
if( KICAD_SCRIPTING OR KICAD_SCRIPTING_WXPYTHON OR KICAD_SCRIPTING_MODULES )
|
||||
message(FATAL_ERROR "KICAD_SCRIPTING* is not supported with KICAD_BUILD_STATIC, please select KICAD_BUILD_DYNAMIC" )
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if( KICAD_BUILD_DYNAMIC )
|
||||
message(STATUS "KICAD_BUILD_DYNAMIC set")
|
||||
# TODO - Library packaging/relocation
|
||||
endif()
|
||||
|
||||
add_custom_target( lib-dependencies
|
||||
DEPENDS boost cairo glew libpng pixman pkgconfig
|
||||
)
|
||||
|
||||
include( download_libpng )
|
||||
if( KICAD_SCRIPTING OR KICAD_SCRIPTING_WXPYTHON OR KICAD_SCRIPTING_MODULES )
|
||||
|
||||
message(STATUS "Scripting ENABLED")
|
||||
include( download_wxpython )
|
||||
|
||||
set( SWIG_EXECUTABLE ${SWIG_ROOT}/bin/swig )
|
||||
set( SWIG_INCLUDE ${SWIG_ROOT}/include )
|
||||
set( PYTHON_DEST ${LIBWXPYTHON_ROOT}/wxPython/lib/python2.6/site-packages )
|
||||
|
||||
if( NOT EXISTS ${SWIG_EXECUTABLE} )
|
||||
set(KICAD_SCRIPTING CACHE OFF FORCE "Disabling KICAD_SCRIPTING")
|
||||
message( STATUS "KICAD_SCRIPTING Enabled but SWIG not found, please disable and before reenabling execute: make swig")
|
||||
message( FATAL_ERROR "Missing SWIG!")
|
||||
endif()
|
||||
message(STATUS "SWIG_EXECUTABLE: ${SWIG_EXECUTABLE}")
|
||||
|
||||
set( PYTHON_DEST ${LIBWXPYTHON_ROOT}/wxPython/lib/python2.6/site-packages )
|
||||
|
||||
set(wxWidgets_BIN_DIR ${LIBWXPYTHON_ROOT}/bin/wxrc )
|
||||
set(wxWidgets_CONFIG_EXECUTABLE ${LIBWXPYTHON_ROOT}/bin/wx-config )
|
||||
set(wxWidgets_INCLUDE_DIRS ${LIBWXPYTHON_ROOT}/include/wx-3.0 )
|
||||
set(wxWidgets_LIBRARY_DIRS ${LIBWXPYTHON_ROOT}/lib )
|
||||
|
||||
add_dependencies( lib-dependencies libwxpython )
|
||||
add_dependencies( lib-dependencies swig )
|
||||
|
||||
if( KICAD_SCRIPTING_WXPYTHON )
|
||||
message( FATAL_ERROR "KICAD_BUILD_* and SCRIPTING Not Implemented Yet!" )
|
||||
else()
|
||||
include( download_wxwidgets )
|
||||
add_dependencies( lib-dependencies libwx )
|
||||
endif()
|
||||
|
||||
include( download_libpng )
|
||||
|
||||
include( download_pkgconfig )
|
||||
set( PKG_CONFIG_EXECUTABLE "${PKGCONFIG_ROOT}/bin/pkg-config" )
|
||||
include( download_glew )
|
||||
@@ -375,9 +444,15 @@ if( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC )
|
||||
set( CAIRO_INCLUDE_DIR "${CAIRO_ROOT}/include/cairo" )
|
||||
set( CAIRO_LIBRARY "${CAIRO_ROOT}/lib/libcairo.a" )
|
||||
|
||||
add_dependencies( lib-dependencies boost )
|
||||
add_dependencies( lib-dependencies cairo )
|
||||
add_dependencies( lib-dependencies libpng )
|
||||
add_dependencies( lib-dependencies pixman )
|
||||
add_dependencies( lib-dependencies pkgconfig )
|
||||
|
||||
if( KICAD_BUILD_DYNAMIC AND APPLE )
|
||||
add_custom_target( osx_fix_bundles ALL DEPENDS cvpcb eeschema gerbview kicad pcbnew bitmap2component pcb_calculator pl_editor)
|
||||
add_custom_command(TARGET osx_fix_bundles POST_BUILD COMMAND scripts/osx_fixbundle.sh COMMENT "Migrating dylibs to bundles")
|
||||
add_custom_command(TARGET osx_fix_bundles POST_BUILD COMMAND ${PROJECT_SOURCE_DIR}/scripts/osx_fixbundle.sh ${PROJECT_SOURCE_DIR} COMMENT "Migrating dylibs to bundles")
|
||||
endif()
|
||||
|
||||
endif( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC)
|
||||
@@ -385,14 +460,18 @@ endif( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC)
|
||||
#####################
|
||||
# Find GLEW library #
|
||||
#####################
|
||||
find_package(GLEW)
|
||||
check_find_package_result(GLEW_FOUND "GLEW")
|
||||
if( NOT GLEW_FOUND )
|
||||
find_package( GLEW )
|
||||
check_find_package_result( GLEW_FOUND "GLEW" )
|
||||
endif()
|
||||
|
||||
######################
|
||||
# Find Cairo library #
|
||||
######################
|
||||
find_package(Cairo 1.8.1 QUIET)
|
||||
check_find_package_result(CAIRO_FOUND "Cairo")
|
||||
if( NOT CAIRO_FOUND )
|
||||
find_package( Cairo 1.8.1 QUIET )
|
||||
check_find_package_result( CAIRO_FOUND "Cairo" )
|
||||
endif()
|
||||
|
||||
# Download boost and possibly build parts of it
|
||||
#################################################
|
||||
@@ -404,6 +483,8 @@ if( KICAD_SKIP_BOOST )
|
||||
message( FATAL_ERROR "Boost 1.54+ libraries are required." )
|
||||
endif()
|
||||
|
||||
add_custom_target( boost ) # it is required to meet some further dependencies
|
||||
|
||||
message( WARNING "
|
||||
WARNING: You decided to skip building boost library.
|
||||
KiCad developers strongly advise you to build the bundled boost library, as it is known to work with KiCad.
|
||||
@@ -419,17 +500,20 @@ endif()
|
||||
# application. You can figure out what libraries you need here;
|
||||
# http://www.wxwidgets.org/manuals/2.8/wx_librarieslist.html
|
||||
|
||||
# See line 41 of CMakeModules/FindwxWidgets.cmake
|
||||
set( wxWidgets_CONFIG_OPTIONS --static=no )
|
||||
|
||||
# On Apple only wxwidgets 2.9 or higher doesn't need to find aui part of base
|
||||
# Seems no more needed on wx-3
|
||||
if( APPLE AND NOT (KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC) )
|
||||
if( APPLE AND ( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES OR KICAD_SCRIPTING_WXPYTHON) )
|
||||
find_package( wxWidgets COMPONENTS gl adv html core net base xml QUIET )
|
||||
else()
|
||||
find_package( wxWidgets COMPONENTS gl aui adv html core net base xml QUIET )
|
||||
endif()
|
||||
|
||||
if( NOT (KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC) )
|
||||
check_find_package_result( wxWidgets_FOUND "wxWidgets" )
|
||||
endif( NOT (KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC) )
|
||||
check_find_package_result( wxWidgets_FOUND "wxWidgets" )
|
||||
endif()
|
||||
|
||||
# Include wxWidgets macros.
|
||||
include( ${wxWidgets_USE_FILE} )
|
||||
@@ -470,10 +554,25 @@ set( INC_AFTER
|
||||
|
||||
# Find Python and other scripting resources
|
||||
if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES )
|
||||
set( PythonInterp_FIND_VERSION )
|
||||
|
||||
if( APPLE )
|
||||
set( PYTHON_LIBRARY /System/Library/Frameworks/Python.framework/Versions/2.6/Python )
|
||||
set( PYTHON_INCLUDE_DIR /System/Library/Frameworks/Python.framework/Versions//2.6/include/python2.6 )
|
||||
set( PythonInterp_FIND_VERSION 2.6 )
|
||||
set( PythonLibs_FIND_VERSION 2.6 )
|
||||
endif()
|
||||
|
||||
# force a python version < 3.0
|
||||
set( PythonInterp_FIND_VERSION 2.6)
|
||||
set( PythonLibs_FIND_VERSION 2.6 )
|
||||
|
||||
find_package( PythonInterp )
|
||||
|
||||
check_find_package_result( PYTHONINTERP_FOUND "Python Interpreter" )
|
||||
|
||||
if( NOT PYTHON_VERSION_MAJOR EQUAL 2 )
|
||||
message( FATAL_ERROR "Python 2.x is required." )
|
||||
endif()
|
||||
# Get the correct Python site package install path from the Python interpreter found by
|
||||
# FindPythonInterp unless the user specifically defined a custom path.
|
||||
if( NOT PYTHON_SITE_PACKAGE_PATH )
|
||||
@@ -491,7 +590,7 @@ if( KICAD_SCRIPTING OR KICAD_SCRIPTING_MODULES )
|
||||
mark_as_advanced( PYTHON_DEST )
|
||||
message( STATUS "Python module install path: ${PYTHON_DEST}" )
|
||||
|
||||
find_package( PythonLibs )
|
||||
find_package( PythonLibs 2.6 )
|
||||
|
||||
#message( STATUS "PYTHON_INCLUDE_DIRS:${PYTHON_INCLUDE_DIRS}" )
|
||||
|
||||
@@ -533,7 +632,6 @@ add_subdirectory( 3d-viewer )
|
||||
add_subdirectory( cvpcb )
|
||||
add_subdirectory( eeschema )
|
||||
add_subdirectory( gerbview )
|
||||
add_subdirectory( kicad )
|
||||
add_subdirectory( lib_dxf )
|
||||
add_subdirectory( pcbnew )
|
||||
add_subdirectory( polygon )
|
||||
@@ -541,8 +639,11 @@ add_subdirectory( pagelayout_editor )
|
||||
add_subdirectory( potrace )
|
||||
add_subdirectory( bitmap2component )
|
||||
add_subdirectory( pcb_calculator )
|
||||
add_subdirectory( kicad ) # should follow pcbnew, eeschema
|
||||
add_subdirectory( tools )
|
||||
add_subdirectory( utils )
|
||||
add_subdirectory( qa )
|
||||
|
||||
#add_subdirectory( new )
|
||||
|
||||
|
||||
@@ -562,20 +663,16 @@ add_dependencies( pnsrouter boost )
|
||||
|
||||
|
||||
if ( KICAD_BUILD_STATIC OR KICAD_BUILD_DYNAMIC )
|
||||
add_dependencies( pcbnew lib-dependencies )
|
||||
add_dependencies( eeschema lib-dependencies )
|
||||
add_dependencies( cvpcb lib-dependencies )
|
||||
add_dependencies( gal lib-dependencies )
|
||||
add_dependencies( common lib-dependencies )
|
||||
add_dependencies( pcbcommon lib-dependencies )
|
||||
add_dependencies( 3d-viewer lib-dependencies )
|
||||
add_dependencies( pcad2kicadpcb lib-dependencies )
|
||||
add_dependencies( polygon lib-dependencies )
|
||||
add_dependencies( pl_editor lib-dependencies )
|
||||
add_dependencies( pnsrouter lib-dependencies )
|
||||
if ( BUILD_GITHUB_PLUGIN )
|
||||
add_dependencies( github_plugin lib-dependencies )
|
||||
endif()
|
||||
add_dependencies( pcbnew lib-dependencies )
|
||||
add_dependencies( eeschema lib-dependencies )
|
||||
add_dependencies( cvpcb lib-dependencies )
|
||||
add_dependencies( common lib-dependencies )
|
||||
add_dependencies( gal lib-dependencies )
|
||||
add_dependencies( pcbcommon lib-dependencies )
|
||||
add_dependencies( 3d-viewer lib-dependencies )
|
||||
add_dependencies( pcad2kicadpcb lib-dependencies )
|
||||
add_dependencies( pl_editor lib-dependencies )
|
||||
add_dependencies( pnsrouter lib-dependencies )
|
||||
endif()
|
||||
|
||||
if ( KICAD_BUILD_DYNAMIC )
|
||||
@@ -599,6 +696,13 @@ if( DOXYGEN_FOUND )
|
||||
DEPENDS Doxyfile
|
||||
COMMENT "building doxygen docs into directory Documentation/doxygen/html"
|
||||
)
|
||||
add_custom_target( dev-docs
|
||||
${CMAKE_COMMAND} -E remove_directory Documentation/development/doxygen
|
||||
COMMAND ${DOXYGEN_EXECUTABLE}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Documentation/development
|
||||
DEPENDS Doxyfile
|
||||
COMMENT "building developer's resource docs into directory Documentation/development/doxygen/html"
|
||||
)
|
||||
else()
|
||||
message( STATUS "WARNING: Doxygen not found - doxygen-docs (Source Docs) target not created" )
|
||||
endif()
|
||||
|
||||
@@ -38,6 +38,12 @@
|
||||
# Where the library is to be installed.
|
||||
set( PREFIX ${DOWNLOAD_DIR}/avhttp )
|
||||
|
||||
if( KICAD_SKIP_BOOST )
|
||||
set( AVHTTP_DEPEND "" )
|
||||
else()
|
||||
set( AVHTTP_DEPEND "boost" )
|
||||
endif()
|
||||
|
||||
|
||||
# Install the AVHTTP header only library ${PREFIX}
|
||||
ExternalProject_Add( avhttp
|
||||
@@ -46,7 +52,7 @@ ExternalProject_Add( avhttp
|
||||
|
||||
# grab it from a local zip file for now, cmake caller's source dir
|
||||
URL ${CMAKE_CURRENT_SOURCE_DIR}/avhttp-master.zip
|
||||
DEPENDS boost
|
||||
DEPENDS ${AVHTTP_DEPEND}
|
||||
|
||||
CONFIGURE_COMMAND ""
|
||||
|
||||
|
||||
@@ -59,7 +59,9 @@ set( BOOST_LIBS_BUILT
|
||||
)
|
||||
#-----</configure>---------------------------------------------------------------
|
||||
|
||||
find_package( BZip2 REQUIRED )
|
||||
if( NOT BZIP2_FOUND )
|
||||
find_package( BZip2 REQUIRED )
|
||||
endif()
|
||||
|
||||
string( REGEX REPLACE "\\." "_" BOOST_VERS "${BOOST_RELEASE}" )
|
||||
set( PREFIX ${DOWNLOAD_DIR}/boost_${BOOST_VERS} )
|
||||
@@ -99,7 +101,17 @@ else()
|
||||
endif()
|
||||
|
||||
|
||||
if( MINGW )
|
||||
find_program(patch_bin NAMES patch patch.exe)
|
||||
|
||||
if( "${patch_bin}" STREQUAL "patch_bin-NOTFOUND" )
|
||||
set( PATCH_STR_CMD ${PATCH_STR_CMD} )
|
||||
else()
|
||||
set( PATCH_STR_CMD ${patch_bin} -p0 -i )
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
if( MINGW AND NOT CMAKE_HOST_UNIX ) # building for MINGW on windows not UNIX
|
||||
if( MSYS )
|
||||
# The Boost system does not build properly on MSYS using bootstrap.sh. Running
|
||||
# bootstrap.bat with cmd.exe does. It's ugly but it works. At least for Boost
|
||||
@@ -113,14 +125,16 @@ if( MINGW )
|
||||
set( b2_libs ${b2_libs} --with-${lib} )
|
||||
endforeach()
|
||||
unset( BOOST_CFLAGS )
|
||||
|
||||
else()
|
||||
string( REGEX REPLACE "\\;" "," libs_csv "${boost_libs_list}" )
|
||||
#message( STATUS "libs_csv:${libs_csv}" )
|
||||
|
||||
set( bootstrap ./bootstrap.sh --with-libraries=${libs_csv} )
|
||||
# pass to *both* C and C++ compilers
|
||||
set( BOOST_CFLAGS "cflags=${PIC_FLAG}" )
|
||||
set( BOOST_INCLUDE "${BOOST_ROOT}/include" )
|
||||
set( BOOST_CFLAGS "cflags=${PIC_FLAG}" )
|
||||
set( BOOST_CXXFLAGS "cxxflags=${PIC_FLAG}" )
|
||||
set( BOOST_INCLUDE "${BOOST_ROOT}/include" )
|
||||
unset( b2_libs )
|
||||
endif()
|
||||
|
||||
@@ -173,7 +187,7 @@ ExternalProject_Add( boost
|
||||
|
||||
URL http://downloads.sourceforge.net/project/boost/boost/${BOOST_RELEASE}/boost_${BOOST_VERS}.tar.bz2
|
||||
DOWNLOAD_DIR "${DOWNLOAD_DIR}"
|
||||
TIMEOUT 600 # 10 minutes
|
||||
TIMEOUT 1200 # 20 minutes
|
||||
URL_MD5 ${BOOST_MD5}
|
||||
# If download fails, then enable "LOG_DOWNLOAD ON" and try again.
|
||||
# Upon a second failure with logging enabled, then look at these logs:
|
||||
@@ -193,25 +207,25 @@ ExternalProject_Add( boost
|
||||
# bzr revert is insufficient to remove "added" files:
|
||||
COMMAND bzr clean-tree -q --force
|
||||
|
||||
COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/boost_minkowski.patch"
|
||||
COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/boost_cstdint.patch"
|
||||
COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/boost_minkowski.patch"
|
||||
COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/boost_cstdint.patch"
|
||||
|
||||
COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/boost_macosx_x86.patch" #https://svn.boost.org/trac/boost/ticket/8266
|
||||
COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/boost_macosx_x86.patch" #https://svn.boost.org/trac/boost/ticket/8266
|
||||
# tell bzr about "added" files by last patch:
|
||||
COMMAND bzr add libs/context/src/asm/jump_i386_x86_64_sysv_macho_gas.S
|
||||
COMMAND bzr add libs/context/src/asm/make_i386_x86_64_sysv_macho_gas.S
|
||||
|
||||
COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/boost_macosx_x86_build.patch" #https://svn.boost.org/trac/boost/ticket/8266
|
||||
COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/boost_macosx_older_openssl.patch" #https://svn.boost.org/trac/boost/ticket/9273
|
||||
COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/boost_macosx_x86_build.patch" #https://svn.boost.org/trac/boost/ticket/8266
|
||||
COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/boost_macosx_older_openssl.patch" #https://svn.boost.org/trac/boost/ticket/9273
|
||||
|
||||
COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/boost_mingw.patch" #https://svn.boost.org/trac/boost/ticket/7262
|
||||
COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/boost_mingw.patch" #https://svn.boost.org/trac/boost/ticket/7262
|
||||
# tell bzr about "added" files by last patch:
|
||||
COMMAND bzr add libs/context/src/asm/make_i386_ms_pe_gas.S
|
||||
COMMAND bzr add libs/context/src/asm/jump_i386_ms_pe_gas.S
|
||||
COMMAND bzr add libs/context/src/asm/make_x86_64_ms_pe_gas.S
|
||||
COMMAND bzr add libs/context/src/asm/jump_x86_64_ms_pe_gas.S
|
||||
|
||||
COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/patch_macosx_context_ppc_v2.patch" #https://svn.boost.org/trac/boost/ticket/8266
|
||||
COMMAND ${PATCH_STR_CMD} "${PROJECT_SOURCE_DIR}/patches/patch_macosx_context_ppc_v2.patch" #https://svn.boost.org/trac/boost/ticket/8266
|
||||
COMMAND bzr add libs/context/build/Jamfile.v2
|
||||
COMMAND bzr add libs/context/build/architecture.jam
|
||||
COMMAND bzr add libs/context/src/asm/jump_combined_sysv_macho_gas.S
|
||||
|
||||
@@ -33,7 +33,9 @@ set( CAIRO_ROOT "${PROJECT_SOURCE_DIR}/cairo_root" )
|
||||
|
||||
#-----</configure>---------------------------------------------------------------
|
||||
|
||||
find_package( BZip2 REQUIRED )
|
||||
if( NOT BZIP2_FOUND )
|
||||
find_package( BZip2 REQUIRED )
|
||||
endif()
|
||||
|
||||
set( PREFIX ${DOWNLOAD_DIR}/cairo )
|
||||
|
||||
@@ -42,7 +44,7 @@ if ( KICAD_BUILD_STATIC )
|
||||
endif( KICAD_BUILD_STATIC )
|
||||
|
||||
|
||||
if (APPLE)
|
||||
if (APPLE)
|
||||
|
||||
set( CAIRO_CFLAGS "CFLAGS=" )
|
||||
set( CAIRO_LDFLAGS "LDFLAGS=-framework CoreServices -framework Cocoa" )
|
||||
@@ -94,8 +96,14 @@ ExternalProject_Add( cairo
|
||||
|
||||
#BINARY_DIR "${PREFIX}"
|
||||
|
||||
BUILD_COMMAND $(MAKE)
|
||||
BUILD_COMMAND $(MAKE)
|
||||
|
||||
INSTALL_DIR "${CAIRO_ROOT}"
|
||||
INSTALL_COMMAND $(MAKE) install
|
||||
)
|
||||
|
||||
# match these with whatever FindCairo.cmake sets
|
||||
# Dick i'vent set it because /lib and /lib64 issue in non multiarch binaries OSs
|
||||
#set( CAIRO_FOUND true )
|
||||
set( CAIRO_INCLUDE_DIR ${CAIRO_ROOT}/include )
|
||||
set( CAIRO_LIBRARIES ${CAIRO_ROOT}/lib )
|
||||
|
||||
@@ -33,11 +33,13 @@ set( GLEW_ROOT "${PROJECT_SOURCE_DIR}/glew_root" )
|
||||
|
||||
#-----</configure>---------------------------------------------------------------
|
||||
|
||||
find_package( BZip2 REQUIRED )
|
||||
if( NOT BZIP2_FOUND )
|
||||
find_package( BZip2 REQUIRED )
|
||||
endif()
|
||||
|
||||
set( PREFIX ${DOWNLOAD_DIR}/glew )
|
||||
|
||||
if (APPLE)
|
||||
if (APPLE)
|
||||
if( CMAKE_OSX_ARCHITECTURES )
|
||||
set( GLEW_CFLAGS "CFLAGS.EXTRA=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
|
||||
set( GLEW_LDFLAGS "LDFLAGS.EXTRA=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
|
||||
|
||||
@@ -42,6 +42,14 @@ if( CMAKE_TOOLCHAIN_FILE )
|
||||
set( TOOLCHAIN "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}" )
|
||||
endif()
|
||||
|
||||
FIND_PROGRAM (patch_bin NAMES patch.exe patch)
|
||||
|
||||
if( "${patch_bin}" STREQUAL "patch_bin-NOTFOUND" )
|
||||
set( PATCH_STR_CMD bzr patch -p0 )
|
||||
else()
|
||||
set( PATCH_STR_CMD ${patch_bin} -p0 -i )
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(
|
||||
openssl
|
||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||
@@ -58,13 +66,13 @@ ExternalProject_Add(
|
||||
# PATCH_COMMAND patch -p0 < ${PROJECT_SOURCE_DIR}/patches/openssl-1.0.1e.patch
|
||||
|
||||
# This one requires the bzr commit below, since bzr patch only knows a working tree.
|
||||
|
||||
|
||||
# Revert the branch to pristine before applying patch sets as bzr patch
|
||||
# fails when applying a patch to the branch twice and doesn't have a switch
|
||||
# to ignore previously applied patches
|
||||
PATCH_COMMAND bzr revert
|
||||
# PATCH_COMMAND continuation (any *_COMMAND here can be continued with COMMAND):
|
||||
COMMAND bzr patch -p0 ${PROJECT_SOURCE_DIR}/patches/openssl-1.0.1e.patch
|
||||
COMMAND ${PATCH_STR_CMD} ${PROJECT_SOURCE_DIR}/patches/openssl-1.0.1e.patch
|
||||
|
||||
CONFIGURE_COMMAND
|
||||
${CMAKE_COMMAND}
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, you may find one here:
|
||||
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
# or you may search the http://www.gnu.org website for the version 2 license,
|
||||
# or you may write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
# Downloads and builds PCRE
|
||||
|
||||
#-----<configure>----------------------------------------------------------------
|
||||
|
||||
set( PCRE_RELEASE 8.34 )
|
||||
set( PCRE_MD5 eb34b2c9c727fd64940d6fd9a00995eb ) # re-calc this on every RELEASE change
|
||||
|
||||
set( PCRE_ROOT "${PROJECT_SOURCE_DIR}/pcre_root" )
|
||||
|
||||
#-----</configure>---------------------------------------------------------------
|
||||
|
||||
find_package( BZip2 REQUIRED )
|
||||
|
||||
set( PREFIX ${DOWNLOAD_DIR}/pcre )
|
||||
|
||||
if (APPLE)
|
||||
if( CMAKE_OSX_ARCHITECTURES )
|
||||
set( PCRE_CFLAGS "CFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
|
||||
set( PCRE_CXXFLAGS "CXXFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
|
||||
set( PCRE_LDFLAGS "LDFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
|
||||
endif( CMAKE_OSX_ARCHITECTURES )
|
||||
endif(APPLE)
|
||||
|
||||
ExternalProject_Add( pcre
|
||||
PREFIX "${PREFIX}"
|
||||
DOWNLOAD_DIR "${DOWNLOAD_DIR}"
|
||||
URL http://sourceforge.net/projects/pcre/files/pcre/${PCRE_RELEASE}/pcre-${PCRE_RELEASE}.tar.gz
|
||||
URL_MD5 ${PCRE_MD5}
|
||||
STAMP_DIR "${PREFIX}"
|
||||
|
||||
#SOURCE_DIR "${PREFIX}"
|
||||
BUILD_IN_SOURCE 1
|
||||
|
||||
UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${PCRE_ROOT}"
|
||||
|
||||
#PATCH_COMMAND "true"
|
||||
CONFIGURE_COMMAND ./configure --prefix=${PCRE_ROOT} ${PCRE_CFLAGS} ${PCRE_CXXFLAGS} ${PCRE_LDFLAGS} --disable-dependency-tracking
|
||||
|
||||
#BINARY_DIR "${PREFIX}"
|
||||
|
||||
BUILD_COMMAND $(MAKE)
|
||||
|
||||
INSTALL_DIR "${PCRE_ROOT}"
|
||||
INSTALL_COMMAND $(MAKE) install
|
||||
)
|
||||
@@ -33,13 +33,15 @@ set( PIXMAN_ROOT "${PROJECT_SOURCE_DIR}/pixman_root" )
|
||||
|
||||
#-----</configure>---------------------------------------------------------------
|
||||
|
||||
find_package( BZip2 REQUIRED )
|
||||
if( NOT BZIP2_FOUND )
|
||||
find_package( BZip2 REQUIRED )
|
||||
endif()
|
||||
|
||||
set( PREFIX ${DOWNLOAD_DIR}/pixman )
|
||||
|
||||
set(PIXMAN_CPPFLAGS "CFLAGS=")
|
||||
|
||||
if (APPLE)
|
||||
if (APPLE)
|
||||
if( CMAKE_OSX_ARCHITECTURES )
|
||||
set(PIXMAN_CPPFLAGS "${PIXMAN_CPPFLAGS} -arch ${CMAKE_OSX_ARCHITECTURES} -fno-common -mmacosx-version-min=10.5")
|
||||
else()
|
||||
|
||||
@@ -33,7 +33,9 @@ set( PKGCONFIG_ROOT "${PROJECT_SOURCE_DIR}/pkgconfig_root" )
|
||||
|
||||
#-----</configure>---------------------------------------------------------------
|
||||
|
||||
find_package( BZip2 REQUIRED )
|
||||
if( NOT BZIP2_FOUND )
|
||||
find_package( BZip2 REQUIRED )
|
||||
endif()
|
||||
|
||||
set( PREFIX ${DOWNLOAD_DIR}/pkgconfig )
|
||||
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, you may find one here:
|
||||
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
# or you may search the http://www.gnu.org website for the version 2 license,
|
||||
# or you may write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
# Downloads and builds SWIG
|
||||
|
||||
#-----<configure>----------------------------------------------------------------
|
||||
|
||||
set( SWIG_RELEASE 2.0.11 )
|
||||
set( SWIG_MD5 291ba57c0acd218da0b0916c280dcbae ) # re-calc this on every RELEASE change
|
||||
|
||||
# The boost headers [and static libs if built] go here, at the top of KiCad
|
||||
# source tree in boost_root.
|
||||
set( SWIG_ROOT "${PROJECT_SOURCE_DIR}/swig_root" )
|
||||
|
||||
#-----</configure>---------------------------------------------------------------
|
||||
|
||||
find_package( BZip2 REQUIRED )
|
||||
|
||||
set( PREFIX ${DOWNLOAD_DIR}/swig )
|
||||
|
||||
if (APPLE)
|
||||
if( CMAKE_OSX_ARCHITECTURES )
|
||||
set( SWIG_CFLAGS "CFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
|
||||
set( SWIG_CXXFLAGS "CXXFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
|
||||
set( SWIG_LDFLAGS "LDFLAGS=-arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=10.5" )
|
||||
endif( CMAKE_OSX_ARCHITECTURES )
|
||||
|
||||
set( SWIG_PYTHON "--with-python=/usr/bin/python2.6" )
|
||||
set( SWIG_OPTS --disable-dependency-tracking )
|
||||
endif(APPLE)
|
||||
|
||||
# <SOURCE_DIR> = ${PREFIX}/src/glew
|
||||
# There is a Bazaar 'boost scratch repo' in <SOURCE_DIR>/boost and after committing pristine
|
||||
# download, the patch is applied. This lets you regenerate a new patch at any time
|
||||
# easily, simply by editing the working tree in <SOURCE_DIR> and doing "bzr diff" in there.
|
||||
|
||||
ExternalProject_Add( swig
|
||||
PREFIX "${PREFIX}"
|
||||
DOWNLOAD_DIR "${DOWNLOAD_DIR}"
|
||||
URL http://sourceforge.net/projects/swig/files/swig/swig-${SWIG_RELEASE}/swig-${SWIG_RELEASE}.tar.gz
|
||||
URL_MD5 ${SWIG_MD5}
|
||||
STAMP_DIR "${PREFIX}"
|
||||
|
||||
DEPENDS pcre
|
||||
|
||||
#SOURCE_DIR "${PREFIX}"
|
||||
BUILD_IN_SOURCE 1
|
||||
|
||||
UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${SWIG_ROOT}"
|
||||
|
||||
#PATCH_COMMAND "true"
|
||||
CONFIGURE_COMMAND ./configure --prefix=${SWIG_ROOT} --with-pcre-prefix=${PCRE_ROOT} ${SWIG_CFLAGS} ${SWIG_LDFLAGS} ${SWIG_CXXFLAGS} ${SWIG_PYTHON} ${SWIG_OPTS}
|
||||
|
||||
#BINARY_DIR "${PREFIX}"
|
||||
|
||||
BUILD_COMMAND $(MAKE)
|
||||
|
||||
INSTALL_DIR "${SWIG_ROOT}"
|
||||
INSTALL_COMMAND $(MAKE) install
|
||||
)
|
||||
@@ -0,0 +1,121 @@
|
||||
# This program source code file is part of KICAD, a free EDA CAD application.
|
||||
#
|
||||
# Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||
# Copyright (C) 2013 Kicad Developers, see AUTHORS.txt for contributors.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, you may find one here:
|
||||
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||
# or you may search the http://www.gnu.org website for the version 2 license,
|
||||
# or you may write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
# Downloads and builds LIBWXPYTHON
|
||||
|
||||
#-----<configure>----------------------------------------------------------------
|
||||
|
||||
set( LIBWXPYTHON_RELEASE 3.0.0.0 )
|
||||
set( LIBWXPYTHON_MD5 f5e32c7d85dc261ba777e113c3b7e365 ) # re-calc this on every RELEASE change
|
||||
|
||||
set( LIBWXPYTHON_ROOT "${PROJECT_SOURCE_DIR}/libwxpython_root" )
|
||||
|
||||
#-----</configure>---------------------------------------------------------------
|
||||
|
||||
find_package( BZip2 REQUIRED )
|
||||
|
||||
set( PREFIX ${DOWNLOAD_DIR}/libwxpython )
|
||||
set( LIBWXPYTHON_EXEC python )
|
||||
set( LIBWXPYTHON_OPTS --wxpy_installdir=${LIBWXPYTHON_ROOT}/wxPython )
|
||||
|
||||
if (APPLE)
|
||||
SET( LIBWXPYTHON_EXEC python2.6 )
|
||||
SET( LIBWXPYTHON_OPTS ${LIBWXPYTHON_OPTS} --osx_cocoa )
|
||||
#SET( LIBWXPYTHON_OPTS ${LIBWXPYTHON_OPTS} --mac_framework --mac_framework_prefix=${LIBWXPYTHON_ROOT}/wxPython )
|
||||
|
||||
if( CMAKE_OSX_ARCHITECTURES )
|
||||
STRING(REGEX REPLACE " -arch " "," LIBWXPYTHON_ARCHITECTURES ${CMAKE_OSX_ARCHITECTURES})
|
||||
SET( LIBWXPYTHON_OPTS ${LIBWXPYTHON_OPTS} --mac_arch=${LIBWXPYTHON_ARCHITECTURES})
|
||||
endif( CMAKE_OSX_ARCHITECTURES )
|
||||
|
||||
if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||
SET( LIBWXPYTHON_PRECMD export CFLAGS=-Qunused-arguments && )
|
||||
endif()
|
||||
endif(APPLE)
|
||||
|
||||
if ( KICAD_BUILD_STATIC )
|
||||
#message fail
|
||||
set( LIBWXPYTHON_BUILDTYPE "--disable-shared" )
|
||||
endif( KICAD_BUILD_STATIC )
|
||||
|
||||
# <SOURCE_DIR> = ${PREFIX}/src/libwx
|
||||
# There is a Bazaar 'boost scratch repo' in <SOURCE_DIR>/boost and after committing pristine
|
||||
# download, the patch is applied. This lets you regenerate a new patch at any time
|
||||
# easily, simply by editing the working tree in <SOURCE_DIR> and doing "bzr diff" in there.
|
||||
|
||||
ExternalProject_Add( libwxpython
|
||||
PREFIX "${PREFIX}"
|
||||
DOWNLOAD_DIR "${DOWNLOAD_DIR}"
|
||||
URL http://sourceforge.net/projects/wxpython/files/wxPython/${LIBWXPYTHON_RELEASE}/wxPython-src-${LIBWXPYTHON_RELEASE}.tar.bz2
|
||||
URL_MD5 ${LIBWXPYTHON_MD5}
|
||||
STAMP_DIR "${PREFIX}"
|
||||
|
||||
BUILD_IN_SOURCE 1
|
||||
|
||||
PATCH_COMMAND bzr revert
|
||||
COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/wxpython-3.0.0_macosx.patch"
|
||||
COMMAND bzr patch -p0 "${PROJECT_SOURCE_DIR}/patches/wxpython-3.0.0_macosx_multiarch.patch" # http://trac.wxwidgets.org/ticket/15957
|
||||
|
||||
UPDATE_COMMAND ${CMAKE_COMMAND} -E remove_directory "${LIBWXPYTHON_ROOT}"
|
||||
COMMAND ${LIBWXPYTHON_EXEC} wxPython/build-wxpython.py --clean
|
||||
|
||||
CONFIGURE_COMMAND ${LIBWXPYTHON_PRECMD} ${LIBWXPYTHON_EXEC} wxPython/build-wxpython.py --prefix=${LIBWXPYTHON_ROOT} --unicode --install ${LIBWXPYTHON_OPTS}
|
||||
|
||||
#BINARY_DIR "${PREFIX}"
|
||||
|
||||
BUILD_COMMAND true
|
||||
|
||||
INSTALL_DIR "${LIBWXPYTHON_ROOT}"
|
||||
INSTALL_COMMAND true
|
||||
)
|
||||
|
||||
ExternalProject_Add_Step( libwxpython bzr_commit_libwxpython
|
||||
COMMAND bzr ci -q -m pristine <SOURCE_DIR>
|
||||
COMMENT "committing pristine libwxpython files to 'libwxpython scratch repo'"
|
||||
DEPENDERS patch
|
||||
)
|
||||
|
||||
|
||||
ExternalProject_Add_Step( libwxpython bzr_add_libwxpython
|
||||
COMMAND bzr add -q ${PREFIX}/src/libwxpython
|
||||
COMMENT "adding pristine libwxpython files to 'libwxpython scratch repo'"
|
||||
DEPENDERS bzr_commit_libwxpython
|
||||
)
|
||||
|
||||
|
||||
ExternalProject_Add_Step( libwxpython bzr_init_libwxpython
|
||||
COMMAND bzr init -q <SOURCE_DIR>
|
||||
COMMENT "creating 'libwxpython scratch repo' specifically for libwx to track libwx patches"
|
||||
DEPENDERS bzr_add_libwxpython
|
||||
DEPENDEES download
|
||||
)
|
||||
|
||||
######
|
||||
# Now is time to search what we have built
|
||||
######
|
||||
|
||||
ExternalProject_Add_Step( libwxpython libwxpython_recursive_message
|
||||
COMMAND cmake .
|
||||
COMMENT "*** RERUN CMAKE - wxWidgets built, now reissue a cmake to build Kicad"
|
||||
DEPENDEES install
|
||||
)
|
||||
|
||||
@@ -33,11 +33,13 @@ set( LIBWX_ROOT "${PROJECT_SOURCE_DIR}/libwx_root" )
|
||||
|
||||
#-----</configure>---------------------------------------------------------------
|
||||
|
||||
find_package( BZip2 REQUIRED )
|
||||
if( NOT BZIP2_FOUND )
|
||||
find_package( BZip2 REQUIRED )
|
||||
endif()
|
||||
|
||||
set( PREFIX ${DOWNLOAD_DIR}/libwx )
|
||||
|
||||
if (APPLE)
|
||||
if (APPLE)
|
||||
if( CMAKE_OSX_ARCHITECTURES )
|
||||
STRING(REGEX REPLACE " -arch " "," LIBWX_ARCHITECTURES ${CMAKE_OSX_ARCHITECTURES})
|
||||
SET( LIBWX_ARCHITECTURES --enable-universal_binary=${LIBWX_ARCHITECTURES})
|
||||
@@ -80,7 +82,7 @@ ExternalProject_Add( libwx
|
||||
#SET directories
|
||||
set(wxWidgets_BIN_DIR ${LIBWX_ROOT}/bin)
|
||||
set(wxWidgets_CONFIG_EXECUTABLE ${LIBWX_ROOT}/bin/wx-config)
|
||||
set(wxWidgets_INCLUDE_DIRS ${LIBWX_ROOT}/include)
|
||||
set(wxWidgets_INCLUDE_DIRS ${LIBWX_ROOT}/include)
|
||||
set(wxWidgets_LIBRARY_DIRS ${LIBWX_ROOT}/lib)
|
||||
|
||||
|
||||
@@ -110,7 +112,7 @@ ExternalProject_Add_Step( libwx bzr_init_libwx
|
||||
######
|
||||
|
||||
ExternalProject_Add_Step( libwx libwx_recursive_message
|
||||
COMMAND cmake .
|
||||
COMMAND cmake .
|
||||
COMMENT "*** RERUN CMAKE - wxWidgets built, now reissue a cmake to build Kicad"
|
||||
DEPENDEES install
|
||||
)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -11,32 +11,40 @@ Contribute to KiCad (under Linux)
|
||||
2) initialize Bazaar:
|
||||
bzr whoami "John Doe <john.doe@gmail.com>"
|
||||
|
||||
3) get LATEST KiCad source tree and name it, for instance, "kicad_john":
|
||||
3) get latest KiCad source tree:
|
||||
cd ~/
|
||||
bzr branch lp:kicad kicad_john
|
||||
bzr branch lp:kicad kicad.bzr
|
||||
|
||||
4) Read coding_style_policy.pdf, in <kicad_sources>/Documentation,
|
||||
and other docs.
|
||||
this should leave you with the folder kicad.bzr
|
||||
|
||||
5) Modify/add source code.
|
||||
cd kicad_john
|
||||
4) Read coding_style_policy.pdf, in kicad.bzr/Documentation,
|
||||
and other docs.
|
||||
|
||||
5) create a local (branch) copy of the KiCad project
|
||||
bzr branch ./kicad.bzr ./kicad.my_contrib
|
||||
|
||||
6) Modify/add source code in
|
||||
cd kicad.my_contrib
|
||||
gedit .......
|
||||
if you need to create and add the file foo.cpp do so and:
|
||||
bzr add foo.cpp
|
||||
if you need to delete files:
|
||||
bzr rm foo.cpp
|
||||
|
||||
6) Compile:
|
||||
cd kicad_john
|
||||
7) Compile:
|
||||
cd kicad.my_contrib
|
||||
mkdir build; cd build
|
||||
cmake ../ -DCMAKE_BUILD_TYPE=Debug
|
||||
to build a debug version
|
||||
or
|
||||
to build a debug version
|
||||
or
|
||||
cmake ../ -DCMAKE_BUILD_TYPE=Release
|
||||
to build a release version
|
||||
make
|
||||
to build a release version
|
||||
make -j8
|
||||
|
||||
7) Repeat step 5 and 6 until satisfied.
|
||||
8) Repeat step 6 and 7 until satisfied.
|
||||
|
||||
8) Create a patch:
|
||||
in kicad_john:
|
||||
if some files are added: bzr add [FILE...]
|
||||
9) Create a patch file:
|
||||
cd kicad.my_contrib
|
||||
bzr diff > my_changes.patch
|
||||
|
||||
9) Send the patch file "my_changes.patch" to the KiCad developers mailing list.
|
||||
@@ -0,0 +1,29 @@
|
||||
|
||||
KIWAY Build Symbols, Definitions and Intentions
|
||||
|
||||
|
||||
COMPILING_DLL:
|
||||
|
||||
This is a signal to import_export.h, and when present, toggles the
|
||||
interpretation of the #defines in that file. Its purpose should not be
|
||||
extended beyond this.
|
||||
|
||||
|
||||
USE_KIWAY_DLLS:
|
||||
|
||||
Comes from CMake as a user configuration variable, settable in the Cmake
|
||||
user interface. It decides if KiCad will be built with the *.kiface program
|
||||
modules.
|
||||
|
||||
|
||||
BUILD_KIWAY_DLL:
|
||||
|
||||
Comes from CMake, but at the 2nd tier, not the top tier. By 2nd tier,
|
||||
something like pcbnew/CMakeLists.txt, not /CMakeLists.txt is meant. It is
|
||||
not a user configuration variable. Instead, the 2nd tier CMakeLists.txt file
|
||||
looks at the top level USE_KIWAY_DLLS and decides how the object files under
|
||||
the 2nd tier's control will be built. If it decides it wants to march in
|
||||
lockstep with USE_KIWAY_DLLS, then this local CMakeLists.txt file may pass a
|
||||
defined BUILD_KIWAY_DLL (singular) on the compiler command line to the
|
||||
pertinent set of compilation steps under its control.
|
||||
|
||||
@@ -31,15 +31,22 @@ KiCad from source.
|
||||
* bzr - Bazaar version control system
|
||||
* CMake - Cross-platform make
|
||||
* GLUT - The OpenGL Utility Library
|
||||
* GLEW
|
||||
* wxGTK or wxWidgets - The wxWidgets GUI toolkit with GTK+ bindings
|
||||
* libbz2 (dev)
|
||||
* libcairo (dev)
|
||||
|
||||
* Boost - Collection of portable C++ source libraries
|
||||
boost will be automagically downloaded and copied in kicad sources tree,
|
||||
boost will be automagically downloaded, copied in kicad sources tree and patched,
|
||||
the first time you compile kicad.
|
||||
|
||||
Useful, but not required:
|
||||
* Doxygen - Documentation system for several programming languages
|
||||
|
||||
Required to build Kicad with scripting (using python) support:
|
||||
Python
|
||||
Swig
|
||||
|
||||
KiCad uses the Bazaar version control system to track source code changes,
|
||||
and download the boost libraries needed by Kicad.
|
||||
Be sure you bzr install also includes bzrtools.
|
||||
@@ -60,40 +67,43 @@ Install or Build wxWidgets
|
||||
WARNING:
|
||||
see wxWidgets_patch_notes.txt for patches and issues in wxWidgets.
|
||||
|
||||
If on Windows, download
|
||||
http://sourceforge.net/projects/wxwindows/files/wxAll/2.9.3/wxWidgets-2.9.3.zip/download
|
||||
On Windows, download
|
||||
http://sourceforge.net/projects/wxwindows/files/3.0.0/wxWidgets-3.0.0.zip/download
|
||||
or a newer version.
|
||||
Do NOT use previous versions which all have annoying issues for KiCad.
|
||||
Start msys so you have a bash shell.
|
||||
Note also since 2.9 versions no need to build a "debug" version of the wxWidgets library,
|
||||
the release abd the debug version are same.
|
||||
the release and the debug version are same.
|
||||
|
||||
Unzip the wxWidgets zip file into the build directory. Change directories into
|
||||
there, and then:
|
||||
|
||||
mkdir Release
|
||||
cd Release
|
||||
../configure --enable-unicode --enable-monolithic=no --disable-shared --with-opengl
|
||||
../configure --with-opengl
|
||||
make
|
||||
|
||||
and under Linux, but not under Windows:
|
||||
sudo make install that install wxWidgets libs and headers in /usr/local/
|
||||
|
||||
|
||||
If on linux, you can use your package manager to install the
|
||||
development versions of the wxWidgets packages which include the C++ headers. An
|
||||
alternative is to build static libaries from source. Verify that wx-config is in
|
||||
your path by running it from a command prompt. Linux users then go to next step.
|
||||
On linux, yo can also download wxWidgets 3.0 (recommandedd)
|
||||
or you can use your package manager to install the
|
||||
development versions of the wxWidgets packages which include the C++ headers.
|
||||
The recommended way is to build wxWidgets from source, and use wxWidgets 3.0
|
||||
or more recent (Older versions have a print function which does not work).
|
||||
Verify that wx-config is in your path by running it from a command prompt.
|
||||
Linux users then go to next step.
|
||||
|
||||
Install CMake
|
||||
-------------
|
||||
If windows, download the installation binary for windows from cmake.org.
|
||||
On windows, download the installation binary for windows from cmake.org.
|
||||
Install that and choose to add cmake to your path during installation. You
|
||||
will have to restart and command shells for the new path to take effect.
|
||||
will have to restart your command shell for the new path to take effect.
|
||||
Verify that cmake is in your path by trying to run it from a command prompt.
|
||||
|
||||
|
||||
If linux, use your package manager to install cmake. You should get cmake 2.6.4
|
||||
On linux, use your package manager to install cmake. You should get cmake 2.8.4
|
||||
or later. If only an older one is available in your package repository, build
|
||||
cmake from source. Verify that cmake is in your path by trying to run it from a
|
||||
command prompt.
|
||||
@@ -106,25 +116,50 @@ To download files from Launchpad repository, you should install bazaar (bzr) th
|
||||
version control system like subversion, mercurial, git...
|
||||
|
||||
Launchpad repository handle 2 branches for KiCda sources:
|
||||
- a testing branch (used by developers)
|
||||
- a stable branch (a copy of the testing branch, when this testing branch is near a stable state))
|
||||
- a product branch (used by developers, which is most of time usable in production)
|
||||
- a stable branch (a copy of the testing branch,
|
||||
when the product branch is a stable state))
|
||||
Remarks:
|
||||
- The product branch is actively maintained
|
||||
- From the product branch, you can go back to any previous version, using bzr features
|
||||
- The stable branch is poorly or not maintained (and could be removed)
|
||||
|
||||
Testing branch:
|
||||
bzr branch lp:kicad kicad_testing
|
||||
In order to have a working Kicad installtion, you need
|
||||
- sources to build binaries
|
||||
- libraries (they are not included in sources)
|
||||
- documentation and translations (they are not included in sources)
|
||||
|
||||
product branch:
|
||||
bzr branch lp:kicad kicad_src
|
||||
|
||||
Stable branch:
|
||||
bzr branch lp:kicad/stable kicad_stable
|
||||
bzr branch lp:kicad/stable kicad_src
|
||||
|
||||
Components and Footprints libraries
|
||||
bzr branch lp:~kicad-lib-committers/kicad/library kicad_libraries
|
||||
all (schematic libs, 3D shapes ...) but new footprints libraries (use Download zip tool)
|
||||
https://github.com/KiCad/kicad-library/
|
||||
|
||||
New footprints libraries (use Download zip tool for each lib you want)
|
||||
https://github.com/KiCad/ for footprint libs (*.pretty folders)
|
||||
|
||||
A mirror of github is available, using bzr:
|
||||
(schematic libs, 3D shapes ... all but new footprints libraries)
|
||||
bzr checkout lp:~kicad-product-committers/kicad/library
|
||||
|
||||
Old legacy libraries:
|
||||
bzr checkout lp:~dickelbeck/kicad/library-read-only
|
||||
|
||||
Note also Kicad is able to read on github.com/KiCad/ the *.pretty folders
|
||||
without download, using github plugin.
|
||||
(however the time to read them can be long)
|
||||
|
||||
Documentation and translations:
|
||||
bzr branch lp:~kicad-developers/kicad/doc kicad_doc
|
||||
|
||||
Create Makefiles with CMake
|
||||
---------------------------
|
||||
If windows, go into your msys shell. Linux and windows users both then make
|
||||
two "out of source" build directories:
|
||||
On windows, go into your msys shell.
|
||||
Linux and windows users both then make two "out of source" build directories:
|
||||
cd <kicadSource>
|
||||
mkdir -p build/release
|
||||
mkdir build/debug (if you want a debug version of KiCad)
|
||||
@@ -133,10 +168,10 @@ two "out of source" build directories:
|
||||
On either cmake command line shown below, you can optionally include
|
||||
-DCMAKE_INSTALL_PREFIX=<finallInstallDir>
|
||||
|
||||
If windows, run the following command:
|
||||
On windows, run the following command:
|
||||
cmake -G "MSYS Makefiles" -DCMAKE_BUILD_TYPE=Release -DwxWidgets_ROOT_DIR=<wxInstallDir> ../../
|
||||
|
||||
If linux, run instead the following command:
|
||||
On linux, run instead the following command:
|
||||
cmake -DCMAKE_BUILD_TYPE=Release ../../
|
||||
|
||||
Take a look at CMakeCache.txt, and in particular CMAKE_INSTALL_PREFIX, which
|
||||
@@ -166,18 +201,16 @@ On either cmake command line shown below, you can optionally include
|
||||
Although normally you do not install the Debug binaries, you can debug them
|
||||
where they were built.
|
||||
|
||||
If windows, run the following command:
|
||||
On windows, run the following command:
|
||||
cmake -G "MSYS Makefiles" -DCMAKE_BUILD_TYPE=Debug -DwxWidgets_ROOT_DIR=<wxInstallDir> ../../
|
||||
where <wxInstallDir> is <wxWidgets path>/Release
|
||||
|
||||
If linux, run instead the following command:
|
||||
On linux, run instead the following command:
|
||||
cmake -DCMAKE_BUILD_TYPE=Debug -DwxWidgets_USE_DEBUG=ON ../../
|
||||
|
||||
Make the Debug binaries:
|
||||
make
|
||||
|
||||
Note: that it is easy to build only a specific binary such as pcbnew alone:
|
||||
make pcbnew
|
||||
|
||||
|
||||
See ./cmake_config.txt for customizing the KiCad build setting.
|
||||
See Documentation/compiling/build-config.txt for a list of all CMake options
|
||||
available when compiling KiCad.
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
Bazaar
|
||||
------
|
||||
======
|
||||
|
||||
KiCad uses the Bazaar version control system to track source code changes,
|
||||
and download the boost libraries needed by Kicad.
|
||||
The easiest way to get a copy of the KiCad source is to use Bazaar.
|
||||
@@ -11,7 +12,8 @@ Be sure bzrtools is also installed.
|
||||
boost libraries will be downloaded the first time you build Kicad.
|
||||
|
||||
CMake
|
||||
-----
|
||||
=====
|
||||
|
||||
KiCad uses CMake to generate the build files specific for the target platform
|
||||
specified by the developer. This document attempts to define some of the more
|
||||
common CMake and KiCad build configuration settings. You can use CMake either
|
||||
@@ -23,7 +25,8 @@ http://www.cmake.org/cmake/help/documentation.html.
|
||||
|
||||
|
||||
Useful CMake Build Settings.
|
||||
----------------------------
|
||||
============================
|
||||
|
||||
This section defines some of the more common CMake build configuration setting
|
||||
used when configuring KiCad. These settings are valid for all projects that
|
||||
use CMake.
|
||||
@@ -39,14 +42,18 @@ switch on the command line. Please note, only a small subset of these project
|
||||
generators are supported. If you want to use Eclipse on Linux to build KiCad,
|
||||
you may be in for a lot of work.
|
||||
|
||||
|
||||
CMAKE_BUILD_TYPE (Release/Debug/RelWithDebInfo/MinSizeRel)
|
||||
----------------------------------------------------------
|
||||
Default: Release
|
||||
|
||||
When configuring the KiCad build for the command line you must specify build
|
||||
type. To create a debug build, set CMAKE_BUILD_TYPE to Debug. To create a
|
||||
release build, set CMAKE_BUILD_TYPE to Release. See the CMake documentation
|
||||
for other build types. For IDE project files, the build type can be selected
|
||||
by the IDE configuration manager.
|
||||
|
||||
|
||||
CMAKE_INSTALL_PATH (InstallPath)
|
||||
--------------------------------
|
||||
By default CMake will select the correct install path for your platform. If
|
||||
@@ -57,7 +64,8 @@ installed on your system.
|
||||
|
||||
|
||||
wxWidgets Library Configuration.
|
||||
--------------------------------
|
||||
================================
|
||||
|
||||
KiCad is built using the wxWidgets library. The following options allow you
|
||||
to specifically tailor the wxWidgets library configuration. For the complete
|
||||
list of wxWidgets setting see CMakeModules/FindwxWidgets.cmake in the KiCad
|
||||
@@ -69,85 +77,147 @@ CMake looks in the standard platform locations to find the default version of
|
||||
the wxWidgets library. If you wish to use a custom built wxWidgets library,
|
||||
set wxWidgets_ROOT_DIR to the correct path.
|
||||
|
||||
|
||||
wxWidgets_USE_DEBUG (ON/OFF)
|
||||
----------------------------
|
||||
Default: OFF
|
||||
|
||||
When creating a debug build of KiCad, it is often useful to link against the
|
||||
debug build of the wxWidgets. To use the debug build of wxWidgets, set
|
||||
wxWidgets_USE_DEBUG to ON.
|
||||
|
||||
|
||||
wxWidgets_USE_UNICODE (ON/OFF)
|
||||
------------------------------
|
||||
Default: ON (wxWidgets 2.9 or later), OFF (older versions)
|
||||
|
||||
If your platform supports Unicode and you wish to build KiCad with Unicode
|
||||
support, set wxWidgets_USE_UNICODE to ON. Please note as of the 2.9 branch
|
||||
this option is not required.
|
||||
|
||||
|
||||
KiCad Specific Options
|
||||
----------------------
|
||||
======================
|
||||
|
||||
All of the configuration settings below are specific to the KiCad project.
|
||||
If for any reason you add or remove a build option to the KiCad CMake files,
|
||||
please update the list below.
|
||||
|
||||
KICAD_SKIP_BOOST (ON/OFF)
|
||||
--------------------------
|
||||
Skips building the required boost library components.
|
||||
WARNING: KiCad developers strongly advise you to build the bundled boost library, as it is
|
||||
known to work with KiCad. Other versions may contain bugs that may result in KiCad errors.
|
||||
Default: OFF
|
||||
|
||||
Use the version of the Boost library installed on the system rather than
|
||||
building a local copy.
|
||||
|
||||
WARNING: The KiCad developers strongly advise you to build the bundled copy of
|
||||
the Boost library, as it is known to work with KiCad. Other versions may
|
||||
contain bugs that may result in KiCad errors.
|
||||
|
||||
|
||||
USE_WX_GRAPHICS_CONTEXT (ON/OFF)
|
||||
--------------------------------
|
||||
This option is *Experimental* and used the advanced drawing library code
|
||||
using wxGraphicsContext and should only be used for testing purposes.
|
||||
Under Windows, a very recent version of mingw is needed. It also requires
|
||||
wxWidgets to be built with the --enable-graphics_ctx configuration switch.
|
||||
Default: OFF
|
||||
|
||||
This option is *Experimental*. It enables advanced drawing library code using
|
||||
wxGraphicsContext and should only be used for testing purposes. Under Windows,
|
||||
a very recent version of mingw is needed. It also requires wxWidgets to be
|
||||
built with the --enable-graphics_ctx configuration switch.
|
||||
|
||||
|
||||
USE_IMAGES_IN_MENUS (ON/OFF)
|
||||
----------------------------
|
||||
Default: OFF for OSX, ON for other platforms.
|
||||
|
||||
This option is used to enable or disable building KiCad with images in menu
|
||||
items. If this is not defined when CMake is used to create the build files,
|
||||
images will be included in menu items on all platforms except OSX.
|
||||
|
||||
|
||||
DOWNLOAD_DIR (PATH)
|
||||
-------------------
|
||||
Default: <source directory>/.downloads-by-cmake
|
||||
|
||||
Some external dependencies are automatically download and built when you
|
||||
compile KiCad. This option specifies which directory they are stored in. If you
|
||||
are building multiple copies of KiCad (e.g., to test different features or your
|
||||
own modifications), it is recommended you set this option to a global directory
|
||||
to avoid download and building the dependencies multiple times.
|
||||
|
||||
|
||||
KICAD_USER_CONFIG_DIR (PATH)
|
||||
----------------------------
|
||||
Default: Home directory (Unix-based systems), Application data directory (Windows)
|
||||
|
||||
This option specifies where to store user-specific configuration information.
|
||||
|
||||
|
||||
KICAD_KEEPCASE (ON/OFF)
|
||||
-----------------------
|
||||
This option enables or disables turning off the automatic component name
|
||||
conversion to uppercase. The default is OFF which means component names will
|
||||
be converted to upper case.
|
||||
Default: ON
|
||||
|
||||
If this is OFF, component names are automatically converted to uppercase meaning
|
||||
they are case insensitive. If it is ON, component names are not changed and
|
||||
are therefore case sensitive.
|
||||
|
||||
|
||||
USE_WX_OVERLAY (ON/OFF)
|
||||
-----------------------
|
||||
This option enables or disables wxOverlay for drawing operation on OSX. It is
|
||||
OFF by default on all platforms except OSX. Warning, this is experimental!
|
||||
Default: ON for OSX, OFF for other platforms.
|
||||
|
||||
This option enables or disables the use of wxOverlay for drawing operations.
|
||||
Warning, this is experimental!
|
||||
|
||||
|
||||
KICAD_SCRIPTING (ON/OFF)
|
||||
------------------------
|
||||
This option enables or disables building Python scripting support for KiCad.
|
||||
The default is OFF. Currently only Pcbnew is supported. This option requires
|
||||
that SWIG and Python are installed on the system.
|
||||
Default: OFF
|
||||
|
||||
This option enables or disables building Python scripting support within KiCad.
|
||||
Currently only Pcbnew is supported. This option requires SWIG and Python to be
|
||||
installed on the system.
|
||||
|
||||
|
||||
KICAD_SCRIPTING_MODULES (ON/OFF)
|
||||
--------------------------------
|
||||
This option enables or disables building the KiCad modules that can be used
|
||||
from scripting languages. The default is OFF. Currently only Pcbnew is
|
||||
supported. This option requires that SWIG and Python are installed on the
|
||||
system.
|
||||
Default: OFF
|
||||
|
||||
This option enables or disables building KiCad Python modules that can be used
|
||||
externally by Python. Currently only Pcbnew is supported. This option
|
||||
requires SWIG and Python to be installed on the system.
|
||||
|
||||
|
||||
KICAD_SCRIPTING_WXPYTHON (ON/OFF)
|
||||
---------------------------------
|
||||
This option enables or disables building wxPython support into KiCad for
|
||||
python and py.shell. The default is OFF. Currently only Pcbnew is
|
||||
supported. This option requires that SWIG, Python, and wxPython are
|
||||
installed on the system.
|
||||
Default: OFF
|
||||
|
||||
This option enables or disables building wxPython support into the KiCad
|
||||
scripting support. Currently only Pcbnew is supported. This option requires
|
||||
SWIG, Python, and wxPython to be installed on the system.
|
||||
|
||||
|
||||
PYTHON_SITE_PACKAGE_PATH (PATH)
|
||||
-------------------------------
|
||||
Default: System site library path
|
||||
|
||||
When building KiCad with Python scripting enable, the Python site library path
|
||||
is used by default. If you want to install the KiCad Python extension in a
|
||||
different path, set this variable to the desired path.
|
||||
|
||||
|
||||
USE_FP_LIB_TABLE (ON/OFF)
|
||||
-------------------------
|
||||
This option enable or disables building KiCad with the new footprint library
|
||||
table support. The default setting (OFF) builds KiCad with the legacy library
|
||||
path support. This option is experimental until the library table support is
|
||||
ready for release.
|
||||
BUILD_GITHUB_PLUGIN (ON/OFF)
|
||||
----------------------------
|
||||
Default: OFF
|
||||
|
||||
This option enables or disables building KiCad with a pcbnew plugin for loading
|
||||
footprints from a GitHub repository.
|
||||
|
||||
|
||||
KICAD_REPO_NAME (STRING)
|
||||
------------------------
|
||||
Default: "product"
|
||||
|
||||
The name of the repository this copy of KiCad was compiled from. This is
|
||||
reported in the "About" dialog and is useful for people who are working with
|
||||
multiple copies of the code from different sources. The default value is
|
||||
"product", the name of the main development branch on Launchpad.
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
Compiling KiCad on Apple Mac OS X
|
||||
=================================
|
||||
First written: 2010-01-31
|
||||
Last edited by: Jerry Jacobs <xor.gate.engineering[at]gmail[dot]com>
|
||||
by: Jerry Jacobs <xor.gate.engineering[at]gmail[dot]com>
|
||||
|
||||
Modified at: 2014-02-07
|
||||
by: Marco Serantoni <marco.serantoni[at]gmail[dot]com>
|
||||
|
||||
Snow Leopard
|
||||
------------
|
||||
@@ -11,158 +13,51 @@ Requirements
|
||||
* XCode Tools (http://developer.apple.com/tools/xcode)
|
||||
* bzr (bazaar)
|
||||
* CMake (http://www.cmake.org)
|
||||
* wxWidgets 2.9 (http://www.wxwidgets.org/downloads)
|
||||
* Doxygen (http://www.doxygen.nl)
|
||||
* ccache (http://www.macports.org)
|
||||
|
||||
The build of Kicad for OSX is now easier than before.
|
||||
The building system will download and compile the needed libraries for you
|
||||
patching them accordly to the needs.
|
||||
|
||||
Building wxWidgets 2.9 Universal
|
||||
Building Kicad with no support for Scripting
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
To check if your tools and libraries are installed check with file for architectures.
|
||||
|
||||
user@macosx$ file /Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.dylib
|
||||
The building needs to know if you want a static binary or a dynamic one
|
||||
Just set ONE of those two options KICAD_BUILD_STATIC or KICAD_BUILD_DYNAMIC
|
||||
|
||||
If you set KICAD_BUILD_DYNAMIC the building system will build all and include
|
||||
the needed libraries for each executable in its bundle
|
||||
|
||||
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.dylib: Mach-O universal binary with 4 architectures
|
||||
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.dylib (for architecture ppc7400): Mach-O dynamically linked shared library stub ppc
|
||||
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.dylib (for architecture ppc64)Mach-O 64-bit dynamically linked shared library stub ppc64
|
||||
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.dylib (for architecture i386):Mach-O dynamically linked shared library stub i386
|
||||
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libSystem.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library stub x86_64
|
||||
cmake -DKICAD_BUILD_DYNAMIC=ON .
|
||||
make
|
||||
|
||||
You need the architectures what you are compiling for !
|
||||
Building Kicad with support for Scripting
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Due some problems with some dependencies the build of this kind of binary is a bit
|
||||
more complex, you should initially set KICAD_BUILD_DYNAMIC
|
||||
then issue for example
|
||||
|
||||
If you have problems that the 64bits library is not build you should add in
|
||||
the configure file:
|
||||
cmake -DKICAD_BUILD_DYNAMIC=ON .
|
||||
make swig
|
||||
|
||||
At time of writing (2009-01-16) this is on line 18381
|
||||
changing this: OSX_UNIV_OPTS="-arch ppc -arch i386"
|
||||
into this: OSX_UNIV_OPTS="-arch ppc -arch i386 -arch x86_64"
|
||||
After successfully building you can set your KICAD_SCRIPTING* options (for example):
|
||||
|
||||
Building a universal monolib wxWidgets 2.9 with the following parameters:
|
||||
./configure --enable-unicode=yes --enable-shared=no --enable-monolithic --with-opengl --with-expat=builtin --enable-universal_binary --enable-aui --enable-debug --with-osx_cocoa --with-macosx-sdk=/Developer/SDKs/MacOSX10.5.sdk/ --prefix=/opt/wxwidgets/<rev>
|
||||
cmake -DKICAD_SCRIPTING=ON -DKICAD_SCRIPTING_WXPYTHON=ON -DKICAD_SCRIPTING_MODULES=ON .
|
||||
make
|
||||
|
||||
<rev> Should be subsituded with the revision from SVN
|
||||
The system will build all accordling your choices and package all in the bundle
|
||||
I know bundles will be huge, but those will be autosufficient.
|
||||
|
||||
Then you should a message like this:
|
||||
Building Kicad for other processors or Universal binaries
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Configured wxWidgets 2.9.2 for `i686-apple-darwin10.4.0'
|
||||
I wish remember you should set the processor like
|
||||
|
||||
Which GUI toolkit should wxWidgets use? osx_cocoa
|
||||
Should wxWidgets be compiled into single library? yes
|
||||
Should wxWidgets be linked as a shared library? no
|
||||
Should wxWidgets support Unicode? yes (using UTF-8)
|
||||
What level of wxWidgets compatibility should be enabled?
|
||||
wxWidgets 2.6 no
|
||||
wxWidgets 2.8 yes
|
||||
Which libraries should wxWidgets use?
|
||||
STL no
|
||||
jpeg builtin
|
||||
png builtin
|
||||
regex builtin
|
||||
tiff builtin
|
||||
zlib sys
|
||||
expat builtin
|
||||
libmspack no
|
||||
sdl no
|
||||
cmake -DCMAKE_OSX_ARCHITECTURES="x86_64"
|
||||
|
||||
for other platforms
|
||||
|
||||
If you don't need the debugging symbols then you can remove the --enable-debug parameter.
|
||||
cmake -DCMAKE_OSX_ARCHITECTURES="x86_64 -arch i386"
|
||||
cmake -DCMAKE_OSX_ARCHITECTURES="x86_64 -arch i386 -arch ppc"
|
||||
|
||||
Compiling and installing:
|
||||
make
|
||||
sudo make install
|
||||
|
||||
|
||||
Move the old Mac OS X wxconfig and symlink it to the new compiled 2.9
|
||||
|
||||
sudo mv /usr/bin/wx-config /usr/bin/wx-config.osx
|
||||
sudo ln -s /opt/wxwidgets-svn/bin/wx-config /usr
|
||||
|
||||
Building KiCad
|
||||
~~~~~~~~~~~~~~
|
||||
Extract the sources or get them from subversion.
|
||||
|
||||
user@mac-osx$ cmake .
|
||||
|
||||
Regarding Kicad the only things i've changed are the Variables
|
||||
in the generated CMakeCache.txt
|
||||
|
||||
It depends on which CMake version you use:
|
||||
|
||||
//Flags used by the compiler during all build types.
|
||||
//This fixes also BOOST macro errors
|
||||
CMAKE_CXX_FLAGS:STRING=-D__ASSERTMACROS__
|
||||
|
||||
//Build architectures for OSX
|
||||
CMAKE_OSX_ARCHITECTURES:STRING=x86_64 -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.5.sdk/ -mmacosx-version-min=10.5
|
||||
|
||||
//The product will be built against the headers and libraries located
|
||||
// inside the indicated SDK.
|
||||
CMAKE_OSX_SYSROOT:PATH=/Developer/SDKs/MacOSX10.5.sdk
|
||||
|
||||
//Minimum OS X version to target for deployment (at runtime); newer
|
||||
// APIs weak linked. Set to empty string for default value.
|
||||
CMAKE_OSX_DEPLOYMENT_TARGET:STRING=10.5
|
||||
|
||||
Or:
|
||||
|
||||
CMAKE_OSX_ARCHITECTURE = x86_64 -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.5.sdk/ -mmacosx-version-min=10.5
|
||||
CMAKE_OSX_SYSROOT = /Developer/SDKs/MacOSX10.5.sdk
|
||||
CMAKE_CXX_FLAGS = -D__ASSERTMACROS__
|
||||
|
||||
|
||||
Then we invoke make:
|
||||
user@mac-osx$ make
|
||||
|
||||
It is also possible to give all the options on the commandline and not to edit the CMakeCache.txt. This is a oneliner for Leopard and up:
|
||||
|
||||
cmake ~/Repositories/testing -DCMAKE_OSX_ARCHITECTURES="i386 -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.6" -DCMAKE_CXX_FLAGS="-D__ASSERTMACROS__" -DCMAKE_OSX_SYSROOT="/Developer/SDKs/MacOSX10.6.sdk"
|
||||
|
||||
Optional compiler cache
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
If you (re)compile often, you would love to use cache. The best is to install it using macports and set the libexec symlink
|
||||
directory of ccache in your PATH variable.
|
||||
|
||||
Then start with a clean directory and invoke cmake, make sure that the C++ compiler points to /opt/local/libexec/ccache/g++
|
||||
|
||||
Further reading at http://trac.macports.org/wiki/howto/ccache
|
||||
|
||||
Known Problems
|
||||
~~~~~~~~~~~~~~
|
||||
In file included from
|
||||
/temp/kicad-sources/boost_1_38_0/boost/ptr_container/detail/reversible_ptr_container.hpp:22In
|
||||
file included from
|
||||
/temp/kicad-sources/boost_1_38_0/boost/ptr_container/detail/reversible_ptr_container.hpp:22,
|
||||
from
|
||||
/temp/kicad-sources/boost_1_38_0/boost/ptr_container/ptr_sequence_adapter.hpp:20,
|
||||
from
|
||||
/temp/kicad-sources/boost_1_38_0/boost/ptr_container/ptr_vector.hpp:20,
|
||||
from
|
||||
/temp/kicad-sources/kicad/include/board_item_struct.h:9,
|
||||
from /temp/kicad-sources/kicad/include/pcbstruct.h:10,
|
||||
from /temp/kicad-sources/kicad/3d-viewer/3d_viewer.h:29,
|
||||
from /temp/kicad-sources/kicad/3d-viewer/3d_aux.cpp:23:
|
||||
/temp/kicad-sources/boost_1_38_0/boost/ptr_container/detail/static_move_ptr.hpp:154:50:
|
||||
error: macro "check" passed 2 arguments, but takes just 1
|
||||
|
||||
CMAKE_CXX_FLAGS = -D__ASSERTMACROS__ fixes this :-)
|
||||
|
||||
|
||||
configure:18585: gcc -isysroot /Developer/SDKs/MacOSX10.5.sdk/ -mmacosx-version-min=10.5 -o conftest -arch i386 -arch x86_64 -arch ppc -arch i386 -arch x86_64 -arch ppc conftest.c >&5
|
||||
ld: warning: in /Developer/SDKs/MacOSX10.5.sdk//usr/lib/libSystem.dylib, missing required architecture ppc in file
|
||||
|
||||
Installing rosetta and xcode with all architectures fixes this "problem"
|
||||
|
||||
|
||||
ld: warning: in /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks//QuickTime.framework/QuickTime, missing required architecture x86_64 in file
|
||||
|
||||
You get this error because the QuickTime 10.6 framework is not build with 64bit support. This not a real issue for KiCad because we don't use it anyway.
|
||||
|
||||
Undefined symbols:
|
||||
"TestForIntersectionOfStraightLineSegments(int, int, int, int, int, int, int, int, int*, int*, double*)", referenced from:
|
||||
clipLine(EDA_Rect*, int&, int&, int&, int&)in libcommon.a(gr_basic.cpp.o)
|
||||
|
||||
Make sure you marked the build type Release:
|
||||
|
||||
//Choose the type of build, options are: None(CMAKE_CXX_FLAGS or
|
||||
// CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.
|
||||
CMAKE_BUILD_TYPE:STRING=Release
|
||||
I know some you should prefer use ; as separator, this will be accomplished soon
|
||||
keeping support for both the syntaxes
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,761 @@
|
||||
# Road Map # {#mainpage}
|
||||
|
||||
This document is the KiCad Developer's road map document. It is a living
|
||||
document that should be maintained as the project progresses. The goal of
|
||||
this document is to provide an overview for developers of where the project
|
||||
is headed to prevent resource conflicts and endless rehashing of previously
|
||||
discussed topics. It is broken into sections for each major component of
|
||||
the KiCad source code and documentation. It defines tasks that developers
|
||||
an use to contribute to the project and provides updated status information.
|
||||
Tasks should define clear objective and avoid vague generalizations so that
|
||||
a new developer can complete the task. It is not a place for developers to
|
||||
add their own personal wish list It should only be updated with approval
|
||||
of the project manager after discussion with the lead developers.
|
||||
|
||||
Each entry in the road map is made up of four sections. The goal should
|
||||
be a brief description of the what the road map entry will accomplish. The
|
||||
task section should be a list of deliverable items that are specific enough
|
||||
hat they can be documented as completed. The dependencies sections is a list
|
||||
of requirements that must be completed before work can begin on any of the
|
||||
tasks. The status section should include a list of completed tasks or marked
|
||||
as complete as when the goal is met.
|
||||
|
||||
[TOC]
|
||||
|
||||
# Project # {#project}
|
||||
This section defines the tasks for the project related goals that are not
|
||||
related to coding or documentation. It is a catch all for issues such as
|
||||
developer and user relations, dissemination of information on websites,
|
||||
policies, etc.
|
||||
|
||||
## Stable Release ## {#stable_release}
|
||||
**Goal:**
|
||||
|
||||
Provide a lightweight stable release mechanism that is robust enough to meet
|
||||
the requirements of Linux packagers and corporate users but avoid the burden
|
||||
of back porting fixes to a maintenance branch to avoid the additional work for
|
||||
developers.
|
||||
|
||||
**Task:**
|
||||
- Devise a process to have some type of reasonably stable release protocol
|
||||
to provide "stable" releases for Linux distribution packagers and corporate
|
||||
users.
|
||||
- Document "stable" release procedure.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- Initial planning stages.
|
||||
|
||||
|
||||
## Website Improvements ## {#website_improvements}
|
||||
**Goal:**
|
||||
|
||||
Make the website at www.kicad-pcb.org as the definitive resource for both
|
||||
users and developers which will provide a single point of reference instead
|
||||
of the many separate websites currently in used.
|
||||
|
||||
**Task:**
|
||||
- Define the content and design of the website.
|
||||
- Implement the new design.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
|
||||
# General # {#general}
|
||||
This section defines the tasks that affect all or most of KiCad or do not
|
||||
fit under as specific part of the code such as the board editor or the
|
||||
schematic editor.
|
||||
|
||||
## Convert to a Single Process Application. ## {#kiway}
|
||||
**Goal:**
|
||||
|
||||
Merge common schematic and board code into to separate dynamic objects to allow
|
||||
Eeschema and Pcbnew to run under a single process.
|
||||
|
||||
**Task:**
|
||||
- Convert the majority core code in Eeschema and Pcbnew into dynamic libraries.
|
||||
- Provide a robust method for communicating between code running under a single
|
||||
process.
|
||||
- Revise the schematic editor and board editor main windows run under a single
|
||||
process instead of multiple stand alone applications.
|
||||
- Design a method for passing information between the dynamic libraries running
|
||||
under the same process.
|
||||
- Remove inter-process communications between Eeschema and Pcbnew.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- Stage 1 code released.
|
||||
- Stage 2 in process.
|
||||
|
||||
## User Interface Modernization ## {#wxaui}
|
||||
**Goal:**
|
||||
|
||||
Give KiCad a more modern user interface with dockable tool bars and windows.
|
||||
Create perspectives to allow users to arrange dockable windows as they prefer.
|
||||
|
||||
**Task:**
|
||||
- Take advantage of the advanced UI features in wxAui such as detaching and
|
||||
hiding.
|
||||
- Study ergonomics of various commercial/proprietary PCB applications (when
|
||||
in doubt about any particular UI solution, check how it has been done in a
|
||||
certain proprietary app that is very popular among OSHW folks and do exactly
|
||||
opposite).
|
||||
- Clean up menu structure. Menus must allow access to all features of the
|
||||
program in a clear and logical way. Currently some functions of Pcbnew are
|
||||
accessible only through tool bars
|
||||
- Redesign dialogs, make sure they are following same style rules.
|
||||
- Check quality of translations. Either fix or remove bad quality translations.
|
||||
- Develop a global shortcut manager that allows the user assign arbitrary
|
||||
shortcuts for any tool or action.
|
||||
|
||||
**Dependencies:**
|
||||
- [wxWidgets 3](#wxwidgets3)
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
|
||||
# Build Tools # {#build_tools}
|
||||
This section covers build tools for both the KiCad source as well as the
|
||||
custom dependency builds required to build KiCad.
|
||||
|
||||
## Create Separate Build Dependency Project ## {#depends_prj}
|
||||
**Goal:**
|
||||
|
||||
Move the library dependencies and their patches into a separate project to
|
||||
developers to build and install them as required instead of requiring them
|
||||
at build time. Give developers the flexibility to build and/or install
|
||||
library dependencies as they see fit. Remove them from the KiCad source code
|
||||
to reduce the build footprint.
|
||||
|
||||
**Task:**
|
||||
- Create a separate project to build all external dependency libraries that are
|
||||
currently build from source (Boost, OpenSSL, etc).
|
||||
- Use CMake to create a package configuration file for each library so the
|
||||
KiCad find package can pull in header paths, library dependencies, compile
|
||||
flags, and link flags to build KiCad.
|
||||
- Use CMake find package to pull external dependencies.
|
||||
- Remove all build from source dependencies for KiCad source code.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- Initial concept discussions.
|
||||
|
||||
## Platform Binary Installers ## {#installers}
|
||||
**Goal:**
|
||||
|
||||
Provide quality installers for all supported platforms.
|
||||
|
||||
**Task:**
|
||||
- Bring OSX installer up to the level of the Window's and Linux installers.
|
||||
- Possible use of CPack to build platform specific installers as long as they
|
||||
are of the same or better quality than the current independent installers.
|
||||
|
||||
**Dependencies**
|
||||
- None
|
||||
|
||||
**Status**
|
||||
- No progress
|
||||
|
||||
|
||||
# Common Library # {#common_lib}
|
||||
This section covers the source code shared between all of the KiCad
|
||||
applications
|
||||
|
||||
## Unified Rendering Framework ## {#unified_rendering}
|
||||
**Goal:**
|
||||
|
||||
Provide a single framework for developing new tools. Port existing tools
|
||||
to the new framework and remove the legacy framework tools.
|
||||
|
||||
**Task:**
|
||||
- Port wxDC to GAL or get Cairo rendering to nearly the performance of the
|
||||
current wxDC rendering so that we have a single framework to develop new
|
||||
tools and we can continue to support systems that don't have a complete
|
||||
OpenGL stack.
|
||||
|
||||
**Dependencies**
|
||||
- [Tool framework](http://www.ohwr.org/projects/cern-kicad/wiki/WorkPackages)
|
||||
|
||||
**Status**
|
||||
- No progress
|
||||
|
||||
## Unified Geometry Library ## {#geometry_lib}
|
||||
**Goal:**
|
||||
|
||||
Select a single geometry library so that all applications share a common
|
||||
base for 2D objects. Remove any redundant geometry libraries and code to
|
||||
clean up code base.
|
||||
|
||||
**Task:**
|
||||
- Select the best geometry library (Boost, etc.) for the task.
|
||||
- Port all legacy geometry code to the selected library.
|
||||
- Remove any unused geometry library code.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- In progress as part of push and shove router.
|
||||
|
||||
## Conversion to wxWidgets 3 ## {#wxwidgets3}
|
||||
**Goal:**
|
||||
|
||||
Stop supporting the version 2 branch of wxWidgets so that newer features
|
||||
provided by version 3 can be utilized.
|
||||
|
||||
**Task:**
|
||||
- Make wxWidgets 3 a build requirement.
|
||||
- Remove all wxWidgets 2 specific code.
|
||||
|
||||
**Dependencies:**
|
||||
- wxWidgets 3 is widely available on Linux distributions.
|
||||
|
||||
**Status:**
|
||||
- No progress
|
||||
|
||||
## Linux Printing Improvements ## {#linux_print}
|
||||
**Goal:**
|
||||
|
||||
Bring printing on Linux up to par with printing on Windows.
|
||||
|
||||
**Task:**
|
||||
- Resolve Linux printing issues.
|
||||
|
||||
**Dependencies**
|
||||
- [wxWidgets 3](#wxwidgets3)
|
||||
|
||||
**Status**
|
||||
- No progress.
|
||||
|
||||
## Object Properties and Introspection ## {#object_props}
|
||||
**Goal:**
|
||||
|
||||
Provide an object introspection system using properties.
|
||||
|
||||
**Task:**
|
||||
- Select existing or develop property system.
|
||||
- Add definable properties to base objects.
|
||||
- Create introspection framework for manipulating object properties.
|
||||
- Serialization of properties to and from files and/or other I/O structures.
|
||||
- Create tool to edit property name/type/value table.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Dynamic Library Plugin ## {#plugin_base}
|
||||
**Goal:**
|
||||
|
||||
Create a base library plugin for handling external file I/O. This will allow
|
||||
plugins to be provided that are external to the project such as providing solid
|
||||
model file support (STEP, IGES, etc.) using OpenCascade without making it a
|
||||
project dependency.
|
||||
|
||||
**Task:**
|
||||
- Create a plugin to handle dynamically registered plugins for loading and
|
||||
saving file formats.
|
||||
- This object should be flexible enough to be extended for handling all file
|
||||
plugin types including schematic, board, footprint library, component
|
||||
library, etc.
|
||||
- See [blueprint](https://blueprints.launchpad.net/kicad/+spec/pluggable-file-io)
|
||||
on Launchpad for more information.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
|
||||
# KiCad: Application Launcher # {#kicad}
|
||||
This section applies to the source code for the KiCad application launcher.
|
||||
|
||||
|
||||
# Eeschema: Schematic Editor # {#eeschema}
|
||||
This section applies to the source code for the Eeschema schematic editor.
|
||||
|
||||
## Coherent SCHEMATIC Object ## {#sch_object}
|
||||
**Goal:**
|
||||
|
||||
Clean up the code related to the schematic object(s) into a coherent object for
|
||||
managing and manipulating the schematic.
|
||||
|
||||
**Task:**
|
||||
- Move most if not all of the code from SCH_SCREEN to the new SCHEMATIC object.
|
||||
- Add any missing functionality to the SCHEMATIC object.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Hierarchical Sheet Design ## {#hierarchy_fix}
|
||||
**Goal:**
|
||||
|
||||
Create a more robust sheet instance design rather than recreating them on the
|
||||
fly every time sheet information is required.
|
||||
|
||||
**Task:**
|
||||
- Choose a data structure to contain the sheet hierarchy.
|
||||
- Create helper class to manipulate the hierarchy data structure.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Schematic and Component Library Plugin ## {#sch_plugin}
|
||||
**Goal:**
|
||||
Create a plugin manager for loading and saving schematics and component
|
||||
libraries similar to the board plugin manager.
|
||||
|
||||
**Task:**
|
||||
- Design plugin manager for schematics and component libraries.
|
||||
- Port the current schematic and component library file formats to use the
|
||||
plugin.
|
||||
|
||||
**Dependencies:**
|
||||
- [Dynamic library plugin](#plugin_base)
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Graphics Abstraction Layer Conversion ## {#sch_gal}
|
||||
**Goal:**
|
||||
|
||||
Take advantage of advanced graphics rendering in Eeschema.
|
||||
|
||||
**Task:**
|
||||
- Port graphics rendering to GAL.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Port Editing Tools ## {#sch_tool_framework}
|
||||
**Goal:**
|
||||
|
||||
Use standard tool framework across all applications.
|
||||
|
||||
**Task:**
|
||||
- Rewrite editing tools using the new tool framework.
|
||||
|
||||
**Dependencies:**
|
||||
- [GAL port](#sch_gal).
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## S-Expression File Format ## {#sch_sexpr}
|
||||
**Goal:**
|
||||
|
||||
Make schematic file format more readable, add new features, and take advantage
|
||||
of the s-expression capability used in Pcbnew.
|
||||
|
||||
**Task:**
|
||||
- Finalize feature set and file format.
|
||||
- Discuss the possibility of dropping the unit-less proposal temporarily to get
|
||||
the s-expression file format and SWEET library format implemented without
|
||||
completely rewriting Eeschema.
|
||||
- Add new s-expression file format to plugin.
|
||||
|
||||
**Dependencies:**
|
||||
- [Dynamic library plugin](#plugin_base).
|
||||
|
||||
**Status:**
|
||||
- File format document nearly complete.
|
||||
|
||||
## Implement Sweet Component Libraries ## {#sch_sweet}
|
||||
**Goal:**
|
||||
|
||||
Make component library design more robust and feature rich. Use s-expressions
|
||||
to make component library files more readable.
|
||||
|
||||
**Task:**
|
||||
- Use sweet component file format for component libraries.
|
||||
|
||||
**Dependencies:**
|
||||
- [S-expression file format](#sch_sexpr).
|
||||
|
||||
**Status:**
|
||||
- Initial SWEET library written.
|
||||
|
||||
## Component Library Editor Improvements ## {#lib_editor_usability}
|
||||
**Goal:**
|
||||
|
||||
Make editing components with multiple units and/or alternate graphical
|
||||
representations easier.
|
||||
|
||||
**Task:**
|
||||
- Determine usability improvements in the library editor for components with
|
||||
multiple units and/or alternate graphical representations.
|
||||
- Implement said useability improvements.
|
||||
|
||||
**Dependencies:**
|
||||
- None.
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Component and Netlist Attributes ## {#netlist_attributes}
|
||||
**Goal:**
|
||||
Provide a method of passing information to other tools via the net list.
|
||||
|
||||
**Task:**
|
||||
- Add virtual components and attributes to netlist to define properties that
|
||||
can be used by other tools besides the board editor.
|
||||
|
||||
**Dependencies:**
|
||||
- [S-expression schematic file format](#sch_sexpr).
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
|
||||
# CvPcb: Footprint Association Tool # {#cvpcb}
|
||||
This section covers the source code of the footprint assignment tool CvPcb.
|
||||
|
||||
## Footprint Assignment Tool ##
|
||||
**Goal:**
|
||||
|
||||
Merge the footprint assignment functionality of CvPcb into Eeschema so
|
||||
footprints can be assigned inside the schematic editor eliminating the need
|
||||
to launch an separate program.
|
||||
|
||||
**Task:**
|
||||
- Merge footprint assignment capability into Pcbnew shared library.
|
||||
- Remove CvPcb as a stand alone tool.
|
||||
- Add functionality to both the schematic and board editors so users can assign
|
||||
footprints as they prefer.
|
||||
|
||||
**Dependencies:**
|
||||
- [Convert to a single process application](#kiway).
|
||||
|
||||
**Status:**
|
||||
- Initial library conversion committed to product branch.
|
||||
|
||||
|
||||
# Pcbnew: Circuit Board Editor # {#pcbnew}
|
||||
This section covers the source code of the board editing application Pcbnew.
|
||||
|
||||
## Tool Framework ## {#pcb_tool_framework}
|
||||
**Goal:**
|
||||
|
||||
Unify all board editing tools under a single framework.
|
||||
|
||||
**Task:**
|
||||
- Complete porting of all board editing tools to new tool framework so they
|
||||
are available in the OpenGL and Cairo canvases.
|
||||
- Remove all duplicate legacy editing tools.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- Initial porting work in progress.
|
||||
|
||||
## Linked Objects ## {#pcb_linked_objects}
|
||||
**Goal:**
|
||||
|
||||
Provide a way to allow external objects such as footprints to be externally
|
||||
linked in the board file so that changes in the footprint are automatically
|
||||
updated. This will all a one to many object relationship which can pave the
|
||||
way for real board modules.
|
||||
|
||||
**Task:**
|
||||
- Add externally and internally linked objects to the file format to allow for
|
||||
footprints and/or other board objects to be shared (one to many relationship)
|
||||
instead of only supporting embedded objects (one to one relationship) that
|
||||
can only be edited in place.
|
||||
|
||||
**Dependencies:**
|
||||
- None.
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Modeling ## {#modeling}
|
||||
**Goal:**
|
||||
|
||||
Provide improved solid modeling support for KiCad including the file formats
|
||||
available in OpenCascade.
|
||||
|
||||
**Task:**
|
||||
- Design plugin architecture to handle loading and saving 3D models.
|
||||
- Back port existing 3D formats (IDF and S3D) to plugin
|
||||
- Add STEP 3D modeling capability.
|
||||
- Add IGES 3D modeling capability.
|
||||
|
||||
**Dependencies:**
|
||||
- [Dynamic library plugin](#plugin_base).
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Push and Shove Router Improvements ## {#ps_router_improvements}
|
||||
**Goal:**
|
||||
Add features such as matched length and microwave tools to the P&S router.
|
||||
|
||||
**Task:**
|
||||
- Determine which features are feasible.
|
||||
- Look at the recently opened FreeRouter code at
|
||||
http://www.freerouting.net/fen/download/file.php?id=146 for inspiration.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Layer Improvements ## {#pcb_layers}
|
||||
**Goal:**
|
||||
|
||||
Increase the number of usable technical and user defined layers in Pcbnew.
|
||||
|
||||
**Task:**
|
||||
- Extend the number of copper and mechanical layers.
|
||||
- Develop a type safe flag set template or adapt something already available.
|
||||
- Refactor Pcbnew code to use new flag and remove the 32 layer limitation.
|
||||
- Extend the board file format to handle the additional layers.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Pin and Part Swapping ## {#pcb_drc}
|
||||
**Goal:**
|
||||
|
||||
Allow Pcbnew to perform pin and/or part swapping during layout so the user
|
||||
does not have to do it in Eeschema and re-import the net list.
|
||||
|
||||
**Task:**
|
||||
- Provide forward and back annotation between the schematic and board editors.
|
||||
- Define netlist file format changes required to handle pin/part swapping.
|
||||
- Update netlist file formatter and parser to handle file format changes.
|
||||
- Develop a netlist comparison engine that will produce a netlist diff that
|
||||
can be passed between the schematic and board editors.
|
||||
- Create pin/part swap dialog to manipulate swappable pins and parts.
|
||||
- Add support to handle net label back annotation changes.
|
||||
|
||||
**Dependencies:**
|
||||
- [S-expression schematic file format](#sch_sexpr).
|
||||
- [Convert to a single process application](#kiway).
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Intelligent Selection Tool ## {#pcb_selection_tool}
|
||||
**Goal:**
|
||||
|
||||
Make the selection tool easier for the user to determine which object(s) are
|
||||
being selected.
|
||||
|
||||
**Task:**
|
||||
- Determine and define the actual desired behavior.
|
||||
- Improve ambiguous selections when multiple items are under the cursor or in
|
||||
the selection bounding box.
|
||||
|
||||
**Dependencies:**
|
||||
- Tool framework.
|
||||
- Unified geometry library.
|
||||
|
||||
**Status:**
|
||||
- Initial design committed to product branch.
|
||||
|
||||
## Clipboard Support ## {#fp_edit_clipboard}
|
||||
**Goal:**
|
||||
|
||||
Provide clipboard cut and paste for footprints..
|
||||
|
||||
**Task:**
|
||||
- Clipboard cut and paste to and from clipboard of footprints in footprint
|
||||
editor.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Design Rule Check (DRC) Improvements. ## {#drc_improvements}
|
||||
**Goal:**
|
||||
|
||||
Create additional DRC tests for improved error checking.
|
||||
|
||||
**Task:**
|
||||
- Replace geometry code with [unified geometry library](#geometry_lib).
|
||||
- Remove floating point code from clearance calculations to prevent rounding
|
||||
errors.
|
||||
- Add checks for component, silk screen, and mask clearances.
|
||||
- Remove DRC related limitations such as no arc or text on copper layers.
|
||||
- Add option for saving and loading DRC options.
|
||||
|
||||
**Dependencies:**
|
||||
- [Unified geometry library.](#geometry_lib)
|
||||
|
||||
**Progress:**
|
||||
- Planning
|
||||
|
||||
## Gerber File Attributes ## {#gerber_attributes}
|
||||
**Goal:**
|
||||
|
||||
Add file attributes to gerber files for defining layer stacks. See
|
||||
[this](http://www.ucamco.com/files/downloads/file/5/Extending_the_Gerber_Format_with_Attributes.pdf)
|
||||
document and [this](http://www.ucamco.com/files/downloads/file/22/Kick_Starting_a_Revolution_IPC-2581_Meets_Gerber.pdf)
|
||||
document for more information.
|
||||
|
||||
**Task:**
|
||||
- Implement gerber file attributes as an optional setting when plotting gerber
|
||||
files.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Progress:**
|
||||
- Under investigation.
|
||||
|
||||
|
||||
# GerbView: Gerber File Viewer # {#gerbview}
|
||||
|
||||
This section covers the source code for the GerbView gerber file viewer.
|
||||
|
||||
## Graphics Abstraction Layer ## {#gerbview_gal}
|
||||
**Goal:**
|
||||
|
||||
Graphics rendering unification.
|
||||
|
||||
**Task:**
|
||||
- Port graphics rendering layer to GAL.
|
||||
|
||||
**Dependencies:**
|
||||
- None.
|
||||
|
||||
**Status**
|
||||
- No progress.
|
||||
|
||||
# Documentation # {#documentation}
|
||||
This section defines the tasks for both the user and developer documentation.
|
||||
|
||||
## Conversion to Markup/down Format ## {#doc_format}
|
||||
**Goal:**
|
||||
|
||||
Make documentation more VCS friendly and separate document content and
|
||||
formatting for more uniform formatting across all user documentation.
|
||||
|
||||
**Task:**
|
||||
- Convert the documentation to a mark up/down language to reduce the VCS
|
||||
footprint, to be able to actually use the VCS to see what changed, and
|
||||
improve the formatting consistency.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- Started with this document.
|
||||
|
||||
## Grammar Check ## {#doc_grammar}
|
||||
**Goal:**
|
||||
|
||||
Improve user documentation readability and make life easier to for translators.
|
||||
|
||||
**Task:**
|
||||
- Review and revise all of the English documentation so that it is update with
|
||||
the current functionality of the code.
|
||||
- Translate the update documentation into other languages.
|
||||
|
||||
**Dependencies:**
|
||||
- None
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Maintenance ## {#doc_maintenance}
|
||||
**Task:**
|
||||
- Keep screen shots current with the source changes.
|
||||
|
||||
**Dependencies:**
|
||||
- None.
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
## Convert Developer Documentation to Markup/down Format ## {#dev_doc_format}
|
||||
**Goal:**
|
||||
|
||||
Improve developers documentation to make life easier for new developers to get
|
||||
involved with the project.
|
||||
|
||||
**Task:**
|
||||
- Convert platform build instructions from plain text to new format to be
|
||||
merged with the developer documentation.
|
||||
- Convert how to contribute to KiCad instructions from plain text to the new
|
||||
format to merged with the developer documentation.
|
||||
|
||||
**Dependencies:**
|
||||
- None.
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
|
||||
|
||||
# Unit Testing # {#unittest}
|
||||
**Goal:**
|
||||
|
||||
Improve the quality of KiCad and ensure changes do no break existing
|
||||
capabilities.
|
||||
|
||||
**Task:**
|
||||
- Explore the possibility of including a C++ unit test framework in addition
|
||||
to the existing Python framework.
|
||||
- Create robust enough test coverage to determine if code changes break any
|
||||
core functionality.
|
||||
|
||||
**Dependencies:**
|
||||
- Completion of the initial release of this document.
|
||||
|
||||
**Status:**
|
||||
- In progress.
|
||||
|
||||
|
||||
# Circuit Simulation # {#simulation}
|
||||
**Goal:**
|
||||
|
||||
Provide quality circuit simulation capabilities similar to commercial products.
|
||||
|
||||
**Task:**
|
||||
- Evaluate and select simulation library (spice, gnucap, qucs, etc).
|
||||
- Evaluate and select plotting library with wxWidgets support.
|
||||
- Confirm current spice netlist export is up to the task and add missing
|
||||
support for simulations.
|
||||
- Use plotting library to handle simulator output in a consistent manor similar
|
||||
to LTSpice.
|
||||
- Develop a tool that allows fine tuning of components on the fly.
|
||||
- Use plugin for the simulation code to allow support of different simulation
|
||||
libraries.
|
||||
- Create a library of simulation components such as voltage source, current
|
||||
source, current probe, etc.
|
||||
|
||||
**Dependencies:**
|
||||
- [Dynamic library plugin](#plugin_base).
|
||||
|
||||
**Status:**
|
||||
- No progress.
|
||||
@@ -0,0 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
pandoc -f markdown_mmd -t html interactive_router.mmd > interactive_router.html
|
||||
pandoc -f markdown_mmd -t latex interactive_router.mmd > tmp.tex
|
||||
pdflatex interactive_router.tex
|
||||
@@ -0,0 +1,73 @@
|
||||
# Interactive Router #
|
||||
|
||||
The Interactive Router lets you quickly and efficient route your PCBs by shoving off or walking around items on the PCB that collide with the trace you are currently drawing.
|
||||
|
||||
Following modes are supported:
|
||||
|
||||
- **Shove**, attempting to push and shove all items colliding with the currently routed track.
|
||||
- **Walk around**, trying to avoid obstacles by hugging/walking around them.
|
||||
- **Highlight collisions** which highlights all violating objects with a nice, shiny green color and shows violating clearance regions.
|
||||
|
||||
|
||||
## Setting up ##
|
||||
|
||||
Before using the Interactive Router, please set up these two things:
|
||||
- Clearance settings. To set the clearances, open the *Design Rules* dialog and make sure at least the default clearance
|
||||
value looks sensible.
|
||||
|
||||
- Enable OpenGL mode by selecting *View->Switch canvas to OpenGL* menu option or pressing **F11**.
|
||||
|
||||

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

|
||||
|
||||
The options are:
|
||||
|
||||
- **Mode** - select how the router handles DRC violation (shoving, walking around, etc.)
|
||||
- **Shove vias** - when disabled, vias are treated as un-movable objects and hugged instead of shoved.
|
||||
- **Jump over obstacles** - when enabled, the router tries to move colliding traces behind solid obstacles (e.g. pads) instead of "reflecting" back the collision
|
||||
- **Remove redundant tracks** - removes loops while routing (e.g. if the new track ensures same connectivity as an already existing one, the old track is removed). Loop removal works locally (only between the start and end of the currently routed trace).
|
||||
- **Automatic neckdown** - when enabled, the router tries to break out pads/vias in a clean way, avoiding acute angles and jagged breakout traces.
|
||||
- **Smooth dragged segments** - when enabled, the router attempts to merge several jagged segments into a single straight one (dragging mode).
|
||||
- **Allow DRC violations** (*Highlight collisions* mode only) - allows to establish a track even if is violating the DRC rules.
|
||||
- **Optimizer effort** - defines how much time the router shall spend optimizing the routed/shoved traces. More effort means cleaner routing (but slower), less effort means faster routing but somewhat jagged traces.
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 43 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 547 B |
Binary file not shown.
|
After Width: | Height: | Size: 37 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 58 KiB |
@@ -1,11 +0,0 @@
|
||||
So, finally we've got an integrated interactive, push-and-sometimes-shove router, although with a very limited user interface:
|
||||
|
||||
- Edit->Interactive router launches the tool,
|
||||
- while routing: 'V' key places a via,
|
||||
- '+' and '-' keys cycle through available layers,
|
||||
- '/' key switches track posture.
|
||||
|
||||
Via/track dimensions are taken from the netclasses.
|
||||
There are no other options available for the time being - promise to add them soon :)
|
||||
|
||||
Tom
|
||||
@@ -5,8 +5,7 @@ Last Revised: 28-Feb-2010
|
||||
Kicad needs wxWidgets, the multi platform G.U.I.
|
||||
Known problems:
|
||||
wxMSW:
|
||||
*DO NOT* use wxMSW.2.8.1
|
||||
in fact: use wxWidgets >= 2.9.3
|
||||
use *only* wxWidgets >= 3.0
|
||||
|
||||
wxGTK
|
||||
Use wxWidgets 2.8.10 or later
|
||||
@@ -21,15 +20,6 @@ So use a very recent version (>= 2.8.10 (that also solve other bugs)
|
||||
wxWidgets patch:
|
||||
|
||||
|
||||
wxMSW, version 2.8.x
|
||||
Some zoom values smaller than 3 to 5 create artifacts on screen, mainly values < 1.
|
||||
(corresponding to draw scale factor > 1 )
|
||||
|
||||
See http://trac.wxwidgets.org/ticket/9554 (and 11669).
|
||||
|
||||
This is fixed in version 2.9.3
|
||||
|
||||
|
||||
wxWidgets 2.9.1 (all platforms)
|
||||
Has a problem when using the built in string to double conversion:
|
||||
In countries using a comm instead of a point as floating number separator
|
||||
@@ -41,7 +31,7 @@ Use a version >= 2.9.3
|
||||
|
||||
|
||||
*************************************************************************************
|
||||
wxGTK version: All
|
||||
wxGTK version: All before wxWidgets 3.0
|
||||
*************************************************************************************
|
||||
Patch for printing wide traces that were shown with missing rounded end caps.
|
||||
Without this patch, printing boards and schematics under Linux, and perhaps OSX
|
||||
@@ -57,3 +47,10 @@ Add after this line:
|
||||
PsPrint( "1 setlinecap\n" );
|
||||
PsPrint("%%EndSetup\n");
|
||||
|
||||
|
||||
Known bug on Windows:
|
||||
Postscript printers print tracks like tin line.
|
||||
It happens only for PS drivers, and PDF printer.
|
||||
Other drivers (PCL for instance) work fine,
|
||||
so it is unlikely a bug inside Kicad/wxWidgets
|
||||
|
||||
|
||||
@@ -338,7 +338,7 @@ TYPEDEF_HIDES_STRUCT = NO
|
||||
# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
|
||||
# corresponding to a cache size of 2^16 = 65536 symbols.
|
||||
|
||||
SYMBOL_CACHE_SIZE = 0
|
||||
SYMBOL_CACHE_SIZE = 4
|
||||
|
||||
# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
|
||||
# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
|
||||
@@ -349,7 +349,7 @@ SYMBOL_CACHE_SIZE = 0
|
||||
# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
|
||||
# corresponding to a cache size of 2^16 = 65536 symbols.
|
||||
|
||||
LOOKUP_CACHE_SIZE = 0
|
||||
LOOKUP_CACHE_SIZE = 6
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
@@ -661,7 +661,8 @@ WARN_LOGFILE =
|
||||
# directories like "/usr/src/myproject". Separate the files or directories
|
||||
# with spaces.
|
||||
|
||||
INPUT = kicad \
|
||||
INPUT = Documentation/development/road-map.md \
|
||||
kicad \
|
||||
pcbnew \
|
||||
cvpcb \
|
||||
eeschema \
|
||||
|
||||
@@ -170,6 +170,9 @@ build directory.
|
||||
Important parameters to cmake
|
||||
-----------------------------
|
||||
|
||||
See Documentation/compiling/build-config.txt for a list of all CMake options
|
||||
available when compiling KiCad.
|
||||
|
||||
-DCMAKE_BUILD_TYPE=<buildtype>
|
||||
<buildtype> may current one of "Debug" and "Release".
|
||||
|
||||
|
||||
@@ -60,9 +60,22 @@ PCBNew
|
||||
*) Paste (module ...) from clipboard into module editor.
|
||||
|
||||
|
||||
|
||||
|
||||
Dick's Final TODO List:
|
||||
======================
|
||||
*) Get licensing cleaned up.
|
||||
*) DLL-ization of pcbnew & eeschema
|
||||
http://www.eevblog.com/forum/open-source-kicad-geda/seriously-irritated-with-the-library-editor!/
|
||||
https://blueprints.launchpad.net/kicad/+spec/modular-kicad
|
||||
*) Get licensing cleaned up.
|
||||
|
||||
*) DLL-ization of pcbnew & eeschema
|
||||
http://www.eevblog.com/forum/open-source-kicad-geda/seriously-irritated-with-the-library-editor!/
|
||||
https://blueprints.launchpad.net/kicad/+spec/modular-kicad
|
||||
|
||||
Issues as a result of minimal testing:
|
||||
* If eeschema launched from C++ project manager and does not find all libraries,
|
||||
then the dialog showing the names of missing libraries is shown twice.
|
||||
|
||||
* Clear all/some? retained strings on project change.
|
||||
* Clear the FP_LIB_TABLE when the last KIWAY_PLAYER using it is closed.
|
||||
|
||||
|
||||
Fix export gencad
|
||||
@@ -1,54 +1,68 @@
|
||||
|
||||
include_directories(BEFORE ${INC_BEFORE})
|
||||
include_directories( BEFORE ${INC_BEFORE} )
|
||||
include_directories(
|
||||
../potrace
|
||||
../polygon/kbool/include
|
||||
../common
|
||||
${INC_AFTER}
|
||||
)
|
||||
|
||||
set(BITMAP2COMPONENT_SRCS
|
||||
set( BITMAP2COMPONENT_SRCS
|
||||
../common/single_top.cpp
|
||||
bitmap2component.cpp
|
||||
bitmap2cmp_gui_base
|
||||
bitmap2cmp_gui
|
||||
)
|
||||
|
||||
if(WIN32)
|
||||
if(MINGW)
|
||||
# BITMAP2COMPONENT_RESOURCES variable is set by the macro.
|
||||
mingw_resource_compiler(bitmap2component)
|
||||
else(MINGW)
|
||||
set(BITMAP2COMPONENT_RESOURCES bitmap2component.rc)
|
||||
endif(MINGW)
|
||||
endif(WIN32)
|
||||
set_source_files_properties( ../common/single_top.cpp PROPERTIES
|
||||
COMPILE_DEFINITIONS "TOP_FRAME=FRAME_BM2CMP"
|
||||
)
|
||||
set_source_files_properties( bitmap2cmp_gui.cpp PROPERTIES
|
||||
COMPILE_DEFINITIONS "COMPILING_DLL"
|
||||
)
|
||||
|
||||
add_executable( bitmap2component WIN32 MACOSX_BUNDLE
|
||||
${BITMAP2COMPONENT_SRCS}
|
||||
${BITMAP2COMPONENT_RESOURCES}
|
||||
)
|
||||
|
||||
target_link_libraries( bitmap2component
|
||||
common
|
||||
polygon
|
||||
bitmaps
|
||||
${wxWidgets_LIBRARIES}
|
||||
potrace
|
||||
)
|
||||
|
||||
install( TARGETS bitmap2component
|
||||
DESTINATION ${KICAD_BIN}
|
||||
COMPONENT binary
|
||||
)
|
||||
|
||||
|
||||
if(APPLE)
|
||||
set(BITMAP2COMPONENT_RESOURCES bitmap2component.icns)
|
||||
set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/bitmap2component.icns"
|
||||
PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
|
||||
set(MACOSX_BUNDLE_ICON_FILE bitmap2component.icns)
|
||||
set(MACOSX_BUNDLE_GUI_IDENTIFIER org.kicad-eda.bitmap2component)
|
||||
endif(APPLE)
|
||||
if( false ) # linker map with cross reference
|
||||
set_target_properties( bitmap2component PROPERTIES
|
||||
LINK_FLAGS "${TO_LINKER},-cref ${TO_LINKER},-Map=bitmap2component.map"
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
add_executable(bitmap2component WIN32 MACOSX_BUNDLE
|
||||
${BITMAP2COMPONENT_SRCS}
|
||||
${BITMAP2COMPONENT_RESOURCES})
|
||||
if( MINGW )
|
||||
# BITMAP2COMPONENT_RESOURCES variable is set by the macro.
|
||||
mingw_resource_compiler( bitmap2component )
|
||||
else()
|
||||
set( BITMAP2COMPONENT_RESOURCES bitmap2component.rc )
|
||||
endif()
|
||||
|
||||
|
||||
if(APPLE)
|
||||
set_target_properties(bitmap2component PROPERTIES MACOSX_BUNDLE_INFO_PLIST
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/Info.plist)
|
||||
endif(APPLE)
|
||||
|
||||
target_link_libraries( bitmap2component common polygon bitmaps
|
||||
${wxWidgets_LIBRARIES}
|
||||
potrace
|
||||
)
|
||||
|
||||
install(TARGETS bitmap2component
|
||||
DESTINATION ${KICAD_BIN}
|
||||
COMPONENT binary)
|
||||
if( APPLE )
|
||||
set( BITMAP2COMPONENT_RESOURCES bitmap2component.icns )
|
||||
set_source_files_properties( "${CMAKE_CURRENT_SOURCE_DIR}/bitmap2component.icns" PROPERTIES
|
||||
MACOSX_PACKAGE_LOCATION Resources
|
||||
)
|
||||
set( MACOSX_BUNDLE_ICON_FILE bitmap2component.icns )
|
||||
set( MACOSX_BUNDLE_GUI_IDENTIFIER org.kicad-eda.bitmap2component )
|
||||
|
||||
set_target_properties( bitmap2component PROPERTIES
|
||||
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
|
||||
)
|
||||
endif()
|
||||
|
||||
+297
-137
@@ -21,16 +21,15 @@
|
||||
* or you may write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include <fctsys.h>
|
||||
#include <appl_wxstruct.h>
|
||||
#include <macros.h>
|
||||
|
||||
#include <pgm_base.h>
|
||||
#include <wxstruct.h>
|
||||
#include <confirm.h>
|
||||
#include <gestfich.h>
|
||||
|
||||
#include <wx/wx.h>
|
||||
#include <wx/config.h>
|
||||
#include <wx/filename.h>
|
||||
|
||||
#include <bitmap2cmp_gui_base.h>
|
||||
|
||||
#include <potracelib.h>
|
||||
@@ -39,47 +38,57 @@
|
||||
#include <colors_selection.h>
|
||||
#include <build_version.h>
|
||||
#include <menus_helpers.h>
|
||||
#include <kiway.h>
|
||||
#include <kiface_i.h>
|
||||
|
||||
#define KEYWORD_FRAME_POSX wxT( "Bmconverter_Pos_x" )
|
||||
#define KEYWORD_FRAME_POSY wxT( "Bmconverter_Pos_y" )
|
||||
#define KEYWORD_FRAME_SIZEX wxT( "Bmconverter_Size_x" )
|
||||
#define KEYWORD_FRAME_SIZEY wxT( "Bmconverter_Size_y" )
|
||||
#define KEYWORD_LAST_INPUT_FILE wxT( "Last_input" )
|
||||
#define KEYWORD_LAST_OUTPUT_FILE wxT( "Last_output" )
|
||||
#define KEYWORD_LAST_FORMAT wxT( "Last_format" )
|
||||
#define KEYWORD_BINARY_THRESHOLD wxT( "Threshold" )
|
||||
#define KEYWORD_BW_NEGATIVE wxT( "Negative_choice" )
|
||||
#define KEYWORD_FRAME_POSX wxT( "Bmconverter_Pos_x" )
|
||||
#define KEYWORD_FRAME_POSY wxT( "Bmconverter_Pos_y" )
|
||||
#define KEYWORD_FRAME_SIZEX wxT( "Bmconverter_Size_x" )
|
||||
#define KEYWORD_FRAME_SIZEY wxT( "Bmconverter_Size_y" )
|
||||
#define KEYWORD_LAST_INPUT_FILE wxT( "Last_input" )
|
||||
#define KEYWORD_LAST_OUTPUT_FILE wxT( "Last_output" )
|
||||
#define KEYWORD_LAST_FORMAT wxT( "Last_format" )
|
||||
#define KEYWORD_BINARY_THRESHOLD wxT( "Threshold" )
|
||||
#define KEYWORD_BW_NEGATIVE wxT( "Negative_choice" )
|
||||
|
||||
extern int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, int aFormat );
|
||||
#define DEFAULT_DPI 300 // Default resolution in Bit per inches
|
||||
|
||||
/* Class BM2CMP_FRAME_BASE
|
||||
This is the main frame for this application
|
||||
*/
|
||||
extern int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile,
|
||||
int aFormat, int aDpi_X, int aDpi_Y );
|
||||
|
||||
/**
|
||||
* Class BM2CMP_FRAME_BASE
|
||||
* is the main frame for this application
|
||||
*/
|
||||
class BM2CMP_FRAME : public BM2CMP_FRAME_BASE
|
||||
{
|
||||
private:
|
||||
wxImage m_Pict_Image;
|
||||
wxBitmap m_Pict_Bitmap;
|
||||
wxImage m_Greyscale_Image;
|
||||
wxBitmap m_Greyscale_Bitmap;
|
||||
wxImage m_NB_Image;
|
||||
wxBitmap m_BN_Bitmap;
|
||||
wxString m_BitmapFileName;
|
||||
wxString m_ConvertedFileName;
|
||||
wxSize m_FrameSize;
|
||||
wxPoint m_FramePos;
|
||||
wxConfig * m_Config;
|
||||
wxImage m_Pict_Image;
|
||||
wxBitmap m_Pict_Bitmap;
|
||||
wxImage m_Greyscale_Image;
|
||||
wxBitmap m_Greyscale_Bitmap;
|
||||
wxImage m_NB_Image;
|
||||
wxBitmap m_BN_Bitmap;
|
||||
wxSize m_imageDPI; // The initial image resolution. When unknown,
|
||||
// set to DEFAULT_DPI x DEFAULT_DPI per Inch
|
||||
wxString m_BitmapFileName;
|
||||
wxString m_ConvertedFileName;
|
||||
wxSize m_frameSize;
|
||||
wxPoint m_framePos;
|
||||
wxConfig* m_config;
|
||||
|
||||
public:
|
||||
BM2CMP_FRAME();
|
||||
BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent );
|
||||
~BM2CMP_FRAME();
|
||||
|
||||
// overload KIWAY_PLAYER virtual
|
||||
bool OpenProjectFiles( const std::vector<wxString>& aFilenames, int aCtl=0 );
|
||||
|
||||
private:
|
||||
|
||||
// Event handlers
|
||||
void OnPaint( wxPaintEvent& event );
|
||||
void OnLoadFile( wxCommandEvent& event );
|
||||
bool LoadFile( wxString& aFullFileName );
|
||||
void OnExport( wxCommandEvent& event );
|
||||
|
||||
/**
|
||||
@@ -109,30 +118,51 @@ private:
|
||||
void Binarize( double aThreshold ); // aThreshold = 0.0 (black level) to 1.0 (white level)
|
||||
void OnOptionsSelection( wxCommandEvent& event );
|
||||
void OnThresholdChange( wxScrollEvent& event );
|
||||
void OnResolutionChange( wxCommandEvent& event );
|
||||
|
||||
// called when texts controls which handle the image resolution
|
||||
// lose the focus, to ensure the rigyht vaules are displayed
|
||||
// because the m_imageDPI are clipped to acceptable values, and
|
||||
// the text displayed could be differ duringa text edition
|
||||
// We are using ChangeValue here to avoid generating a wxEVT_TEXT event.
|
||||
void UpdateDPITextValueX( wxMouseEvent& event )
|
||||
{
|
||||
m_DPIValueX->ChangeValue( wxString::Format( wxT( "%d" ), m_imageDPI.x ) );
|
||||
}
|
||||
void UpdateDPITextValueY( wxMouseEvent& event )
|
||||
{
|
||||
m_DPIValueY->ChangeValue( wxString::Format( wxT( "%d" ), m_imageDPI.y ) );
|
||||
}
|
||||
|
||||
void NegateGreyscaleImage( );
|
||||
void ExportFile( FILE* aOutfile, int aFormat );
|
||||
void updateImageInfo();
|
||||
};
|
||||
|
||||
|
||||
BM2CMP_FRAME::BM2CMP_FRAME() : BM2CMP_FRAME_BASE( NULL )
|
||||
BM2CMP_FRAME::BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
|
||||
BM2CMP_FRAME_BASE( aParent )
|
||||
{
|
||||
SetKiway( this, aKiway );
|
||||
|
||||
int tmp;
|
||||
m_Config = new wxConfig();
|
||||
m_Config->Read( KEYWORD_FRAME_POSX, & m_FramePos.x, -1 );
|
||||
m_Config->Read( KEYWORD_FRAME_POSY, & m_FramePos.y, -1 );
|
||||
m_Config->Read( KEYWORD_FRAME_SIZEX, & m_FrameSize.x, -1 );
|
||||
m_Config->Read( KEYWORD_FRAME_SIZEY, & m_FrameSize.y, -1 );
|
||||
m_Config->Read( KEYWORD_LAST_INPUT_FILE, &m_BitmapFileName );
|
||||
m_Config->Read( KEYWORD_LAST_OUTPUT_FILE, &m_ConvertedFileName );
|
||||
if( m_Config->Read( KEYWORD_BINARY_THRESHOLD, &tmp ) )
|
||||
m_config = new wxConfig();
|
||||
m_config->Read( KEYWORD_FRAME_POSX, & m_framePos.x, -1 );
|
||||
m_config->Read( KEYWORD_FRAME_POSY, & m_framePos.y, -1 );
|
||||
m_config->Read( KEYWORD_FRAME_SIZEX, & m_frameSize.x, -1 );
|
||||
m_config->Read( KEYWORD_FRAME_SIZEY, & m_frameSize.y, -1 );
|
||||
m_config->Read( KEYWORD_LAST_INPUT_FILE, &m_BitmapFileName );
|
||||
m_config->Read( KEYWORD_LAST_OUTPUT_FILE, &m_ConvertedFileName );
|
||||
|
||||
if( m_config->Read( KEYWORD_BINARY_THRESHOLD, &tmp ) )
|
||||
m_sliderThreshold->SetValue( tmp );
|
||||
if( m_Config->Read( KEYWORD_BW_NEGATIVE, &tmp ) )
|
||||
|
||||
if( m_config->Read( KEYWORD_BW_NEGATIVE, &tmp ) )
|
||||
m_rbOptions->SetSelection( tmp ? 1 : 0 );
|
||||
|
||||
m_Config->Read( KEYWORD_LAST_FORMAT, &tmp );
|
||||
m_config->Read( KEYWORD_LAST_FORMAT, &tmp );
|
||||
m_radioBoxFormat->SetSelection( tmp );
|
||||
|
||||
|
||||
// Give an icon
|
||||
wxIcon icon;
|
||||
icon.CopyFromBitmap( KiBitmap( icon_bitmap2component_xpm ) );
|
||||
@@ -140,34 +170,36 @@ BM2CMP_FRAME::BM2CMP_FRAME() : BM2CMP_FRAME_BASE( NULL )
|
||||
|
||||
GetSizer()->SetSizeHints( this );
|
||||
|
||||
SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y );
|
||||
SetSize( m_framePos.x, m_framePos.y, m_frameSize.x, m_frameSize.y );
|
||||
|
||||
m_buttonExport->Enable( false );
|
||||
|
||||
if ( m_FramePos == wxDefaultPosition )
|
||||
m_imageDPI.x = m_imageDPI.y = DEFAULT_DPI; // Default resolution in Bit per inches
|
||||
|
||||
if ( m_framePos == wxDefaultPosition )
|
||||
Centre();
|
||||
}
|
||||
|
||||
|
||||
BM2CMP_FRAME::~BM2CMP_FRAME()
|
||||
{
|
||||
if( ( m_Config == NULL ) || IsIconized() )
|
||||
if( !m_config || IsIconized() )
|
||||
return;
|
||||
|
||||
m_FrameSize = GetSize();
|
||||
m_FramePos = GetPosition();
|
||||
m_frameSize = GetSize();
|
||||
m_framePos = GetPosition();
|
||||
|
||||
m_Config->Write( KEYWORD_FRAME_POSX, (long) m_FramePos.x );
|
||||
m_Config->Write( KEYWORD_FRAME_POSY, (long) m_FramePos.y );
|
||||
m_Config->Write( KEYWORD_FRAME_SIZEX, (long) m_FrameSize.x );
|
||||
m_Config->Write( KEYWORD_FRAME_SIZEY, (long) m_FrameSize.y );
|
||||
m_Config->Write( KEYWORD_LAST_INPUT_FILE, m_BitmapFileName );
|
||||
m_Config->Write( KEYWORD_LAST_OUTPUT_FILE, m_ConvertedFileName );
|
||||
m_Config->Write( KEYWORD_BINARY_THRESHOLD, m_sliderThreshold->GetValue() );
|
||||
m_Config->Write( KEYWORD_BW_NEGATIVE, m_rbOptions->GetSelection() );
|
||||
m_Config->Write( KEYWORD_LAST_FORMAT, m_radioBoxFormat->GetSelection() );
|
||||
m_config->Write( KEYWORD_FRAME_POSX, (long) m_framePos.x );
|
||||
m_config->Write( KEYWORD_FRAME_POSY, (long) m_framePos.y );
|
||||
m_config->Write( KEYWORD_FRAME_SIZEX, (long) m_frameSize.x );
|
||||
m_config->Write( KEYWORD_FRAME_SIZEY, (long) m_frameSize.y );
|
||||
m_config->Write( KEYWORD_LAST_INPUT_FILE, m_BitmapFileName );
|
||||
m_config->Write( KEYWORD_LAST_OUTPUT_FILE, m_ConvertedFileName );
|
||||
m_config->Write( KEYWORD_BINARY_THRESHOLD, m_sliderThreshold->GetValue() );
|
||||
m_config->Write( KEYWORD_BW_NEGATIVE, m_rbOptions->GetSelection() );
|
||||
m_config->Write( KEYWORD_LAST_FORMAT, m_radioBoxFormat->GetSelection() );
|
||||
|
||||
delete m_Config;
|
||||
delete m_config;
|
||||
|
||||
/* This needed for OSX: avoids further OnDraw processing after this
|
||||
* destructor and before the native window is destroyed
|
||||
@@ -207,23 +239,24 @@ void BM2CMP_FRAME::OnPaint( wxPaintEvent& event )
|
||||
*/
|
||||
void BM2CMP_FRAME::OnLoadFile( wxCommandEvent& event )
|
||||
{
|
||||
wxFileName fn(m_BitmapFileName);
|
||||
wxString path = fn.GetPath();
|
||||
wxFileName fn( m_BitmapFileName );
|
||||
wxString path = fn.GetPath();
|
||||
|
||||
if( path.IsEmpty() || !wxDirExists(path) )
|
||||
path = wxGetCwd();
|
||||
|
||||
wxFileDialog FileDlg( this, _( "Choose Image" ), path, wxEmptyString,
|
||||
wxFileDialog fileDlg( this, _( "Choose Image" ), path, wxEmptyString,
|
||||
_( "Image Files " ) + wxImage::GetImageExtWildcard(),
|
||||
wxFD_OPEN );
|
||||
int diag = FileDlg.ShowModal();
|
||||
|
||||
int diag = fileDlg.ShowModal();
|
||||
|
||||
if( diag != wxID_OK )
|
||||
return;
|
||||
|
||||
wxString fullFilename = FileDlg.GetPath();
|
||||
wxString fullFilename = fileDlg.GetPath();
|
||||
|
||||
if( ! LoadFile( fullFilename ) )
|
||||
if( !OpenProjectFiles( std::vector<wxString>( 1, fullFilename ) ) )
|
||||
return;
|
||||
|
||||
m_buttonExport->Enable( true );
|
||||
@@ -232,13 +265,22 @@ void BM2CMP_FRAME::OnLoadFile( wxCommandEvent& event )
|
||||
}
|
||||
|
||||
|
||||
bool BM2CMP_FRAME::LoadFile( wxString& aFullFileName )
|
||||
bool BM2CMP_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, int aCtl )
|
||||
{
|
||||
m_BitmapFileName = aFullFileName;
|
||||
// Prj().MaybeLoadProjectSettings();
|
||||
|
||||
m_BitmapFileName = aFileSet[0];
|
||||
|
||||
if( !m_Pict_Image.LoadFile( m_BitmapFileName ) )
|
||||
{
|
||||
wxMessageBox( _( "Couldn't load image from <%s>" ), m_BitmapFileName.c_str() );
|
||||
/* LoadFile has its own UI, no need for further failure notification here
|
||||
wxString msg = wxString::Format(
|
||||
_( "Could not load image '%s'" ),
|
||||
GetChars( aFilename )
|
||||
);
|
||||
|
||||
wxMessageBox( msg );
|
||||
*/
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -246,15 +288,32 @@ bool BM2CMP_FRAME::LoadFile( wxString& aFullFileName )
|
||||
|
||||
int h = m_Pict_Bitmap.GetHeight();
|
||||
int w = m_Pict_Bitmap.GetWidth();
|
||||
int nb = m_Pict_Bitmap.GetDepth();
|
||||
|
||||
wxString msg;
|
||||
msg.Printf( wxT( "%d" ), w );
|
||||
m_SizeXValue->SetLabel(msg);
|
||||
msg.Printf( wxT( "%d" ), h );
|
||||
m_SizeYValue->SetLabel(msg);
|
||||
msg.Printf( wxT( "%d" ), nb );
|
||||
m_BPPValue->SetLabel(msg);
|
||||
// Determine image resolution in DPI (does not existing in all formats).
|
||||
// the resolution can be given in bit per inches or bit per cm in file
|
||||
m_imageDPI.x = m_Pict_Image.GetOptionInt( wxIMAGE_OPTION_RESOLUTIONX );
|
||||
m_imageDPI.y = m_Pict_Image.GetOptionInt( wxIMAGE_OPTION_RESOLUTIONY );
|
||||
|
||||
if( m_imageDPI.x > 1 && m_imageDPI.y > 1 )
|
||||
{
|
||||
if( m_Pict_Image.GetOptionInt( wxIMAGE_OPTION_RESOLUTIONUNIT ) == wxIMAGE_RESOLUTION_CM )
|
||||
{
|
||||
// When the initial resolution is given in bits per cm,
|
||||
// experience shows adding 1.27 to the resolution converted in dpi
|
||||
// before convert to int value reduce the conversion error
|
||||
// but it is not perfect
|
||||
m_imageDPI.x = m_imageDPI.x * 2.54 + 1.27;
|
||||
m_imageDPI.y = m_imageDPI.y * 2.54 + 1.27;
|
||||
}
|
||||
}
|
||||
else // fallback to the default value
|
||||
m_imageDPI.x = m_imageDPI.y = DEFAULT_DPI;
|
||||
|
||||
// Display image info:
|
||||
// We are using ChangeValue here to avoid generating a wxEVT_TEXT event.
|
||||
m_DPIValueX->ChangeValue( wxString::Format( wxT( "%d" ), m_imageDPI.x ) );
|
||||
m_DPIValueY->ChangeValue( wxString::Format( wxT( "%d" ), m_imageDPI.y ) );
|
||||
updateImageInfo();
|
||||
|
||||
m_InitialPicturePanel->SetVirtualSize( w, h );
|
||||
m_GreyscalePicturePanel->SetVirtualSize( w, h );
|
||||
@@ -262,16 +321,55 @@ bool BM2CMP_FRAME::LoadFile( wxString& aFullFileName )
|
||||
|
||||
m_Greyscale_Image.Destroy();
|
||||
m_Greyscale_Image = m_Pict_Image.ConvertToGreyscale( );
|
||||
|
||||
if( m_rbOptions->GetSelection() > 0 )
|
||||
NegateGreyscaleImage( );
|
||||
|
||||
m_Greyscale_Bitmap = wxBitmap( m_Greyscale_Image );
|
||||
|
||||
m_NB_Image = m_Greyscale_Image;
|
||||
Binarize( (double)m_sliderThreshold->GetValue()/m_sliderThreshold->GetMax() );
|
||||
Binarize( (double) m_sliderThreshold->GetValue()/m_sliderThreshold->GetMax() );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void BM2CMP_FRAME::updateImageInfo()
|
||||
{
|
||||
// Note: the image resolution text controls are not modified
|
||||
// here, to avoid a race between text change when entered by user and
|
||||
// a text change if it is modifed here.
|
||||
int h = m_Pict_Bitmap.GetHeight();
|
||||
int w = m_Pict_Bitmap.GetWidth();
|
||||
int nb = m_Pict_Bitmap.GetDepth();
|
||||
|
||||
m_SizeXValue->SetLabel( wxString::Format( wxT( "%d" ), w ) );
|
||||
m_SizeYValue->SetLabel( wxString::Format( wxT( "%d" ), h ) );
|
||||
m_BPPValue->SetLabel( wxString::Format( wxT( "%d" ), nb ) );
|
||||
|
||||
m_SizeXValue_mm->SetLabel( wxString::Format( wxT( "%.1f" ),
|
||||
(double) w / m_imageDPI.x * 25.4 ) );
|
||||
m_SizeYValue_mm->SetLabel( wxString::Format( wxT( "%.1f" ),
|
||||
(double) h / m_imageDPI.y * 25.4 ) );
|
||||
}
|
||||
|
||||
void BM2CMP_FRAME::OnResolutionChange( wxCommandEvent& event )
|
||||
{
|
||||
long tmp;
|
||||
|
||||
if( m_DPIValueX->GetValue().ToLong( &tmp ) )
|
||||
m_imageDPI.x = tmp;
|
||||
|
||||
if( m_DPIValueY->GetValue().ToLong( &tmp ) )
|
||||
m_imageDPI.y = tmp;
|
||||
|
||||
if( m_imageDPI.x < 32 )
|
||||
m_imageDPI.x = 32;
|
||||
|
||||
if( m_imageDPI.y < 32 )
|
||||
m_imageDPI.y = 32;
|
||||
|
||||
updateImageInfo();
|
||||
}
|
||||
|
||||
void BM2CMP_FRAME::Binarize( double aThreshold )
|
||||
{
|
||||
@@ -297,11 +395,12 @@ void BM2CMP_FRAME::Binarize( double aThreshold )
|
||||
m_BN_Bitmap = wxBitmap( m_NB_Image );
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::NegateGreyscaleImage( )
|
||||
{
|
||||
unsigned char pix;
|
||||
int h = m_Greyscale_Image.GetHeight();
|
||||
int w = m_Greyscale_Image.GetWidth();
|
||||
int h = m_Greyscale_Image.GetHeight();
|
||||
int w = m_Greyscale_Image.GetWidth();
|
||||
|
||||
for( int y = 0; y < h; y++ )
|
||||
for( int x = 0; x < w; x++ )
|
||||
@@ -321,58 +420,61 @@ void BM2CMP_FRAME::OnOptionsSelection( wxCommandEvent& event )
|
||||
Refresh();
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::OnThresholdChange( wxScrollEvent& event )
|
||||
{
|
||||
Binarize( (double)m_sliderThreshold->GetValue()/m_sliderThreshold->GetMax() );
|
||||
Refresh();
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::OnExport( wxCommandEvent& event )
|
||||
{
|
||||
int sel = m_radioBoxFormat->GetSelection();
|
||||
|
||||
switch( sel )
|
||||
{
|
||||
case 0:
|
||||
OnExportEeschema();
|
||||
break;
|
||||
case 0:
|
||||
OnExportEeschema();
|
||||
break;
|
||||
|
||||
case 1:
|
||||
OnExportPcbnew( true );
|
||||
break;
|
||||
case 1:
|
||||
OnExportPcbnew( true );
|
||||
break;
|
||||
|
||||
case 2:
|
||||
OnExportPcbnew( false );
|
||||
break;
|
||||
case 2:
|
||||
OnExportPcbnew( false );
|
||||
break;
|
||||
|
||||
case 3:
|
||||
OnExportPostScript();
|
||||
break;
|
||||
case 3:
|
||||
OnExportPostScript();
|
||||
break;
|
||||
|
||||
case 4:
|
||||
OnExportLogo();
|
||||
break;
|
||||
case 4:
|
||||
OnExportLogo();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::OnExportLogo()
|
||||
{
|
||||
wxFileName fn(m_ConvertedFileName);
|
||||
wxString path = fn.GetPath();
|
||||
wxFileName fn( m_ConvertedFileName );
|
||||
wxString path = fn.GetPath();
|
||||
|
||||
if( path.IsEmpty() || !wxDirExists(path) )
|
||||
path = ::wxGetCwd();
|
||||
|
||||
wxString msg = _( "Logo file (*.kicad_wks)|*.kicad_wks" );
|
||||
wxFileDialog FileDlg( this, _( "Create a logo file" ), path, wxEmptyString,
|
||||
wxFileDialog fileDlg( this, _( "Create a logo file" ), path, wxEmptyString,
|
||||
msg,
|
||||
wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
|
||||
int diag = FileDlg.ShowModal();
|
||||
int diag = fileDlg.ShowModal();
|
||||
|
||||
if( diag != wxID_OK )
|
||||
return;
|
||||
|
||||
m_ConvertedFileName = FileDlg.GetPath();
|
||||
m_ConvertedFileName = fileDlg.GetPath();
|
||||
|
||||
FILE* outfile;
|
||||
outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) );
|
||||
@@ -389,24 +491,26 @@ void BM2CMP_FRAME::OnExportLogo()
|
||||
fclose( outfile );
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::OnExportPostScript()
|
||||
{
|
||||
wxFileName fn(m_ConvertedFileName);
|
||||
wxString path = fn.GetPath();
|
||||
wxFileName fn( m_ConvertedFileName );
|
||||
wxString path = fn.GetPath();
|
||||
|
||||
if( path.IsEmpty() || !wxDirExists(path) )
|
||||
if( path.IsEmpty() || !wxDirExists( path ) )
|
||||
path = ::wxGetCwd();
|
||||
|
||||
wxString msg = _( "Postscript file (*.ps)|*.ps" );
|
||||
wxFileDialog FileDlg( this, _( "Create a Postscript file" ), path, wxEmptyString,
|
||||
wxFileDialog fileDlg( this, _( "Create a Postscript file" ), path, wxEmptyString,
|
||||
msg,
|
||||
wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
|
||||
int diag = FileDlg.ShowModal();
|
||||
|
||||
int diag = fileDlg.ShowModal();
|
||||
|
||||
if( diag != wxID_OK )
|
||||
return;
|
||||
|
||||
m_ConvertedFileName = FileDlg.GetPath();
|
||||
m_ConvertedFileName = fileDlg.GetPath();
|
||||
|
||||
FILE* outfile;
|
||||
outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) );
|
||||
@@ -423,27 +527,29 @@ void BM2CMP_FRAME::OnExportPostScript()
|
||||
fclose( outfile );
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::OnExportEeschema()
|
||||
{
|
||||
wxFileName fn(m_ConvertedFileName);
|
||||
wxString path = fn.GetPath();
|
||||
wxFileName fn( m_ConvertedFileName );
|
||||
wxString path = fn.GetPath();
|
||||
|
||||
if( path.IsEmpty() || !wxDirExists(path) )
|
||||
path = ::wxGetCwd();
|
||||
|
||||
wxString msg = _( "Schematic lib file (*.lib)|*.lib" );
|
||||
wxFileDialog FileDlg( this, _( "Create a lib file for Eeschema" ), path, wxEmptyString,
|
||||
|
||||
wxFileDialog fileDlg( this, _( "Create a lib file for Eeschema" ), path, wxEmptyString,
|
||||
msg,
|
||||
wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
|
||||
int diag = FileDlg.ShowModal();
|
||||
|
||||
int diag = fileDlg.ShowModal();
|
||||
|
||||
if( diag != wxID_OK )
|
||||
return;
|
||||
|
||||
m_ConvertedFileName = FileDlg.GetPath();
|
||||
m_ConvertedFileName = fileDlg.GetPath();
|
||||
|
||||
FILE* outfile;
|
||||
outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) );
|
||||
FILE* outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) );
|
||||
|
||||
if( outfile == NULL )
|
||||
{
|
||||
@@ -460,29 +566,29 @@ void BM2CMP_FRAME::OnExportEeschema()
|
||||
|
||||
void BM2CMP_FRAME::OnExportPcbnew( bool aLegacyFormat )
|
||||
{
|
||||
wxFileName fn(m_ConvertedFileName);
|
||||
wxString path = fn.GetPath();
|
||||
wxFileName fn( m_ConvertedFileName );
|
||||
wxString path = fn.GetPath();
|
||||
|
||||
if( path.IsEmpty() || !wxDirExists(path) )
|
||||
if( path.IsEmpty() || !wxDirExists( path ) )
|
||||
path = ::wxGetCwd();
|
||||
|
||||
wxString msg = aLegacyFormat ?
|
||||
_( "Footprint file (*.emp)|*.emp" ) :
|
||||
_( "Footprint file (*.kicad_mod)|*.kicad_mod" );
|
||||
wxFileDialog FileDlg( this, _( "Create a footprint file for PcbNew" ),
|
||||
|
||||
wxFileDialog fileDlg( this, _( "Create a footprint file for PcbNew" ),
|
||||
path, wxEmptyString,
|
||||
msg,
|
||||
wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
|
||||
int diag = FileDlg.ShowModal();
|
||||
|
||||
int diag = fileDlg.ShowModal();
|
||||
|
||||
if( diag != wxID_OK )
|
||||
return;
|
||||
|
||||
m_ConvertedFileName = FileDlg.GetPath();
|
||||
m_ConvertedFileName = fileDlg.GetPath();
|
||||
|
||||
|
||||
FILE* outfile;
|
||||
outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) );
|
||||
FILE* outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) );
|
||||
|
||||
if( outfile == NULL )
|
||||
{
|
||||
@@ -496,6 +602,7 @@ void BM2CMP_FRAME::OnExportPcbnew( bool aLegacyFormat )
|
||||
fclose( outfile );
|
||||
}
|
||||
|
||||
|
||||
void BM2CMP_FRAME::ExportFile( FILE* aOutfile, int aFormat )
|
||||
{
|
||||
// Create a potrace bitmap
|
||||
@@ -514,40 +621,93 @@ void BM2CMP_FRAME::ExportFile( FILE* aOutfile, int aFormat )
|
||||
/* fill the bitmap with data */
|
||||
for( int y = 0; y < h; y++ )
|
||||
{
|
||||
for( int x = 0; x<w; x++ )
|
||||
for( int x = 0; x < w; x++ )
|
||||
{
|
||||
unsigned char pix = m_NB_Image.GetGreen( x, y );
|
||||
BM_PUT( potrace_bitmap, x, y, pix ? 1 : 0 );
|
||||
}
|
||||
}
|
||||
|
||||
bitmap2component( potrace_bitmap, aOutfile, aFormat );
|
||||
bitmap2component( potrace_bitmap, aOutfile, aFormat, m_imageDPI.x, m_imageDPI.y );
|
||||
}
|
||||
|
||||
|
||||
// EDA_APP
|
||||
|
||||
IMPLEMENT_APP( EDA_APP )
|
||||
//-----<KIFACE>-----------------------------------------------------------------
|
||||
|
||||
///-----------------------------------------------------------------------------
|
||||
// EDA_APP
|
||||
// main program
|
||||
//-----------------------------------------------------------------------------
|
||||
namespace BMP2CMP {
|
||||
|
||||
bool EDA_APP::OnInit()
|
||||
static struct IFACE : public KIFACE_I
|
||||
{
|
||||
wxInitAllImageHandlers();
|
||||
bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits );
|
||||
|
||||
InitEDA_Appl( wxT( "BMP2CMP" ) );
|
||||
wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 )
|
||||
{
|
||||
switch( aClassId )
|
||||
{
|
||||
|
||||
wxFrame* frame = new BM2CMP_FRAME();
|
||||
SetTopWindow( frame );
|
||||
frame->Show( true );
|
||||
default:
|
||||
{
|
||||
KIWAY_PLAYER* frame = new BM2CMP_FRAME( aKiway, aParent );
|
||||
return frame;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
* Function IfaceOrAddress
|
||||
* return a pointer to the requested object. The safest way to use this
|
||||
* is to retrieve a pointer to a static instance of an interface, similar to
|
||||
* how the KIFACE interface is exported. But if you know what you are doing
|
||||
* use it to retrieve anything you want.
|
||||
*
|
||||
* @param aDataId identifies which object you want the address of.
|
||||
*
|
||||
* @return void* - and must be cast into the know type.
|
||||
*/
|
||||
void* IfaceOrAddress( int aDataId )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
IFACE( const char* aDSOname, KIWAY::FACE_T aType ) :
|
||||
KIFACE_I( aDSOname, aType )
|
||||
{}
|
||||
|
||||
void EDA_APP::MacOpenFile( const wxString& aFileName )
|
||||
} 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.
|
||||
MY_API( 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,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Oct 8 2012)
|
||||
// C++ code generated with wxFormBuilder (version Nov 5 2013)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style )
|
||||
BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : KIWAY_PLAYER( parent, id, title, pos, size, style )
|
||||
{
|
||||
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
|
||||
|
||||
@@ -41,33 +41,43 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
|
||||
sbSizerInfo = new wxStaticBoxSizer( new wxStaticBox( m_panelRight, wxID_ANY, _("Bitmap Info:") ), wxVERTICAL );
|
||||
|
||||
wxFlexGridSizer* fgSizerInfo;
|
||||
fgSizerInfo = new wxFlexGridSizer( 3, 3, 0, 0 );
|
||||
fgSizerInfo = new wxFlexGridSizer( 0, 4, 0, 0 );
|
||||
fgSizerInfo->AddGrowableCol( 1 );
|
||||
fgSizerInfo->AddGrowableCol( 2 );
|
||||
fgSizerInfo->SetFlexibleDirection( wxBOTH );
|
||||
fgSizerInfo->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
m_staticTextSizeX = new wxStaticText( m_panelRight, wxID_ANY, _("Size X:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextSizeX->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_staticTextSizeX, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
m_staticTextSize = new wxStaticText( m_panelRight, wxID_ANY, _("Size:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextSize->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_staticTextSize, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_SizeXValue = new wxStaticText( m_panelRight, wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizeXValue->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_SizeXValue, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_SizeXunits = new wxStaticText( m_panelRight, wxID_ANY, _("pixels"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizeXunits->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_SizeXunits, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_staticTextSizeY = new wxStaticText( m_panelRight, wxID_ANY, _("Size Y:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextSizeY->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_staticTextSizeY, 0, wxALIGN_RIGHT|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
fgSizerInfo->Add( m_SizeXValue, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_SizeYValue = new wxStaticText( m_panelRight, wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizeYValue->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_SizeYValue, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
fgSizerInfo->Add( m_SizeYValue, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_SizeYunits = new wxStaticText( m_panelRight, wxID_ANY, _("pixels"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizeYunits->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_SizeYunits, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
m_SizePixUnits = new wxStaticText( m_panelRight, wxID_ANY, _("pixels"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizePixUnits->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_SizePixUnits, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_staticTextSize1 = new wxStaticText( m_panelRight, wxID_ANY, _("Size:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextSize1->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_staticTextSize1, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_RIGHT, 5 );
|
||||
|
||||
m_SizeXValue_mm = new wxStaticText( m_panelRight, wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizeXValue_mm->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_SizeXValue_mm, 0, wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_SizeYValue_mm = new wxStaticText( m_panelRight, wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_SizeYValue_mm->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_SizeYValue_mm, 0, wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_Size_mmxUnits = new wxStaticText( m_panelRight, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_Size_mmxUnits->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_Size_mmxUnits, 0, wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_staticTextBPP = new wxStaticText( m_panelRight, wxID_ANY, _("BPP:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextBPP->Wrap( -1 );
|
||||
@@ -75,17 +85,38 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
|
||||
|
||||
m_BPPValue = new wxStaticText( m_panelRight, wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_BPPValue->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_BPPValue, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
fgSizerInfo->Add( m_BPPValue, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_BPPunits = new wxStaticText( m_panelRight, wxID_ANY, _("bits"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_BPPunits->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_BPPunits, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
fgSizerInfo->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||
|
||||
m_staticTextBPI = new wxStaticText( m_panelRight, wxID_ANY, _("Resolution:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextBPI->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_staticTextBPI, 0, wxALIGN_RIGHT|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_DPIValueX = new wxTextCtrl( m_panelRight, wxID_ANY, _("300"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_DPIValueX->SetMinSize( wxSize( 40,-1 ) );
|
||||
|
||||
fgSizerInfo->Add( m_DPIValueX, 0, wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_DPIValueY = new wxTextCtrl( m_panelRight, wxID_ANY, _("300"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_DPIValueY->SetMinSize( wxSize( 40,-1 ) );
|
||||
|
||||
fgSizerInfo->Add( m_DPIValueY, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_DPI_Units = new wxStaticText( m_panelRight, wxID_ANY, _("DPI"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_DPI_Units->Wrap( -1 );
|
||||
fgSizerInfo->Add( m_DPI_Units, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
|
||||
sbSizerInfo->Add( fgSizerInfo, 0, wxEXPAND|wxBOTTOM, 5 );
|
||||
|
||||
|
||||
brightSizer->Add( sbSizerInfo, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
brightSizer->Add( sbSizerInfo, 0, wxEXPAND|wxALL, 5 );
|
||||
|
||||
m_buttonLoad = new wxButton( m_panelRight, wxID_ANY, _("Load Bitmap"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
brightSizer->Add( m_buttonLoad, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
@@ -98,18 +129,18 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
|
||||
wxString m_radioBoxFormatChoices[] = { _("Eeschema"), _("Pcbnew old fmt (.emp)"), _("Pcbnew kicad_mod"), _("Postscript"), _("Logo for title block") };
|
||||
int m_radioBoxFormatNChoices = sizeof( m_radioBoxFormatChoices ) / sizeof( wxString );
|
||||
m_radioBoxFormat = new wxRadioBox( m_panelRight, wxID_ANY, _("Format"), wxDefaultPosition, wxDefaultSize, m_radioBoxFormatNChoices, m_radioBoxFormatChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_radioBoxFormat->SetSelection( 4 );
|
||||
brightSizer->Add( m_radioBoxFormat, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
m_radioBoxFormat->SetSelection( 2 );
|
||||
brightSizer->Add( m_radioBoxFormat, 0, wxEXPAND|wxALL, 5 );
|
||||
|
||||
wxString m_rbOptionsChoices[] = { _("Normal"), _("Negative") };
|
||||
int m_rbOptionsNChoices = sizeof( m_rbOptionsChoices ) / sizeof( wxString );
|
||||
m_rbOptions = new wxRadioBox( m_panelRight, wxID_ANY, _("Options"), wxDefaultPosition, wxDefaultSize, m_rbOptionsNChoices, m_rbOptionsChoices, 1, wxRA_SPECIFY_COLS );
|
||||
m_rbOptions->SetSelection( 0 );
|
||||
brightSizer->Add( m_rbOptions, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
brightSizer->Add( m_rbOptions, 0, wxEXPAND|wxALL, 5 );
|
||||
|
||||
m_ThresholdText = new wxStaticText( m_panelRight, wxID_ANY, _("Threshold Value:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_ThresholdText->Wrap( -1 );
|
||||
brightSizer->Add( m_ThresholdText, 0, wxRIGHT|wxLEFT, 5 );
|
||||
brightSizer->Add( m_ThresholdText, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_sliderThreshold = new wxSlider( m_panelRight, wxID_ANY, 50, 0, 100, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL|wxSL_LABELS );
|
||||
m_sliderThreshold->SetToolTip( _("Adjust the level to convert the greyscale picture to a black and white picture.") );
|
||||
@@ -131,6 +162,10 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
|
||||
m_InitialPicturePanel->Connect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaint ), NULL, this );
|
||||
m_GreyscalePicturePanel->Connect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaint ), NULL, this );
|
||||
m_BNPicturePanel->Connect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaint ), NULL, this );
|
||||
m_DPIValueX->Connect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BM2CMP_FRAME_BASE::UpdatePPITextValueX ), NULL, this );
|
||||
m_DPIValueX->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnResolutionChange ), NULL, this );
|
||||
m_DPIValueY->Connect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BM2CMP_FRAME_BASE::UpdatePPITextValueY ), NULL, this );
|
||||
m_DPIValueY->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnResolutionChange ), NULL, this );
|
||||
m_buttonLoad->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnLoadFile ), NULL, this );
|
||||
m_buttonExport->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnExport ), NULL, this );
|
||||
m_rbOptions->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnOptionsSelection ), NULL, this );
|
||||
@@ -143,6 +178,10 @@ BM2CMP_FRAME_BASE::~BM2CMP_FRAME_BASE()
|
||||
m_InitialPicturePanel->Disconnect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaint ), NULL, this );
|
||||
m_GreyscalePicturePanel->Disconnect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaint ), NULL, this );
|
||||
m_BNPicturePanel->Disconnect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaint ), NULL, this );
|
||||
m_DPIValueX->Disconnect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BM2CMP_FRAME_BASE::UpdatePPITextValueX ), NULL, this );
|
||||
m_DPIValueX->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnResolutionChange ), NULL, this );
|
||||
m_DPIValueY->Disconnect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BM2CMP_FRAME_BASE::UpdatePPITextValueY ), NULL, this );
|
||||
m_DPIValueY->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnResolutionChange ), NULL, this );
|
||||
m_buttonLoad->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnLoadFile ), NULL, this );
|
||||
m_buttonExport->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnExport ), NULL, this );
|
||||
m_rbOptions->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnOptionsSelection ), NULL, this );
|
||||
|
||||
@@ -20,8 +20,10 @@
|
||||
<property name="path">.</property>
|
||||
<property name="precompiled_header"></property>
|
||||
<property name="relative_path">1</property>
|
||||
<property name="skip_lua_events">1</property>
|
||||
<property name="skip_php_events">1</property>
|
||||
<property name="skip_python_events">1</property>
|
||||
<property name="ui_table">UI</property>
|
||||
<property name="use_enum">0</property>
|
||||
<property name="use_microsoft_bom">0</property>
|
||||
<object class="Frame" expanded="1">
|
||||
@@ -44,7 +46,7 @@
|
||||
<property name="pos"></property>
|
||||
<property name="size">527,470</property>
|
||||
<property name="style">wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER</property>
|
||||
<property name="subclass"></property>
|
||||
<property name="subclass">KIWAY_PLAYER; kiway_player.h</property>
|
||||
<property name="title">Bitmap to Component Converter</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
@@ -506,7 +508,7 @@
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
|
||||
<property name="flag">wxEXPAND|wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticBoxSizer" expanded="1">
|
||||
<property name="id">wxID_ANY</property>
|
||||
@@ -521,16 +523,16 @@
|
||||
<property name="flag">wxEXPAND|wxBOTTOM</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxFlexGridSizer" expanded="1">
|
||||
<property name="cols">3</property>
|
||||
<property name="cols">4</property>
|
||||
<property name="flexible_direction">wxBOTH</property>
|
||||
<property name="growablecols"></property>
|
||||
<property name="growablecols">1,2</property>
|
||||
<property name="growablerows"></property>
|
||||
<property name="hgap">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">fgSizerInfo</property>
|
||||
<property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
|
||||
<property name="permission">none</property>
|
||||
<property name="rows">3</property>
|
||||
<property name="rows">0</property>
|
||||
<property name="vgap">0</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
@@ -564,7 +566,7 @@
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Size X:</property>
|
||||
<property name="label">Size:</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
@@ -572,7 +574,7 @@
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticTextSizeX</property>
|
||||
<property name="name">m_staticTextSize</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
@@ -617,7 +619,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -700,173 +702,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">pixels</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_SizeXunits</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALIGN_RIGHT|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Size Y:</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticTextSizeY</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -949,7 +785,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -987,7 +823,339 @@
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_SizeYunits</property>
|
||||
<property name="name">m_SizePixUnits</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_RIGHT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Size:</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticTextSize1</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">0000</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_SizeXValue_mm</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">0000</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_SizeYValue_mm</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">mm</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_Size_mmxUnits</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
@@ -1115,7 +1283,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -1279,6 +1447,364 @@
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND</property>
|
||||
<property name="proportion">1</property>
|
||||
<object class="spacer" expanded="1">
|
||||
<property name="height">0</property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="width">0</property>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALIGN_RIGHT|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Resolution:</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_staticTextBPI</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxTextCtrl" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="maxlength"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size">40,-1</property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_DPIValueX</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="value">300</property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow">UpdatePPITextValueX</event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnText">OnResolutionChange</event>
|
||||
<event name="OnTextEnter"></event>
|
||||
<event name="OnTextMaxLen"></event>
|
||||
<event name="OnTextURL"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxTextCtrl" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="maxlength"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size">40,-1</property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_DPIValueY</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="value">300</property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow">UpdatePPITextValueY</event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnText">OnResolutionChange</event>
|
||||
<event name="OnTextEnter"></event>
|
||||
<event name="OnTextMaxLen"></event>
|
||||
<event name="OnTextURL"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer"></property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position"></property>
|
||||
<property name="aui_row"></property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">DPI</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_DPI_Units</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass"></property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<property name="wrap">-1</property>
|
||||
<event name="OnChar"></event>
|
||||
<event name="OnEnterWindow"></event>
|
||||
<event name="OnEraseBackground"></event>
|
||||
<event name="OnKeyDown"></event>
|
||||
<event name="OnKeyUp"></event>
|
||||
<event name="OnKillFocus"></event>
|
||||
<event name="OnLeaveWindow"></event>
|
||||
<event name="OnLeftDClick"></event>
|
||||
<event name="OnLeftDown"></event>
|
||||
<event name="OnLeftUp"></event>
|
||||
<event name="OnMiddleDClick"></event>
|
||||
<event name="OnMiddleDown"></event>
|
||||
<event name="OnMiddleUp"></event>
|
||||
<event name="OnMotion"></event>
|
||||
<event name="OnMouseEvents"></event>
|
||||
<event name="OnMouseWheel"></event>
|
||||
<event name="OnPaint"></event>
|
||||
<event name="OnRightDClick"></event>
|
||||
<event name="OnRightDown"></event>
|
||||
<event name="OnRightUp"></event>
|
||||
<event name="OnSetFocus"></event>
|
||||
<event name="OnSize"></event>
|
||||
<event name="OnUpdateUI"></event>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
@@ -1461,7 +1987,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT</property>
|
||||
<property name="flag">wxEXPAND|wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxRadioBox" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -1509,7 +2035,7 @@
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="selection">4</property>
|
||||
<property name="selection">2</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style">wxRA_SPECIFY_COLS</property>
|
||||
@@ -1551,7 +2077,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT</property>
|
||||
<property name="flag">wxEXPAND|wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxRadioBox" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
@@ -1641,7 +2167,7 @@
|
||||
</object>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxRIGHT|wxLEFT</property>
|
||||
<property name="flag">wxTOP|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxStaticText" expanded="1">
|
||||
<property name="BottomDockable">1</property>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Oct 8 2012)
|
||||
// C++ code generated with wxFormBuilder (version Nov 5 2013)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||
@@ -11,6 +11,9 @@
|
||||
#include <wx/artprov.h>
|
||||
#include <wx/xrc/xmlres.h>
|
||||
#include <wx/intl.h>
|
||||
class KIWAY_PLAYER;
|
||||
|
||||
#include "kiway_player.h"
|
||||
#include <wx/scrolwin.h>
|
||||
#include <wx/gdicmn.h>
|
||||
#include <wx/font.h>
|
||||
@@ -22,6 +25,7 @@
|
||||
#include <wx/icon.h>
|
||||
#include <wx/notebook.h>
|
||||
#include <wx/stattext.h>
|
||||
#include <wx/textctrl.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/statbox.h>
|
||||
#include <wx/button.h>
|
||||
@@ -37,7 +41,7 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/// Class BM2CMP_FRAME_BASE
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
class BM2CMP_FRAME_BASE : public wxFrame
|
||||
class BM2CMP_FRAME_BASE : public KIWAY_PLAYER
|
||||
{
|
||||
private:
|
||||
|
||||
@@ -47,15 +51,21 @@ class BM2CMP_FRAME_BASE : public wxFrame
|
||||
wxScrolledWindow* m_GreyscalePicturePanel;
|
||||
wxScrolledWindow* m_BNPicturePanel;
|
||||
wxPanel* m_panelRight;
|
||||
wxStaticText* m_staticTextSizeX;
|
||||
wxStaticText* m_staticTextSize;
|
||||
wxStaticText* m_SizeXValue;
|
||||
wxStaticText* m_SizeXunits;
|
||||
wxStaticText* m_staticTextSizeY;
|
||||
wxStaticText* m_SizeYValue;
|
||||
wxStaticText* m_SizeYunits;
|
||||
wxStaticText* m_SizePixUnits;
|
||||
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_staticTextBPI;
|
||||
wxTextCtrl* m_DPIValueX;
|
||||
wxTextCtrl* m_DPIValueY;
|
||||
wxStaticText* m_DPI_Units;
|
||||
wxButton* m_buttonLoad;
|
||||
wxButton* m_buttonExport;
|
||||
wxRadioBox* m_radioBoxFormat;
|
||||
@@ -66,6 +76,9 @@ class BM2CMP_FRAME_BASE : public wxFrame
|
||||
|
||||
// Virtual event handlers, overide them in your derived class
|
||||
virtual void OnPaint( wxPaintEvent& event ) { event.Skip(); }
|
||||
virtual void UpdatePPITextValueX( wxMouseEvent& event ) { event.Skip(); }
|
||||
virtual void OnResolutionChange( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void UpdatePPITextValueY( wxMouseEvent& event ) { event.Skip(); }
|
||||
virtual void OnLoadFile( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnExport( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnOptionsSelection( wxCommandEvent& event ) { event.Skip(); }
|
||||
|
||||
@@ -138,12 +138,12 @@ BITMAPCONV_INFO::BITMAPCONV_INFO()
|
||||
}
|
||||
|
||||
|
||||
int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, int aFormat )
|
||||
int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile,
|
||||
int aFormat, int aDpi_X, int aDpi_Y )
|
||||
{
|
||||
potrace_param_t* param;
|
||||
potrace_state_t* st;
|
||||
|
||||
|
||||
// set tracing parameters, starting from defaults
|
||||
param = potrace_param_default();
|
||||
if( !param )
|
||||
@@ -171,8 +171,8 @@ int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, int aFo
|
||||
{
|
||||
case 4:
|
||||
info.m_Format = KICAD_LOGO;
|
||||
info.m_ScaleX = 1e3 * 25.4 / 300; // the conversion scale from PPI to micro
|
||||
info.m_ScaleY = info.m_ScaleX; // Y axis is top to bottom
|
||||
info.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;
|
||||
|
||||
@@ -186,22 +186,22 @@ int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, int aFo
|
||||
|
||||
case 2:
|
||||
info.m_Format = EESCHEMA_FMT;
|
||||
info.m_ScaleX = 1000.0 / 300; // the conversion scale from PPI to UI
|
||||
info.m_ScaleY = -info.m_ScaleX; // Y axis is bottom to Top for components in libs
|
||||
info.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 1:
|
||||
info.m_Format = PCBNEW_KICAD_MOD;
|
||||
info.m_ScaleX = 1e6 * 25.4 / 300; // the conversion scale from PPI to UI
|
||||
info.m_ScaleY = info.m_ScaleX; // Y axis is top to bottom in modedit
|
||||
info.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();
|
||||
break;
|
||||
|
||||
case 0:
|
||||
info.m_Format = PCBNEW_LEGACY_EMP;
|
||||
info.m_ScaleX = 10000.0 / 300; // the conversion scale
|
||||
info.m_ScaleY = info.m_ScaleX; // Y axis is top to bottom in modedit
|
||||
info.m_ScaleX = 10000.0 / aDpi_X; // the conversion scale
|
||||
info.m_ScaleY = 10000.0 / aDpi_Y; // Y axis is top to bottom in modedit
|
||||
info.CreateOutputFile();
|
||||
break;
|
||||
|
||||
@@ -355,7 +355,7 @@ void BITMAPCONV_INFO::OuputOnePolygon( KPolygon & aPolygon )
|
||||
|
||||
case PCBNEW_LEGACY_EMP:
|
||||
{
|
||||
LAYER_NUM layer = SILKSCREEN_N_FRONT;
|
||||
LAYER_NUM layer = F_SilkS;
|
||||
int width = 1;
|
||||
fprintf( m_Outfile, "DP %d %d %d %d %d %d %d\n",
|
||||
0, 0, 0, 0,
|
||||
|
||||
@@ -151,7 +151,6 @@ set( BMAPS_MID
|
||||
annotate_down_right
|
||||
annotate_right_down
|
||||
annotate
|
||||
apply
|
||||
auto_associe
|
||||
auto_delete_track
|
||||
auto_track_width
|
||||
@@ -177,6 +176,7 @@ set( BMAPS_MID
|
||||
copyblock
|
||||
copycomponent
|
||||
copy_button
|
||||
copy_library
|
||||
copper_layers_setup
|
||||
cursor_shape
|
||||
cursor
|
||||
@@ -287,7 +287,6 @@ set( BMAPS_MID
|
||||
import
|
||||
info
|
||||
insert_module_board
|
||||
invert_module
|
||||
invisible_text
|
||||
kicad_icon_small
|
||||
label2glabel
|
||||
@@ -335,6 +334,8 @@ set( BMAPS_MID
|
||||
mirepcb
|
||||
mirror_h
|
||||
mirror_v
|
||||
mirror_footprint_axisX
|
||||
mirror_footprint_axisY
|
||||
mode_module
|
||||
mode_track
|
||||
modratsnest
|
||||
@@ -446,6 +447,8 @@ set( BMAPS_MID
|
||||
post_module
|
||||
preference
|
||||
print_button
|
||||
ps_router
|
||||
py_script
|
||||
ratsnest
|
||||
read_setup
|
||||
redo
|
||||
@@ -457,8 +460,8 @@ set( BMAPS_MID
|
||||
right
|
||||
rotate_field
|
||||
rotate_glabel
|
||||
rotate_module_neg
|
||||
rotate_module_pos
|
||||
rotate_module_cw
|
||||
rotate_module_ccw
|
||||
rotate_pin
|
||||
rotate_ccw
|
||||
rotate_cw
|
||||
|
||||
@@ -8,51 +8,50 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff,
|
||||
0x61, 0x00, 0x00, 0x02, 0xb0, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x8d, 0x93, 0x5f, 0x48, 0x53,
|
||||
0x51, 0x1c, 0xc7, 0x45, 0xa7, 0x25, 0x61, 0x26, 0xb6, 0xfc, 0x93, 0x88, 0x92, 0xa9, 0x60, 0x11,
|
||||
0xf4, 0x22, 0xfd, 0x7b, 0xe8, 0x21, 0xea, 0x2d, 0xf2, 0x25, 0xa8, 0x27, 0x03, 0x85, 0x88, 0xd0,
|
||||
0xd5, 0x9a, 0x48, 0x77, 0x76, 0x23, 0x14, 0xb7, 0x74, 0x9b, 0xcb, 0x35, 0x77, 0xe7, 0xbd, 0x57,
|
||||
0xaf, 0x05, 0x35, 0x88, 0x56, 0xd6, 0x96, 0x63, 0x81, 0xf3, 0xc6, 0xc0, 0x6a, 0x43, 0x27, 0xcb,
|
||||
0x6d, 0xa0, 0xb8, 0xd9, 0x9d, 0x9b, 0xdb, 0xfc, 0x13, 0xb8, 0xb5, 0x72, 0x3b, 0x9d, 0x2b, 0x53,
|
||||
0xdc, 0x34, 0xea, 0xe1, 0xc3, 0xb9, 0x70, 0xee, 0xf7, 0x7b, 0x7e, 0xbf, 0x73, 0xbe, 0xbf, 0x34,
|
||||
0x00, 0x40, 0xda, 0x76, 0x50, 0x14, 0x4d, 0x57, 0xa9, 0x5a, 0x72, 0xe5, 0xf2, 0xdb, 0x7b, 0x52,
|
||||
0xf7, 0x76, 0x63, 0xeb, 0x83, 0x24, 0xd1, 0x42, 0x92, 0x14, 0x4a, 0x29, 0x02, 0xf1, 0x93, 0x84,
|
||||
0x70, 0x99, 0xc4, 0x85, 0x5e, 0x92, 0x44, 0x9e, 0xa9, 0xd5, 0x48, 0xf9, 0x3f, 0x0d, 0x28, 0x0a,
|
||||
0x3d, 0x04, 0x45, 0x06, 0x63, 0x67, 0xc3, 0x77, 0xa6, 0xfe, 0x6c, 0xd4, 0x7b, 0xad, 0x36, 0xea,
|
||||
0xa9, 0x3f, 0x17, 0x99, 0xe4, 0x5f, 0x59, 0x26, 0x08, 0xa1, 0x19, 0x9a, 0x57, 0x4b, 0x64, 0x5d,
|
||||
0xbc, 0x7e, 0x1c, 0xa3, 0xbb, 0xa5, 0xe2, 0x1b, 0x3b, 0x0c, 0x48, 0x1c, 0x11, 0x8e, 0x35, 0x5d,
|
||||
0x76, 0xcf, 0x9e, 0x3f, 0xf2, 0x2b, 0x50, 0x96, 0x09, 0x36, 0x99, 0x3b, 0x7d, 0x78, 0x7d, 0xf4,
|
||||
0x6e, 0xdd, 0x8c, 0xba, 0xbf, 0xc7, 0x69, 0xff, 0x66, 0x8f, 0x98, 0xc6, 0x46, 0x43, 0xa2, 0xae,
|
||||
0x8e, 0xba, 0x24, 0x03, 0x8d, 0x46, 0x93, 0x31, 0x80, 0x23, 0x83, 0xe6, 0x4b, 0x35, 0xab, 0x73,
|
||||
0xa5, 0x1c, 0x90, 0x0a, 0x7d, 0xe1, 0x58, 0xd8, 0x60, 0xd0, 0x45, 0x7c, 0x3e, 0x1f, 0x90, 0xf7,
|
||||
0x4a, 0xdf, 0x6e, 0x0a, 0x3b, 0x44, 0x8f, 0xea, 0x05, 0x02, 0x41, 0xce, 0xc6, 0xa5, 0xb1, 0xbd,
|
||||
0xeb, 0x4f, 0x95, 0xaf, 0xda, 0x4b, 0x38, 0x20, 0x15, 0x43, 0x6d, 0x59, 0xf8, 0xa3, 0x51, 0x1f,
|
||||
0xf6, 0xfb, 0xfd, 0x40, 0xd9, 0xa7, 0xb0, 0xb2, 0xa2, 0xc7, 0xdd, 0xa2, 0x66, 0xfd, 0x88, 0x2e,
|
||||
0x2c, 0x16, 0xb7, 0x37, 0x6d, 0xb8, 0x11, 0x04, 0x72, 0x13, 0x3f, 0x53, 0xe9, 0xa4, 0x4b, 0xb2,
|
||||
0xe2, 0x9f, 0x8b, 0x33, 0xc0, 0x26, 0xe3, 0xc5, 0x1c, 0x40, 0x9c, 0x2c, 0x0d, 0xbc, 0x78, 0xf9,
|
||||
0x7c, 0x29, 0x18, 0x0c, 0x02, 0xdb, 0x94, 0x2d, 0xa6, 0x1d, 0xd6, 0x7a, 0x69, 0xda, 0xf4, 0xc3,
|
||||
0x62, 0xb1, 0xac, 0x77, 0x76, 0x76, 0x34, 0x6c, 0x18, 0x0c, 0x0d, 0xa1, 0x15, 0xb8, 0xec, 0x4e,
|
||||
0x83, 0xa4, 0xe2, 0xe0, 0xbc, 0xb6, 0x28, 0x0b, 0x18, 0x0a, 0x39, 0x40, 0x5f, 0x98, 0x19, 0x97,
|
||||
0x55, 0x72, 0x19, 0xec, 0xa9, 0xd4, 0xbd, 0x18, 0x58, 0x8c, 0xb1, 0x06, 0x0e, 0x87, 0x03, 0x30,
|
||||
0x0c, 0x03, 0x2c, 0x56, 0xcb, 0x6f, 0x95, 0xba, 0x6f, 0x0a, 0x56, 0xcf, 0xd9, 0xba, 0x0c, 0x8a,
|
||||
0x42, 0xca, 0x65, 0xf7, 0xae, 0x5f, 0x7d, 0x50, 0x5b, 0xd5, 0x83, 0x54, 0x14, 0xbc, 0x41, 0x2a,
|
||||
0x8b, 0xde, 0x63, 0x58, 0xef, 0xd7, 0xf9, 0x79, 0xcf, 0x7a, 0x34, 0x1a, 0x05, 0xb3, 0xb3, 0x33,
|
||||
0x31, 0xf8, 0x0a, 0x93, 0x0a, 0xa5, 0x1c, 0x53, 0x28, 0x9f, 0xdc, 0x6f, 0x6c, 0x6c, 0xcc, 0x4c,
|
||||
0xca, 0x01, 0x0b, 0x1b, 0x1e, 0x82, 0x68, 0xe5, 0x8e, 0x8f, 0x7f, 0x38, 0x81, 0xa9, 0x95, 0xc3,
|
||||
0x2e, 0x97, 0xf3, 0xe7, 0xda, 0xda, 0x1a, 0x58, 0xf0, 0x2d, 0xc4, 0x70, 0x02, 0xa3, 0x57, 0x56,
|
||||
0x56, 0xd8, 0x4c, 0xec, 0x87, 0xec, 0x85, 0x14, 0x40, 0xf2, 0x76, 0x0d, 0x87, 0x1a, 0x57, 0x11,
|
||||
0x56, 0xab, 0x25, 0x1c, 0x0a, 0x85, 0x00, 0xe3, 0x65, 0x62, 0x03, 0x83, 0xb8, 0x19, 0x96, 0x9b,
|
||||
0x95, 0x10, 0x97, 0x42, 0x32, 0x12, 0x06, 0xf9, 0x3b, 0xc4, 0x32, 0xb9, 0xa4, 0x8d, 0xfe, 0x44,
|
||||
0xaf, 0x7a, 0x3c, 0x1e, 0xe0, 0x76, 0xbb, 0xe3, 0x83, 0xd4, 0xc0, 0x17, 0xf8, 0x84, 0xc7, 0xe1,
|
||||
0x5e, 0x0d, 0xa4, 0x2a, 0xf1, 0x1f, 0x77, 0x47, 0x94, 0x59, 0x60, 0xca, 0x6e, 0x19, 0x8c, 0x23,
|
||||
0x4b, 0xd3, 0xd3, 0xd3, 0xc0, 0xe5, 0x72, 0x41, 0x31, 0x61, 0xa5, 0x28, 0x6a, 0x5f, 0xca, 0x21,
|
||||
0x6c, 0xf9, 0x79, 0x90, 0xec, 0x24, 0x03, 0x14, 0x6d, 0xad, 0x7e, 0xad, 0x7d, 0x15, 0x34, 0x9b,
|
||||
0xcd, 0x60, 0x62, 0x72, 0x02, 0x50, 0x43, 0xa4, 0xcd, 0x31, 0xe7, 0x60, 0x7b, 0xce, 0x87, 0x14,
|
||||
0x43, 0x38, 0x89, 0x35, 0x37, 0xb1, 0x1e, 0x48, 0x32, 0x78, 0xd8, 0xde, 0x76, 0x51, 0xa7, 0x7b,
|
||||
0x17, 0x35, 0x99, 0x46, 0xe3, 0xb0, 0x67, 0x2b, 0x9f, 0xcf, 0xdf, 0x7e, 0x72, 0x0e, 0xe4, 0x28,
|
||||
0x24, 0xfd, 0xaf, 0xd3, 0xc8, 0x22, 0x12, 0xb5, 0xb7, 0xc0, 0xa1, 0x91, 0xf0, 0x78, 0xbc, 0xec,
|
||||
0xff, 0x19, 0x65, 0x96, 0x3f, 0xa1, 0x97, 0xae, 0x1c, 0xfc, 0x3f, 0x7e, 0xea, 0x00, 0x00, 0x00,
|
||||
0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0x61, 0x00, 0x00, 0x02, 0x9d, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x7d, 0x93, 0x5d, 0x48, 0x54,
|
||||
0x41, 0x14, 0xc7, 0x47, 0x53, 0x12, 0x3f, 0x2a, 0xd3, 0x72, 0x0b, 0x41, 0x7a, 0x08, 0x8b, 0x28,
|
||||
0x0a, 0x29, 0x4b, 0x0b, 0x2a, 0xb7, 0x74, 0xdd, 0x2c, 0x5b, 0x3f, 0xb0, 0x0c, 0xc3, 0xcd, 0x0d,
|
||||
0x8d, 0x90, 0x14, 0x4b, 0xd3, 0x7b, 0xaf, 0xb3, 0xa9, 0x2f, 0x85, 0x58, 0xcb, 0xaa, 0xec, 0xde,
|
||||
0x9d, 0x99, 0xfd, 0x50, 0xcb, 0xac, 0x5e, 0x32, 0x32, 0xec, 0xa1, 0x44, 0xfb, 0xa0, 0xd0, 0x17,
|
||||
0x05, 0x83, 0x4a, 0x4a, 0x29, 0xa3, 0x1e, 0x8c, 0x92, 0x5c, 0x6d, 0x9d, 0xce, 0x6a, 0x6a, 0xea,
|
||||
0xe6, 0xc3, 0xef, 0x65, 0xee, 0x39, 0xff, 0x7b, 0xce, 0x7f, 0xfe, 0x83, 0x38, 0xe7, 0x68, 0x21,
|
||||
0x8c, 0xe1, 0x55, 0x8c, 0x09, 0x09, 0xcc, 0x22, 0x66, 0x30, 0x22, 0xe6, 0x32, 0x26, 0x1d, 0xc2,
|
||||
0x18, 0xfb, 0x78, 0xaa, 0x5d, 0xd4, 0x68, 0xa5, 0x42, 0x19, 0xa5, 0xe2, 0x20, 0xa3, 0xe2, 0xc8,
|
||||
0x3c, 0x98, 0xf8, 0x9e, 0x11, 0xc9, 0x60, 0xb1, 0xe0, 0xd5, 0x1e, 0x05, 0x2c, 0x96, 0xb2, 0x08,
|
||||
0x46, 0x85, 0x1e, 0x2b, 0x34, 0x1b, 0xad, 0xc6, 0xcf, 0x85, 0x8e, 0xd7, 0xa3, 0xb9, 0x8e, 0xb7,
|
||||
0x63, 0x3a, 0xc7, 0x87, 0xf1, 0x62, 0x47, 0xd7, 0x8f, 0x1b, 0x56, 0xf3, 0x30, 0x08, 0x7d, 0x04,
|
||||
0x3a, 0x64, 0x59, 0xd8, 0x30, 0x4f, 0xc0, 0x66, 0xbb, 0x1c, 0x02, 0x1f, 0xda, 0x28, 0x95, 0xfa,
|
||||
0xf2, 0xcc, 0xcf, 0xbe, 0xa7, 0x99, 0x06, 0x5c, 0x9b, 0xc4, 0xfe, 0x49, 0x45, 0x51, 0x1f, 0x0f,
|
||||
0x29, 0xe8, 0xe5, 0x5b, 0xf0, 0x9b, 0x49, 0x4d, 0xfd, 0x3b, 0xd7, 0x79, 0xb9, 0x73, 0x04, 0x6a,
|
||||
0x7a, 0x61, 0x9a, 0xce, 0x06, 0x19, 0x87, 0xcf, 0x0a, 0xc0, 0x41, 0x35, 0xa3, 0xd2, 0x73, 0x9d,
|
||||
0xb1, 0xfd, 0x6b, 0x6c, 0x65, 0x8f, 0xcb, 0xeb, 0xcc, 0x4b, 0x8e, 0xb4, 0x7f, 0xc9, 0x9e, 0xc6,
|
||||
0x5b, 0xfb, 0x82, 0xc7, 0x56, 0x74, 0xbb, 0xb2, 0x0c, 0x4f, 0x60, 0x25, 0xa9, 0x0b, 0x7a, 0x4a,
|
||||
0xa7, 0x04, 0xea, 0xea, 0x4a, 0x82, 0xc1, 0xa8, 0x87, 0xb8, 0xae, 0xbe, 0x7b, 0x3f, 0xee, 0x98,
|
||||
0xf0, 0x3e, 0xdd, 0xc1, 0x51, 0x96, 0x67, 0xbc, 0x80, 0x38, 0xfd, 0xd3, 0xdf, 0x7a, 0x63, 0xed,
|
||||
0x2b, 0x10, 0x68, 0x05, 0xcf, 0x14, 0xc8, 0x46, 0x24, 0x15, 0xec, 0xdd, 0xa2, 0xc1, 0xb7, 0x3f,
|
||||
0x85, 0xe9, 0x1e, 0x71, 0x94, 0xf9, 0xf8, 0x1f, 0xda, 0x17, 0xb1, 0x56, 0xd7, 0xc6, 0xd5, 0x42,
|
||||
0xcb, 0x37, 0x30, 0xba, 0x19, 0x6e, 0x2a, 0x11, 0x11, 0x22, 0x66, 0xc1, 0xfe, 0x24, 0x26, 0xdf,
|
||||
0xe1, 0xf4, 0x39, 0xd1, 0xca, 0x51, 0xc6, 0x83, 0x25, 0xf1, 0x3d, 0x79, 0x9f, 0xc7, 0xe6, 0xdb,
|
||||
0x47, 0xe1, 0xa7, 0x32, 0xf8, 0x71, 0x0c, 0xd9, 0xa8, 0x70, 0x04, 0xc6, 0xa9, 0x89, 0xca, 0x31,
|
||||
0x8e, 0xfa, 0xa6, 0xdf, 0xe1, 0x28, 0xed, 0xde, 0x92, 0x78, 0xa7, 0xdd, 0xe5, 0xdb, 0xb3, 0x0d,
|
||||
0x4e, 0x58, 0xbb, 0x1a, 0x26, 0xd0, 0xb8, 0x0d, 0xdc, 0x07, 0xe3, 0xe8, 0x77, 0x64, 0x56, 0x0d,
|
||||
0xfb, 0xa7, 0x30, 0x8e, 0x34, 0xb7, 0xa6, 0x39, 0xbe, 0x90, 0x9b, 0x53, 0x04, 0x68, 0x08, 0x8f,
|
||||
0x3a, 0x55, 0x31, 0x08, 0xcd, 0xe5, 0x76, 0x82, 0xf7, 0xba, 0xc3, 0xa3, 0x00, 0x91, 0xc2, 0xcc,
|
||||
0x0b, 0x25, 0xf6, 0x70, 0xb5, 0x30, 0x86, 0x8e, 0xda, 0xf8, 0x52, 0xac, 0x53, 0x97, 0x3b, 0x53,
|
||||
0xce, 0x5d, 0x6a, 0xa6, 0x54, 0x28, 0x30, 0x99, 0x8a, 0x57, 0x4e, 0x5d, 0xa3, 0x9d, 0x4a, 0xf1,
|
||||
0x84, 0x08, 0xba, 0x88, 0xb8, 0xb3, 0x5f, 0x82, 0x94, 0xe5, 0x13, 0x48, 0x2d, 0xf3, 0x39, 0xcc,
|
||||
0xb3, 0x04, 0x2a, 0xa5, 0x09, 0xa8, 0x19, 0x32, 0x1a, 0x85, 0x3c, 0x88, 0x77, 0xd2, 0x6c, 0x0e,
|
||||
0xdc, 0xf1, 0x04, 0xc5, 0xd4, 0xaa, 0xab, 0x17, 0xb5, 0x8a, 0xdd, 0x19, 0x03, 0x01, 0xd1, 0x39,
|
||||
0x4e, 0x9f, 0x03, 0x7a, 0x8e, 0xe2, 0x0d, 0xdc, 0xeb, 0x70, 0x0d, 0x5f, 0x76, 0xb0, 0x92, 0x07,
|
||||
0x45, 0x6b, 0x7f, 0xad, 0xd9, 0x95, 0x3e, 0x7c, 0x05, 0x6a, 0x98, 0x45, 0x48, 0x6e, 0x68, 0xc0,
|
||||
0x2b, 0xe6, 0x45, 0xd9, 0x9d, 0x46, 0x10, 0x51, 0x1a, 0x6a, 0x8b, 0x93, 0x76, 0xaa, 0x52, 0xae,
|
||||
0x07, 0x6f, 0x4b, 0xec, 0x5f, 0xbe, 0x31, 0x6e, 0xdc, 0x2f, 0x52, 0xf9, 0x33, 0x70, 0x73, 0xc2,
|
||||
0x50, 0xb4, 0x2a, 0xf5, 0x9a, 0xd9, 0x5c, 0xaa, 0x72, 0x3f, 0xac, 0xc6, 0xc6, 0x92, 0x60, 0x8f,
|
||||
0x8f, 0xc9, 0x64, 0xc2, 0xfe, 0xe0, 0xc7, 0x56, 0x4a, 0xcb, 0x62, 0x66, 0xb0, 0x11, 0x71, 0xcf,
|
||||
0x0c, 0x0e, 0x22, 0x44, 0xda, 0xed, 0x45, 0x01, 0xff, 0x7d, 0x8d, 0x73, 0x42, 0x26, 0x5f, 0x10,
|
||||
0x0b, 0x25, 0x04, 0xaf, 0x97, 0xe5, 0xd2, 0xb0, 0xa6, 0x26, 0x1c, 0x0a, 0x66, 0xfb, 0x79, 0xaa,
|
||||
0xfd, 0x03, 0x46, 0x3c, 0x41, 0xae, 0xe6, 0xa0, 0x09, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45,
|
||||
0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE tree_nosel_xpm[1] = {{ png, sizeof( png ), "tree_nosel_xpm" }};
|
||||
|
||||
@@ -8,45 +8,49 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff,
|
||||
0x61, 0x00, 0x00, 0x02, 0x4a, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0x32, 0x9e, 0x37, 0xaf, 0x52, 0x74, 0xee, 0xdc, 0x1a, 0xf5, 0x99, 0x33, 0x1b, 0x44, 0xd0,
|
||||
0xe5, 0xb0, 0x61, 0x38, 0x03, 0xa4, 0x69, 0xc1, 0xbc, 0xba, 0x65, 0x33, 0x56, 0x14, 0xbe, 0x9f,
|
||||
0xb9, 0xac, 0xe8, 0xfd, 0xfc, 0x79, 0xb5, 0xaf, 0x80, 0x78, 0xc3, 0xbc, 0x79, 0x0d, 0x4a, 0x04,
|
||||
0x0d, 0x98, 0x3f, 0xbf, 0x41, 0x01, 0xa8, 0xf9, 0x70, 0xc1, 0x61, 0xfb, 0x57, 0xee, 0x57, 0x84,
|
||||
0x7f, 0xb9, 0x5c, 0x12, 0xfc, 0xed, 0x7d, 0x45, 0xec, 0x67, 0xd2, 0x19, 0xfd, 0x0f, 0xf3, 0xe6,
|
||||
0xd5, 0x1e, 0xeb, 0xe9, 0x6b, 0x2e, 0x5d, 0xb0, 0x68, 0xde, 0xb1, 0xce, 0xce, 0xb6, 0x10, 0xac,
|
||||
0x06, 0x2c, 0x98, 0x57, 0xdb, 0x1c, 0xb1, 0x4f, 0xf7, 0x85, 0xc9, 0x01, 0x8e, 0x3f, 0x1a, 0xbb,
|
||||
0x19, 0xfe, 0xc3, 0xb0, 0xe9, 0x7e, 0xae, 0x3f, 0xb5, 0x4b, 0xd3, 0xdf, 0x9c, 0x3a, 0x7d, 0xe2,
|
||||
0xe7, 0xee, 0x3d, 0xbb, 0x5e, 0x34, 0x37, 0xd7, 0x68, 0x82, 0xd4, 0x37, 0x34, 0x34, 0xf0, 0xc0,
|
||||
0x0d, 0x98, 0x34, 0x29, 0x97, 0x7d, 0xf6, 0xfc, 0xca, 0x25, 0x56, 0x9b, 0x44, 0x3f, 0xa9, 0x6d,
|
||||
0x62, 0xf8, 0x8f, 0x8e, 0x67, 0x6d, 0x9c, 0xf8, 0xe7, 0xed, 0xdb, 0xb7, 0xff, 0x17, 0x2f, 0x59,
|
||||
0x78, 0x0c, 0xac, 0x81, 0x81, 0x81, 0x71, 0xf6, 0xdc, 0x59, 0xa7, 0xa6, 0x4c, 0x9b, 0x38, 0x0d,
|
||||
0xcc, 0x07, 0x9a, 0xc6, 0x32, 0x67, 0x5e, 0x55, 0x9f, 0xfe, 0x02, 0xe1, 0x8f, 0x2a, 0x2b, 0x19,
|
||||
0xfe, 0xa3, 0xe3, 0xfe, 0xa5, 0xed, 0xbf, 0x3f, 0x7c, 0xf8, 0xf0, 0x7f, 0xff, 0xfe, 0x7d, 0xaf,
|
||||
0xa6, 0x4e, 0x9f, 0x3c, 0x7f, 0xf2, 0x94, 0x09, 0xbb, 0x2e, 0x5d, 0xba, 0xf8, 0x73, 0xc1, 0xc2,
|
||||
0x79, 0xc7, 0xe1, 0x5e, 0x00, 0xfa, 0x33, 0xc5, 0xa4, 0x5b, 0xf9, 0xb2, 0xe2, 0x1c, 0x96, 0xbf,
|
||||
0x4a, 0x0b, 0x19, 0xfe, 0xc3, 0xf1, 0x7c, 0xc6, 0xff, 0xe1, 0x5d, 0x7e, 0x2f, 0x6f, 0xdf, 0xbe,
|
||||
0xfd, 0xf7, 0xd1, 0xa3, 0x47, 0xff, 0x5f, 0xbe, 0x7c, 0xf9, 0x1f, 0x44, 0x03, 0x0d, 0xf8, 0xdd,
|
||||
0xdb, 0xdf, 0xdd, 0x8a, 0x12, 0x88, 0x93, 0x67, 0x94, 0x24, 0xca, 0x97, 0x4a, 0xde, 0x93, 0xe9,
|
||||
0xe0, 0xf8, 0x25, 0xdb, 0xc7, 0xf2, 0x5f, 0xb6, 0x8b, 0xfd, 0xa7, 0x56, 0x99, 0xea, 0x8d, 0x35,
|
||||
0xeb, 0x57, 0xbe, 0x7e, 0xf6, 0xec, 0xd9, 0xff, 0x3b, 0x77, 0xee, 0xfc, 0xdf, 0xba, 0x6d, 0xf3,
|
||||
0xd3, 0xb5, 0xeb, 0x56, 0x5f, 0x9f, 0x30, 0xa9, 0xa7, 0x2b, 0x34, 0x34, 0x94, 0x19, 0x25, 0x1a,
|
||||
0xe7, 0xcd, 0xab, 0x96, 0x6d, 0x99, 0x94, 0xe5, 0xeb, 0x55, 0xe8, 0x56, 0xa8, 0x9f, 0xa5, 0x3f,
|
||||
0xd1, 0x28, 0xcb, 0xa8, 0x6f, 0xee, 0x82, 0x99, 0xe7, 0x1f, 0x3f, 0x7e, 0xfc, 0xff, 0xd5, 0xab,
|
||||
0x57, 0xff, 0xb7, 0x6d, 0xdf, 0xfa, 0xb4, 0xa6, 0xb9, 0x46, 0x1d, 0x67, 0x3a, 0x00, 0xe1, 0x99,
|
||||
0x33, 0xd3, 0x58, 0xe7, 0xcc, 0x69, 0x10, 0x5a, 0xb4, 0xa8, 0x41, 0x6c, 0xd2, 0xa4, 0x9e, 0xe6,
|
||||
0xcb, 0x97, 0x2f, 0x7d, 0x03, 0x39, 0xfb, 0xc2, 0xc5, 0xf3, 0x1f, 0xfa, 0x26, 0xf6, 0xa6, 0xe2,
|
||||
0x4d, 0x48, 0xc8, 0xb8, 0xa1, 0xb5, 0x41, 0x67, 0xd7, 0xae, 0x1d, 0xcf, 0x9f, 0x3c, 0x79, 0xf2,
|
||||
0xff, 0xc1, 0x83, 0xfb, 0x7f, 0x66, 0xcf, 0x99, 0xbe, 0x92, 0x60, 0x4a, 0x84, 0xe1, 0xdc, 0xdc,
|
||||
0x5c, 0xf6, 0xc5, 0x8b, 0x17, 0x5c, 0x06, 0xf9, 0x19, 0x64, 0xc0, 0x92, 0x65, 0x8b, 0x2e, 0x02,
|
||||
0x63, 0x8a, 0x8d, 0x68, 0x03, 0xa6, 0x4c, 0x9b, 0xb4, 0xec, 0xc2, 0x85, 0xf3, 0x7f, 0xee, 0xdd,
|
||||
0xbb, 0xf7, 0x7f, 0xcb, 0xd6, 0x4d, 0x8f, 0x1b, 0x1a, 0x2a, 0x14, 0x88, 0xca, 0x0b, 0x20, 0xdc,
|
||||
0xdc, 0xdc, 0xe0, 0xb2, 0x7d, 0xfb, 0xd6, 0x4f, 0x67, 0xcf, 0x9e, 0xfd, 0x7f, 0xe8, 0xf0, 0xa1,
|
||||
0x77, 0x3d, 0xfd, 0x9d, 0x31, 0x44, 0x67, 0x26, 0x10, 0x6e, 0xef, 0x6c, 0x2d, 0xda, 0xb3, 0x77,
|
||||
0xcf, 0x9f, 0xfd, 0x07, 0xf6, 0xfd, 0x9a, 0x3e, 0x73, 0xca, 0x3c, 0x92, 0x72, 0x23, 0x34, 0x8d,
|
||||
0x33, 0xf5, 0xf4, 0x75, 0xd5, 0xf7, 0x4d, 0xe8, 0x2e, 0x22, 0x46, 0x33, 0x08, 0x03, 0x00, 0xa3,
|
||||
0x36, 0xa6, 0x81, 0xc6, 0x70, 0x96, 0x32, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
|
||||
0x42, 0x60, 0x82,
|
||||
0x61, 0x00, 0x00, 0x02, 0x97, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x75, 0x93, 0x4b, 0x4c, 0x13,
|
||||
0x51, 0x14, 0x86, 0xaf, 0x3c, 0x62, 0xa3, 0xf2, 0x7e, 0x23, 0x2d, 0xb4, 0xf2, 0x10, 0x82, 0x41,
|
||||
0xa2, 0x06, 0x25, 0x24, 0x2e, 0x80, 0x28, 0xd4, 0x00, 0x8a, 0xf1, 0x85, 0xb0, 0xd1, 0x44, 0xa3,
|
||||
0x9b, 0x2a, 0x6f, 0x98, 0x19, 0xc7, 0x17, 0x2b, 0xf0, 0x99, 0xa0, 0xed, 0xf4, 0xde, 0x3b, 0x6d,
|
||||
0x91, 0x50, 0x8d, 0x62, 0xb4, 0x44, 0x5d, 0xb8, 0x01, 0xa2, 0x21, 0x24, 0x74, 0xa1, 0x46, 0x70,
|
||||
0x41, 0x82, 0x31, 0x26, 0x9a, 0x14, 0x8d, 0x89, 0xad, 0xf2, 0xe8, 0xf5, 0x0c, 0x2a, 0x84, 0x32,
|
||||
0x2c, 0xbe, 0xc5, 0x64, 0xce, 0xfd, 0xef, 0x7f, 0xfe, 0x7b, 0x0e, 0x62, 0x8c, 0xa1, 0x40, 0x1c,
|
||||
0x98, 0xcf, 0xa3, 0x56, 0xae, 0x59, 0x26, 0x42, 0x07, 0xd0, 0x8d, 0x31, 0x57, 0x6f, 0x36, 0x8b,
|
||||
0x3a, 0xb5, 0xda, 0x65, 0x1f, 0x76, 0x3b, 0x97, 0x2d, 0x13, 0xde, 0x46, 0x09, 0xef, 0x01, 0xa6,
|
||||
0x03, 0xf0, 0x50, 0xcc, 0x3f, 0x73, 0x58, 0xc5, 0x74, 0x55, 0x01, 0x59, 0xe6, 0xb7, 0x41, 0xc1,
|
||||
0x04, 0x91, 0xdb, 0xa6, 0xb8, 0x61, 0xa3, 0xe7, 0xf0, 0x97, 0x84, 0xd9, 0xea, 0xef, 0x91, 0xfe,
|
||||
0x03, 0x3f, 0x22, 0xfc, 0x35, 0x9f, 0xb4, 0x33, 0xdc, 0xab, 0x32, 0x8f, 0xd5, 0xd6, 0x3a, 0x45,
|
||||
0x89, 0xe0, 0xb6, 0xdb, 0xc5, 0xed, 0xcb, 0x04, 0x08, 0x11, 0x0d, 0x94, 0xf2, 0xc3, 0x77, 0x7a,
|
||||
0xcf, 0xbd, 0xdf, 0x3f, 0x19, 0x3f, 0x53, 0xfa, 0x21, 0x7c, 0x7e, 0xeb, 0x48, 0x30, 0xcb, 0x19,
|
||||
0x42, 0x2c, 0x7b, 0x10, 0xb1, 0xfc, 0xd1, 0x60, 0x56, 0x32, 0x11, 0x36, 0x7f, 0x68, 0x5c, 0xe7,
|
||||
0xbb, 0xdb, 0xd3, 0xf0, 0x0e, 0xda, 0x1a, 0x85, 0xb6, 0xb2, 0x16, 0x05, 0x28, 0xe6, 0x2c, 0x92,
|
||||
0xdc, 0xf2, 0xba, 0x72, 0x2c, 0xc5, 0x5b, 0x30, 0xa2, 0xf1, 0x6f, 0x7e, 0x89, 0x98, 0x1a, 0xca,
|
||||
0xbf, 0x7d, 0x63, 0x49, 0x3e, 0x4c, 0xb9, 0x61, 0x70, 0x7b, 0x75, 0x41, 0x40, 0x92, 0xda, 0x12,
|
||||
0x94, 0xde, 0x4c, 0x4f, 0xf6, 0xbe, 0x2d, 0x1c, 0x0c, 0x9f, 0xcb, 0x7a, 0x81, 0xd8, 0x02, 0xcf,
|
||||
0xd5, 0x29, 0x1a, 0x8c, 0x9c, 0x6d, 0x7c, 0x5c, 0xe1, 0x06, 0xc7, 0x2e, 0x49, 0xe2, 0xf4, 0x60,
|
||||
0x5f, 0xa8, 0x24, 0x84, 0x77, 0x96, 0x0c, 0xa4, 0x4e, 0xe7, 0x0c, 0x84, 0xb0, 0x4c, 0x17, 0x5a,
|
||||
0xe2, 0xe9, 0x4a, 0x72, 0x5c, 0x21, 0xac, 0xd8, 0xa5, 0xfd, 0x46, 0x09, 0xd7, 0x47, 0x29, 0x57,
|
||||
0x8e, 0x6c, 0x84, 0x3f, 0x0e, 0xc9, 0x4b, 0xf9, 0x0f, 0xa2, 0xe7, 0x32, 0xfa, 0xd7, 0xb0, 0x8c,
|
||||
0x7e, 0xb4, 0x92, 0x47, 0x4b, 0x64, 0x3e, 0x0c, 0x62, 0x3b, 0x9c, 0x09, 0x3f, 0x95, 0xb6, 0xe1,
|
||||
0xa9, 0xab, 0x20, 0x7d, 0xc1, 0x08, 0x2d, 0x74, 0xe5, 0xe2, 0x78, 0x5f, 0xba, 0x33, 0x88, 0xa5,
|
||||
0xdf, 0x47, 0xea, 0x38, 0xff, 0xd1, 0x17, 0xc4, 0x72, 0xa5, 0x78, 0x1f, 0x38, 0xef, 0x94, 0xb1,
|
||||
0x50, 0x8d, 0x30, 0x6e, 0x2f, 0xa2, 0x58, 0x10, 0xf3, 0x6e, 0x68, 0x3f, 0x1b, 0x68, 0x28, 0xdb,
|
||||
0x74, 0x0f, 0xad, 0x4e, 0x0f, 0x62, 0x06, 0x69, 0x2d, 0x2b, 0xb8, 0x99, 0x31, 0x0e, 0xae, 0x05,
|
||||
0x4a, 0xc5, 0x9d, 0x90, 0x41, 0x6b, 0x1c, 0x38, 0x38, 0x5f, 0x77, 0xcd, 0x68, 0x49, 0xed, 0x88,
|
||||
0xf1, 0x1a, 0x64, 0x28, 0x0a, 0x40, 0xff, 0x1f, 0x8a, 0x98, 0xee, 0x4a, 0xcc, 0xaf, 0xba, 0xae,
|
||||
0x72, 0x09, 0xce, 0x98, 0x30, 0x6e, 0x0a, 0xfb, 0xfb, 0x8c, 0x54, 0x28, 0x85, 0x20, 0x4f, 0xea,
|
||||
0x1b, 0x75, 0x93, 0x1b, 0x2f, 0x86, 0xcf, 0xa4, 0x59, 0x10, 0x4b, 0x93, 0x56, 0x92, 0x7c, 0x21,
|
||||
0xe2, 0x77, 0x56, 0xb3, 0xc1, 0x0d, 0x33, 0x70, 0x42, 0xb6, 0x0a, 0xc6, 0xc5, 0x39, 0xe8, 0xee,
|
||||
0x6e, 0x89, 0x22, 0x84, 0x3b, 0x78, 0xcb, 0x52, 0x5f, 0xa3, 0x3b, 0x93, 0xe6, 0x8e, 0x3e, 0x1b,
|
||||
0xe3, 0x4d, 0xbc, 0xa4, 0xf1, 0xa7, 0x5c, 0x0f, 0x66, 0x29, 0x9d, 0x21, 0x2c, 0xf1, 0xb2, 0x86,
|
||||
0x45, 0x9d, 0x8a, 0xf3, 0x6a, 0x4f, 0xa7, 0xbe, 0xb9, 0x6d, 0x6e, 0x38, 0x26, 0x63, 0xae, 0x42,
|
||||
0xb9, 0x7d, 0xd9, 0x28, 0x5b, 0xad, 0x62, 0x34, 0x04, 0x5a, 0x8c, 0x71, 0x5b, 0x59, 0xb1, 0x69,
|
||||
0x37, 0x9f, 0x54, 0xab, 0x1f, 0xda, 0x70, 0x24, 0xf1, 0x6b, 0xc4, 0xd1, 0xa4, 0x8f, 0x71, 0xb5,
|
||||
0xba, 0xd1, 0xaa, 0xa6, 0x32, 0x13, 0x04, 0xb7, 0x47, 0x71, 0xab, 0x5c, 0xa8, 0xba, 0x4c, 0xb0,
|
||||
0x71, 0xeb, 0x60, 0x40, 0xb6, 0x10, 0xd2, 0x5e, 0x68, 0xc3, 0xfc, 0xae, 0x40, 0x1c, 0x30, 0xbe,
|
||||
0x76, 0x7b, 0xc3, 0xfa, 0x55, 0xb7, 0x71, 0x49, 0xc8, 0x1c, 0x0a, 0x62, 0xb1, 0x18, 0x8b, 0xc9,
|
||||
0xca, 0xa4, 0xf6, 0xf6, 0x8a, 0xb1, 0x90, 0xb8, 0x46, 0xad, 0xf6, 0x0f, 0xc1, 0xb7, 0x26, 0x9c,
|
||||
0x1b, 0xea, 0xf7, 0x51, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE tree_sel_xpm[1] = {{ png, sizeof( png ), "tree_sel_xpm" }};
|
||||
|
||||
@@ -8,61 +8,30 @@
|
||||
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, 0x51, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0x3d, 0x30, 0x98, 0x08, 0x0d, 0x0d, 0x65, 0x36, 0xb3, 0xb1, 0x38, 0x60, 0x6e, 0x6e, 0x7e,
|
||||
0x11, 0x19, 0x83, 0xc4, 0x1c, 0x1c, 0x1c, 0x58, 0xa8, 0x66, 0x91, 0xa7, 0xa7, 0x27, 0xbb, 0x99,
|
||||
0xa5, 0xd9, 0x79, 0x8d, 0x9d, 0x96, 0xb7, 0xd5, 0xb7, 0x59, 0xdc, 0x57, 0xdf, 0x6c, 0xff, 0x44,
|
||||
0x63, 0x83, 0xc7, 0x6b, 0x13, 0x33, 0xef, 0x0f, 0x1a, 0x1a, 0xf7, 0x8f, 0xeb, 0xe8, 0xfc, 0x59,
|
||||
0xa4, 0xab, 0xfb, 0xaf, 0x53, 0x47, 0xe7, 0x5f, 0x89, 0x8e, 0xce, 0xdf, 0x58, 0x5d, 0xdd, 0x3f,
|
||||
0x2e, 0xc6, 0xc6, 0xff, 0x59, 0xc9, 0xb6, 0x48, 0x7d, 0x9d, 0xeb, 0x5b, 0xcd, 0x95, 0x61, 0x3f,
|
||||
0xb5, 0x96, 0xc7, 0xff, 0x07, 0x61, 0x13, 0xb3, 0x98, 0xff, 0xba, 0xba, 0xbf, 0xfe, 0xeb, 0xe8,
|
||||
0xfc, 0xc7, 0xc0, 0xda, 0xda, 0x3f, 0x5f, 0x68, 0x6a, 0x3e, 0xab, 0x30, 0x36, 0x7e, 0xc6, 0xc5,
|
||||
0xc0, 0xc0, 0x40, 0xa2, 0x8f, 0xd6, 0x7a, 0x7d, 0x00, 0x59, 0xa0, 0xb9, 0x32, 0xe2, 0x97, 0xc6,
|
||||
0x1a, 0xaf, 0x0f, 0x46, 0x26, 0xb6, 0xaf, 0xb8, 0xb8, 0xb4, 0xab, 0x79, 0x78, 0x1c, 0xeb, 0x84,
|
||||
0x84, 0xb2, 0xfa, 0x24, 0x24, 0x7a, 0xe6, 0xc9, 0xca, 0x2e, 0x5f, 0xa7, 0xa2, 0x72, 0xe1, 0x8c,
|
||||
0xb6, 0xf6, 0xbf, 0xbf, 0x10, 0x0b, 0xbf, 0xbf, 0x57, 0x57, 0x7f, 0xda, 0xac, 0xaa, 0xfa, 0x8e,
|
||||
0x0f, 0x9f, 0x85, 0x28, 0x16, 0xa9, 0x6d, 0xb4, 0x78, 0xaa, 0xbe, 0xde, 0xe9, 0x8d, 0xda, 0x46,
|
||||
0xf3, 0x27, 0x20, 0x6c, 0x68, 0x62, 0xf8, 0x98, 0x95, 0x95, 0xb5, 0x00, 0xa8, 0x3f, 0x0d, 0x8a,
|
||||
0x33, 0xa1, 0x74, 0x0a, 0x1f, 0x9f, 0x6f, 0xbd, 0x8a, 0xca, 0x99, 0x93, 0x30, 0x0b, 0xb5, 0xb4,
|
||||
0xbe, 0xbe, 0x91, 0x91, 0x59, 0xe4, 0x00, 0x94, 0x63, 0xc4, 0x9b, 0x18, 0xcc, 0xad, 0xcd, 0x0f,
|
||||
0x1b, 0x99, 0x18, 0x3d, 0x02, 0x19, 0x8e, 0x84, 0xef, 0x30, 0x31, 0x31, 0x65, 0x00, 0x35, 0xf3,
|
||||
0x83, 0x0c, 0x00, 0x62, 0x16, 0x20, 0x16, 0x00, 0x62, 0x19, 0x20, 0x36, 0x06, 0x59, 0xc8, 0xc3,
|
||||
0xe3, 0x55, 0xa3, 0xa6, 0x76, 0xef, 0x06, 0xd4, 0x77, 0x5f, 0x24, 0x25, 0x7b, 0x40, 0x0e, 0x61,
|
||||
0xc2, 0x6a, 0x11, 0x08, 0x83, 0x52, 0x17, 0xd0, 0xf5, 0x99, 0x40, 0x9c, 0x05, 0xc3, 0x50, 0x4b,
|
||||
0x40, 0x98, 0x17, 0x45, 0x13, 0x02, 0xb0, 0x02, 0xb1, 0x11, 0x2b, 0xab, 0x6c, 0xb6, 0x86, 0xc6,
|
||||
0xab, 0x27, 0x10, 0x9f, 0x7d, 0xfb, 0xc4, 0xc3, 0xe3, 0x1d, 0x01, 0x14, 0x67, 0xc6, 0x6a, 0x11,
|
||||
0x14, 0x88, 0x03, 0xb1, 0x1a, 0x1a, 0x96, 0xc3, 0x1b, 0xf6, 0x10, 0xc0, 0xc6, 0xcb, 0xeb, 0x9b,
|
||||
0x0c, 0x0c, 0xbe, 0x8f, 0x20, 0xcb, 0xd4, 0xd5, 0x1f, 0xdd, 0x62, 0x61, 0xe1, 0xb5, 0x46, 0x0e,
|
||||
0x46, 0x06, 0x1c, 0x2e, 0x45, 0x01, 0x44, 0x25, 0x5f, 0xa0, 0x65, 0x42, 0x42, 0xf9, 0x75, 0xda,
|
||||
0xda, 0x7f, 0xc1, 0x71, 0x26, 0x25, 0x35, 0x79, 0x0e, 0x34, 0x88, 0x31, 0x2d, 0xa2, 0x38, 0x53,
|
||||
0x32, 0x30, 0xf0, 0x29, 0x2b, 0x9f, 0x3d, 0x0c, 0xf1, 0xd5, 0x93, 0xfb, 0x40, 0x7e, 0x1c, 0x2c,
|
||||
0xbe, 0xa8, 0x6d, 0x11, 0x83, 0x94, 0xd4, 0x74, 0x6b, 0x98, 0xaf, 0x04, 0x05, 0x13, 0x5b, 0x60,
|
||||
0x41, 0x4f, 0xfd, 0x32, 0x0d, 0x18, 0x2f, 0x1a, 0x1a, 0x2f, 0xc0, 0xa9, 0x50, 0x5a, 0x7a, 0xe1,
|
||||
0x4a, 0x20, 0x3f, 0x00, 0x9c, 0x62, 0x69, 0x60, 0x11, 0x83, 0xa6, 0xe6, 0x9b, 0xe5, 0x20, 0x8b,
|
||||
0x14, 0x15, 0x0f, 0xec, 0x07, 0x72, 0xd3, 0x69, 0x62, 0x11, 0x08, 0x6b, 0x6b, 0x7f, 0x2b, 0x07,
|
||||
0x59, 0xa4, 0xaa, 0x7a, 0xed, 0x22, 0xd4, 0x22, 0x6e, 0x9a, 0x58, 0x04, 0x2c, 0x80, 0xeb, 0x40,
|
||||
0x16, 0x29, 0x2b, 0x9f, 0x3b, 0x05, 0xca, 0xd4, 0xa0, 0xa8, 0xa3, 0x91, 0x8f, 0xfe, 0xcd, 0x04,
|
||||
0x59, 0xa4, 0xa0, 0xb0, 0x6f, 0x2f, 0xd4, 0x22, 0x49, 0xb8, 0xa4, 0xa5, 0xa5, 0x25, 0xa7, 0xba,
|
||||
0xba, 0x3a, 0x2f, 0x32, 0x06, 0x16, 0x4d, 0x6c, 0xc4, 0x1a, 0xde, 0xd0, 0xd0, 0xc0, 0x04, 0x2a,
|
||||
0x33, 0x41, 0x58, 0x57, 0xf7, 0xc7, 0x19, 0x50, 0xa9, 0x2f, 0x2b, 0xbb, 0x60, 0x35, 0xb4, 0x6c,
|
||||
0x14, 0x00, 0x2b, 0x32, 0x36, 0x36, 0x16, 0x31, 0xb3, 0x32, 0x3b, 0x65, 0x66, 0x63, 0x7e, 0x1a,
|
||||
0x09, 0x9f, 0x31, 0xb3, 0x35, 0xdf, 0x81, 0xab, 0x90, 0x44, 0xc7, 0x66, 0xf6, 0x16, 0xab, 0x40,
|
||||
0x05, 0xb3, 0x99, 0x85, 0xc3, 0x2d, 0x50, 0xf5, 0x02, 0xc2, 0x86, 0x26, 0x16, 0x4f, 0xb8, 0xb9,
|
||||
0xb9, 0x2b, 0x40, 0x99, 0x19, 0xa2, 0xc8, 0xcc, 0x4c, 0xd1, 0xcc, 0xd5, 0xfc, 0x98, 0xfa, 0x56,
|
||||
0x8b, 0xfb, 0x6a, 0x9b, 0xcd, 0x1f, 0x81, 0xb0, 0xfa, 0x1a, 0xf3, 0x47, 0x86, 0x66, 0x86, 0xf7,
|
||||
0xa0, 0xc9, 0x93, 0x89, 0xa0, 0x45, 0x76, 0xe6, 0x07, 0xb5, 0x56, 0x58, 0xdc, 0xd1, 0x58, 0xef,
|
||||
0xfe, 0x46, 0x73, 0x45, 0xd4, 0x6f, 0xcd, 0x95, 0xe1, 0x3f, 0xf5, 0x9d, 0x0c, 0xef, 0x09, 0x08,
|
||||
0x08, 0xd4, 0x83, 0xca, 0x4a, 0x64, 0x8b, 0x8e, 0xab, 0x6d, 0x82, 0x54, 0x0f, 0x20, 0xac, 0xbe,
|
||||
0x0a, 0x58, 0x4d, 0x98, 0x1a, 0x3e, 0x80, 0x56, 0x0d, 0xac, 0xc4, 0x58, 0xa4, 0xb9, 0xc4, 0xec,
|
||||
0x11, 0x4c, 0xbf, 0xda, 0x46, 0xcb, 0x67, 0x48, 0x16, 0xc9, 0xd0, 0xd0, 0x22, 0xf3, 0x27, 0x50,
|
||||
0x8b, 0x6a, 0x31, 0x2d, 0x5a, 0x0f, 0x54, 0xb0, 0x0e, 0x82, 0xd5, 0x97, 0x52, 0xcd, 0xa2, 0x1a,
|
||||
0xb8, 0x45, 0x36, 0x36, 0x36, 0x82, 0x66, 0x56, 0x16, 0x47, 0xd1, 0x2b, 0x3e, 0x5d, 0x53, 0xfd,
|
||||
0x0b, 0xc4, 0x5a, 0x64, 0xea, 0x60, 0xbe, 0x1c, 0x98, 0xa8, 0x1e, 0x19, 0x19, 0x19, 0x3d, 0x81,
|
||||
0x61, 0xa0, 0x19, 0x0f, 0x80, 0x89, 0xa1, 0x08, 0x6e, 0x11, 0xb4, 0xe8, 0x60, 0x86, 0xe6, 0xe2,
|
||||
0x54, 0x34, 0x9c, 0x8e, 0x5e, 0x89, 0xe1, 0x2a, 0xe3, 0x80, 0x38, 0x1c, 0x9a, 0x9c, 0x91, 0xf5,
|
||||
0x67, 0x80, 0xeb, 0x39, 0xf4, 0x62, 0x1e, 0x88, 0x45, 0xd1, 0x30, 0x1f, 0x09, 0xe5, 0x1c, 0x27,
|
||||
0x16, 0xfd, 0x42, 0x20, 0x09, 0x00, 0x33, 0xa7, 0x77, 0x70, 0xcd, 0x40, 0x9d, 0x52, 0x00, 0x00,
|
||||
0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x01, 0x67, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0xd6, 0xbf, 0x4a, 0x03,
|
||||
0x41, 0x10, 0x06, 0xf0, 0x31, 0x0a, 0x9a, 0x46, 0x1f, 0x40, 0x04, 0x6b, 0x9f, 0xc0, 0x22, 0xa4,
|
||||
0x14, 0x2c, 0x6c, 0x2c, 0x94, 0x28, 0x5c, 0x44, 0x2f, 0x85, 0xf1, 0x6f, 0xa9, 0xdd, 0x3d, 0x80,
|
||||
0x85, 0xf8, 0x0e, 0x5a, 0x08, 0x5a, 0xc6, 0x52, 0xb0, 0x30, 0xb7, 0x47, 0xf0, 0x0d, 0x52, 0x04,
|
||||
0x6d, 0xb4, 0x0f, 0x8a, 0x45, 0xce, 0xef, 0xbb, 0x5b, 0xb9, 0x20, 0x9e, 0x18, 0x98, 0xbd, 0x62,
|
||||
0x8e, 0x65, 0x73, 0x3b, 0x3f, 0x66, 0xd9, 0xdb, 0x89, 0xc4, 0x71, 0x2c, 0x45, 0x44, 0xf2, 0x08,
|
||||
0x82, 0x60, 0xc2, 0xdf, 0xf5, 0xf7, 0x76, 0xf6, 0xfd, 0x1e, 0x83, 0x63, 0xce, 0xa9, 0x43, 0x4c,
|
||||
0xbc, 0x71, 0xea, 0xf5, 0x17, 0x6f, 0x96, 0x62, 0x06, 0xc7, 0x9c, 0x53, 0x87, 0x58, 0x05, 0x81,
|
||||
0x85, 0x87, 0x4a, 0x12, 0x1c, 0xd7, 0xb6, 0x0f, 0x3e, 0x44, 0xda, 0x97, 0x22, 0x61, 0x53, 0xe4,
|
||||
0x71, 0xd6, 0x19, 0xb4, 0x5e, 0x3f, 0xc2, 0xaf, 0xe1, 0x77, 0x0c, 0x10, 0x06, 0xf0, 0xa1, 0x48,
|
||||
0x6b, 0x52, 0x6d, 0xeb, 0x6a, 0x27, 0xde, 0xfb, 0xf2, 0x4a, 0x70, 0x81, 0xc4, 0x0d, 0xc4, 0x2d,
|
||||
0x90, 0x7e, 0x86, 0xb6, 0x7b, 0x22, 0xc6, 0xc3, 0xca, 0x92, 0xfa, 0x61, 0xc0, 0xd6, 0x95, 0x01,
|
||||
0xac, 0x22, 0xa2, 0x21, 0x10, 0xe3, 0x68, 0x6e, 0x24, 0xe8, 0xdf, 0x2f, 0x4b, 0x3c, 0x06, 0x60,
|
||||
0x0d, 0x50, 0xd7, 0x82, 0xaf, 0x88, 0x8a, 0x3a, 0x94, 0x81, 0x9d, 0x19, 0x00, 0x2d, 0x8b, 0x7d,
|
||||
0x02, 0xdf, 0x74, 0x02, 0xd9, 0xea, 0x4a, 0x40, 0xce, 0x32, 0x2c, 0xaa, 0x3a, 0x81, 0x32, 0x30,
|
||||
0x3c, 0x4f, 0x31, 0xf3, 0x86, 0xca, 0xe6, 0x1d, 0x42, 0xd7, 0xe3, 0x40, 0xee, 0x6c, 0x65, 0x9d,
|
||||
0xbc, 0xd3, 0xa8, 0xf3, 0xd5, 0x4b, 0x38, 0x8d, 0x78, 0xb1, 0xa7, 0x71, 0xcb, 0x19, 0x94, 0x62,
|
||||
0xa6, 0x6e, 0xab, 0x7a, 0x16, 0xb9, 0x9f, 0x72, 0x08, 0xf1, 0xe8, 0x9b, 0x27, 0x8b, 0x1d, 0x3b,
|
||||
0x83, 0x52, 0x8c, 0x1f, 0x75, 0x02, 0x19, 0xc7, 0x10, 0x6f, 0x90, 0xe4, 0xba, 0x1a, 0xfc, 0xbc,
|
||||
0x88, 0xf5, 0x1b, 0x5c, 0x7a, 0x37, 0xb2, 0xaa, 0xa6, 0x6b, 0xa8, 0x61, 0xa1, 0x2b, 0x67, 0x1d,
|
||||
0x96, 0x6b, 0x78, 0xeb, 0xb3, 0xc5, 0xb0, 0x9f, 0x0d, 0xe7, 0x51, 0xed, 0xb0, 0x5c, 0xc3, 0x16,
|
||||
0xf3, 0x5b, 0x9e, 0xdc, 0xc6, 0xc7, 0xb9, 0x51, 0xa1, 0xbf, 0xf2, 0x14, 0x0b, 0x69, 0x6e, 0x5d,
|
||||
0x5e, 0x1e, 0xf5, 0xc3, 0x90, 0x97, 0x47, 0x8a, 0xfa, 0x03, 0xf9, 0x05, 0xe4, 0xc8, 0xfd, 0xf2,
|
||||
0x75, 0x7b, 0xa3, 0xda, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_arc_xpm[1] = {{ png, sizeof( png ), "add_arc_xpm" }};
|
||||
|
||||
@@ -8,34 +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, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||
0xce, 0x00, 0x00, 0x01, 0x99, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xdd, 0xd4, 0x3b, 0x4f, 0xc2,
|
||||
0x50, 0x14, 0xc0, 0xf1, 0x8b, 0x6d, 0xaf, 0xb7, 0x0f, 0xa8, 0x0d, 0xa9, 0x14, 0x84, 0xa6, 0x0a,
|
||||
0x58, 0x92, 0x16, 0x34, 0x42, 0x48, 0xf0, 0x45, 0x51, 0x13, 0x1d, 0xdc, 0x0c, 0x1a, 0xdf, 0x88,
|
||||
0x9f, 0xc2, 0xd1, 0xd5, 0xc5, 0xdd, 0xd9, 0x38, 0x39, 0xb9, 0xe8, 0x47, 0xd2, 0xc1, 0x0f, 0xe0,
|
||||
0xe2, 0xf5, 0x54, 0x19, 0x0c, 0x4d, 0x2c, 0xd2, 0x8b, 0x83, 0xc3, 0x3f, 0x69, 0x93, 0xf6, 0xfc,
|
||||
0xd2, 0xe4, 0xf6, 0x20, 0x4a, 0x29, 0xfa, 0x8b, 0xd0, 0xff, 0x86, 0xe0, 0x2e, 0x06, 0x8d, 0x79,
|
||||
0x1e, 0xe5, 0x1d, 0x87, 0x62, 0xcb, 0xa2, 0xa4, 0xd1, 0xa0, 0x62, 0xa5, 0x42, 0x65, 0xdb, 0xa6,
|
||||
0xf1, 0x6a, 0x95, 0xaa, 0x91, 0x21, 0x18, 0x6c, 0xb8, 0x2e, 0xa5, 0x61, 0x0d, 0x8b, 0xfd, 0x1a,
|
||||
0x32, 0x8c, 0xbb, 0x49, 0xf8, 0xf4, 0xb1, 0x91, 0x43, 0x92, 0xe4, 0xd5, 0x00, 0x12, 0x47, 0x0e,
|
||||
0x11, 0xe2, 0xb4, 0x00, 0x52, 0x22, 0x1d, 0x06, 0x45, 0xd9, 0xd3, 0x79, 0x3e, 0xb9, 0xce, 0x71,
|
||||
0x62, 0x1b, 0x21, 0xbc, 0x0b, 0x43, 0x3b, 0x41, 0xc8, 0x5e, 0x8b, 0x0c, 0xf9, 0x03, 0xa0, 0x3a,
|
||||
0xb4, 0x09, 0x6d, 0x61, 0xec, 0xec, 0x04, 0xa1, 0x7c, 0x8b, 0x05, 0xc4, 0x41, 0x09, 0x28, 0xe9,
|
||||
0xa7, 0xaa, 0xdd, 0x99, 0x7e, 0x88, 0xe7, 0x2d, 0x2f, 0x32, 0xd4, 0xc3, 0x62, 0xfe, 0xa9, 0xf2,
|
||||
0x33, 0xcd, 0x47, 0x2d, 0x08, 0x65, 0x9b, 0x4c, 0xa0, 0xef, 0x15, 0x8b, 0x4f, 0x89, 0x20, 0x64,
|
||||
0xb0, 0x87, 0x4a, 0xa5, 0x87, 0x78, 0x10, 0xd2, 0x57, 0x99, 0x43, 0xba, 0x7e, 0xaf, 0x04, 0x21,
|
||||
0x6d, 0x85, 0x39, 0x94, 0x4a, 0xdd, 0xca, 0xfd, 0x10, 0xfc, 0xab, 0xcb, 0xcc, 0xa1, 0x4c, 0xe6,
|
||||
0x46, 0x0a, 0x42, 0xfc, 0x12, 0x73, 0x28, 0x97, 0xbb, 0x16, 0x83, 0x10, 0x5a, 0x64, 0x0e, 0x59,
|
||||
0xd6, 0x25, 0xe9, 0x87, 0x1c, 0xe7, 0xed, 0xd5, 0x75, 0xdf, 0x5f, 0xe0, 0xfa, 0x79, 0x90, 0x0a,
|
||||
0x05, 0x3a, 0x1e, 0x0a, 0x21, 0xd4, 0xc6, 0x83, 0xec, 0xbf, 0x9f, 0xd2, 0xb4, 0x2b, 0x15, 0x06,
|
||||
0xf1, 0x21, 0x50, 0x55, 0x88, 0x0a, 0x61, 0x5c, 0xae, 0xc0, 0x20, 0x3d, 0x04, 0x42, 0x7c, 0x54,
|
||||
0x88, 0xe3, 0xa6, 0xb6, 0x61, 0x4e, 0x21, 0x14, 0xd2, 0xf5, 0x8b, 0x79, 0x59, 0x6e, 0xee, 0x4b,
|
||||
0x52, 0xfd, 0x9c, 0x90, 0x5a, 0x97, 0x90, 0x05, 0x68, 0xee, 0x8c, 0x90, 0x72, 0xc7, 0xdf, 0xee,
|
||||
0x84, 0x94, 0x4e, 0x05, 0x61, 0xf6, 0x44, 0x10, 0xf2, 0xd0, 0xf4, 0x31, 0xc6, 0xe6, 0x11, 0xc6,
|
||||
0x59, 0x28, 0x7d, 0xc8, 0x71, 0xa9, 0x03, 0x98, 0xe1, 0x43, 0x76, 0x18, 0xe4, 0x2f, 0xd9, 0x34,
|
||||
0xd4, 0xea, 0xbd, 0x30, 0x4c, 0x1b, 0x50, 0x3e, 0x0c, 0xf2, 0x17, 0xac, 0x0c, 0x99, 0x9f, 0x0f,
|
||||
0x0f, 0x97, 0x05, 0x4d, 0x84, 0x9f, 0xff, 0xaf, 0x4d, 0x2e, 0x44, 0x8c, 0xfb, 0x00, 0xc6, 0xc7,
|
||||
0xfe, 0xbc, 0x5c, 0x83, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
|
||||
0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x00, 0xac, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0xd6, 0xbb, 0x0d, 0x84,
|
||||
0x40, 0x0c, 0x04, 0xd0, 0x69, 0x82, 0x02, 0x88, 0x68, 0x88, 0xfc, 0x02, 0x3a, 0x25, 0xb2, 0x45,
|
||||
0x39, 0x44, 0x07, 0x81, 0x2f, 0xd8, 0xd5, 0x09, 0xc4, 0x6f, 0x3f, 0x1e, 0x82, 0x89, 0x9f, 0x46,
|
||||
0x13, 0xd8, 0x30, 0x33, 0x30, 0x02, 0x4c, 0x1d, 0xa0, 0x1f, 0x40, 0x5b, 0x33, 0x03, 0x09, 0x91,
|
||||
0x1e, 0x90, 0x05, 0x10, 0x03, 0x64, 0x06, 0xc6, 0x86, 0x85, 0xac, 0x11, 0x89, 0xd1, 0xe1, 0x05,
|
||||
0x44, 0xbe, 0xae, 0x8d, 0x2e, 0x90, 0x15, 0x90, 0xde, 0x6d, 0xa3, 0x27, 0xc4, 0x05, 0x4a, 0x41,
|
||||
0xaa, 0xa1, 0x54, 0xa4, 0x0a, 0xca, 0x41, 0x8a, 0xa1, 0x5c, 0xa4, 0x08, 0x2a, 0x41, 0xb2, 0xa1,
|
||||
0x52, 0x24, 0x0b, 0xaa, 0x41, 0x92, 0xa1, 0x5a, 0x24, 0x09, 0xf2, 0x40, 0x1e, 0x21, 0x2f, 0xe4,
|
||||
0x16, 0xf2, 0x44, 0x2e, 0x21, 0x6f, 0xe4, 0x14, 0x62, 0x20, 0x07, 0x88, 0x85, 0xec, 0x20, 0x26,
|
||||
0xf2, 0x87, 0xd8, 0x48, 0x30, 0x30, 0x36, 0xe1, 0xdc, 0xf2, 0x90, 0x08, 0xe9, 0xc0, 0x46, 0xb6,
|
||||
0x8d, 0xe6, 0x88, 0x2c, 0x0c, 0x64, 0xb3, 0x91, 0xb6, 0xe1, 0xd9, 0x9b, 0x3a, 0xd6, 0x43, 0xf9,
|
||||
0x03, 0x84, 0x61, 0xf2, 0x8b, 0xa0, 0xb8, 0x69, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e,
|
||||
0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_bus_xpm[1] = {{ png, sizeof( png ), "add_bus_xpm" }};
|
||||
|
||||
@@ -8,55 +8,31 @@
|
||||
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, 0xe8, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x95, 0x5b, 0x48, 0x14,
|
||||
0x51, 0x18, 0xc7, 0x77, 0x5b, 0x77, 0x17, 0x33, 0xc4, 0x4c, 0x37, 0x75, 0x57, 0x9b, 0xd9, 0x75,
|
||||
0xd4, 0xd9, 0x73, 0xce, 0x6c, 0x64, 0xa1, 0x54, 0x66, 0x88, 0x15, 0x6a, 0x50, 0x29, 0x51, 0x6a,
|
||||
0x86, 0xf5, 0x54, 0x60, 0x18, 0x44, 0xf5, 0x64, 0xa5, 0xbe, 0x44, 0x46, 0x05, 0x81, 0x0f, 0xd1,
|
||||
0x85, 0x1e, 0x14, 0x4a, 0x23, 0x13, 0xb2, 0x20, 0x2f, 0x89, 0x26, 0x99, 0xa4, 0x26, 0xa9, 0x11,
|
||||
0x14, 0x3e, 0x95, 0x11, 0x44, 0x64, 0x2f, 0x96, 0x38, 0x7d, 0x87, 0xbe, 0x81, 0x29, 0x76, 0xc7,
|
||||
0x11, 0x2f, 0x0f, 0x3f, 0x06, 0xe6, 0x9c, 0x39, 0xbf, 0x73, 0xf9, 0xfe, 0x67, 0x2c, 0xaa, 0xaa,
|
||||
0x5a, 0x96, 0x03, 0xcb, 0xb2, 0x8a, 0x28, 0x55, 0x7b, 0x80, 0x77, 0x1a, 0xe7, 0xd8, 0xcd, 0x1b,
|
||||
0xa3, 0x84, 0x24, 0x2d, 0x85, 0x68, 0x12, 0x50, 0x35, 0xae, 0xd1, 0x9a, 0x8e, 0x71, 0xc6, 0x3e,
|
||||
0x0d, 0x31, 0x96, 0xbe, 0xa4, 0xa2, 0x3a, 0x52, 0xd5, 0x3b, 0xae, 0x28, 0xea, 0x98, 0xa2, 0xfc,
|
||||
0x1c, 0xa4, 0x74, 0xb7, 0xc5, 0x62, 0xb1, 0x2e, 0x58, 0xc4, 0x07, 0xa1, 0x74, 0xf6, 0x8b, 0x5e,
|
||||
0x54, 0x9b, 0x76, 0x66, 0x98, 0x8b, 0x90, 0xdf, 0x03, 0x94, 0x1e, 0x5f, 0xa8, 0x2c, 0xa8, 0x28,
|
||||
0xd3, 0xd7, 0xdc, 0xde, 0xe7, 0xf7, 0x4f, 0xe8, 0x64, 0xea, 0x20, 0x63, 0x17, 0xa1, 0xef, 0x8a,
|
||||
0x45, 0x15, 0x09, 0x42, 0x67, 0x5b, 0x9c, 0xdd, 0x7e, 0xac, 0x3d, 0x2d, 0x6d, 0x44, 0x2f, 0x1b,
|
||||
0x61, 0xac, 0xe1, 0xba, 0x24, 0x39, 0x17, 0x51, 0xd4, 0xd5, 0x06, 0xef, 0xcb, 0xc2, 0x6d, 0xb6,
|
||||
0xe2, 0x16, 0x49, 0x7a, 0xae, 0x97, 0xbd, 0x52, 0x32, 0xda, 0x29, 0xfd, 0x75, 0x94, 0x31, 0xb5,
|
||||
0x7c, 0x2e, 0x02, 0x01, 0xd5, 0x3d, 0x97, 0xe8, 0x31, 0xbc, 0x2f, 0x02, 0xb6, 0x02, 0x3b, 0xee,
|
||||
0x78, 0xbd, 0x4d, 0x9a, 0xa8, 0x97, 0xe5, 0xfc, 0xd0, 0xf7, 0x35, 0xc2, 0xef, 0x9f, 0xc9, 0x33,
|
||||
0x23, 0xe2, 0xd5, 0x96, 0x0c, 0xf8, 0x80, 0xec, 0xba, 0xc4, 0xc4, 0xfa, 0x31, 0xc6, 0x66, 0xba,
|
||||
0x59, 0xce, 0x94, 0x59, 0x91, 0x24, 0x7d, 0xe4, 0x93, 0x5d, 0x09, 0xd8, 0x82, 0x8a, 0xca, 0xa4,
|
||||
0xab, 0x2f, 0x37, 0x45, 0x44, 0x94, 0x42, 0x9b, 0x07, 0x88, 0xc0, 0xe7, 0x96, 0xd3, 0xf1, 0xf1,
|
||||
0xb5, 0xcf, 0x68, 0xce, 0x57, 0xb3, 0x22, 0xb7, 0xbb, 0xa1, 0x12, 0xbe, 0x4b, 0x01, 0x56, 0x05,
|
||||
0x15, 0x9d, 0x4f, 0x3d, 0x35, 0x06, 0xf9, 0x99, 0xbc, 0xe4, 0xf1, 0x64, 0x43, 0x7b, 0x18, 0xe0,
|
||||
0x04, 0xe2, 0x81, 0x8c, 0x9d, 0xd1, 0xf2, 0x49, 0x51, 0xec, 0x6c, 0x16, 0xc5, 0xee, 0x7b, 0xa2,
|
||||
0xd8, 0xd5, 0x24, 0x08, 0x1d, 0x0f, 0x42, 0x11, 0x19, 0xb9, 0xbf, 0x02, 0xbe, 0xd9, 0x0c, 0xac,
|
||||
0x09, 0x29, 0xe2, 0xe7, 0x31, 0xaa, 0x28, 0xdf, 0x7b, 0x64, 0x39, 0x97, 0x97, 0x35, 0xe0, 0x00,
|
||||
0x5c, 0xc0, 0x06, 0x20, 0x0f, 0x28, 0x04, 0x0e, 0x01, 0x47, 0x0c, 0x28, 0xe1, 0xdb, 0x0e, 0xc4,
|
||||
0x18, 0x8a, 0xf0, 0x76, 0x98, 0x1e, 0x20, 0xe4, 0x30, 0xca, 0xec, 0x40, 0x34, 0x20, 0x03, 0x59,
|
||||
0x40, 0x01, 0xb0, 0xd7, 0x80, 0x7c, 0x60, 0x23, 0x10, 0x15, 0x54, 0x94, 0xed, 0x6b, 0xec, 0xea,
|
||||
0x27, 0xe4, 0xb3, 0xae, 0xac, 0x67, 0x21, 0xb0, 0x55, 0x28, 0x0b, 0xc3, 0x3d, 0x5f, 0x0b, 0x24,
|
||||
0x01, 0xa2, 0x01, 0xeb, 0x80, 0x58, 0xdc, 0xfa, 0xe0, 0x81, 0xf5, 0x39, 0x9d, 0x15, 0xdd, 0xb2,
|
||||
0xfc, 0x5e, 0x9f, 0xa1, 0x61, 0xc6, 0x6e, 0x5f, 0x20, 0xc4, 0x81, 0x42, 0x1b, 0xae, 0xd0, 0x61,
|
||||
0x80, 0x1d, 0xfb, 0x59, 0x0d, 0x03, 0x1b, 0x63, 0xb3, 0x95, 0x3e, 0x4d, 0x4d, 0xed, 0xd7, 0xcb,
|
||||
0x86, 0xd8, 0xfa, 0x27, 0x84, 0x4c, 0x97, 0x10, 0xa2, 0x1e, 0x34, 0x41, 0x9c, 0xd9, 0xc0, 0x66,
|
||||
0xc1, 0x9a, 0x77, 0xdd, 0x4f, 0x4e, 0x6e, 0xd3, 0x44, 0x6f, 0x95, 0xc0, 0x92, 0x04, 0x56, 0xc2,
|
||||
0xc0, 0x6e, 0xaf, 0x17, 0x84, 0xbb, 0xfc, 0xac, 0xde, 0xb0, 0xc0, 0x3c, 0x02, 0x3b, 0x51, 0x68,
|
||||
0x18, 0x58, 0x14, 0x15, 0x60, 0x50, 0xf9, 0xc1, 0x27, 0xf2, 0xeb, 0xa8, 0xda, 0xed, 0xbe, 0xfc,
|
||||
0x9a, 0x06, 0xbe, 0x99, 0x15, 0x79, 0x3c, 0x8d, 0x95, 0x38, 0xd9, 0xbf, 0x81, 0x95, 0xe5, 0xa9,
|
||||
0x6a, 0x49, 0xfa, 0x70, 0xcb, 0xeb, 0xed, 0x7b, 0xc8, 0x25, 0x2e, 0x57, 0xcd, 0x15, 0x14, 0xb9,
|
||||
0x75, 0x81, 0x4d, 0x00, 0x32, 0x0f, 0xc4, 0xa6, 0x9c, 0x15, 0xc5, 0xde, 0x47, 0xbc, 0xaf, 0x28,
|
||||
0xbe, 0x68, 0x11, 0xc5, 0x9e, 0xd6, 0x50, 0x44, 0x45, 0x15, 0x9f, 0xf8, 0x27, 0xb0, 0x78, 0xcd,
|
||||
0x50, 0x0c, 0x61, 0x39, 0x92, 0x8f, 0x83, 0x6b, 0x55, 0xe3, 0xc0, 0x92, 0x4e, 0xc7, 0xb6, 0xa2,
|
||||
0x79, 0x07, 0x16, 0x08, 0xc7, 0x25, 0xe6, 0x62, 0xd0, 0xf6, 0x60, 0x20, 0x5d, 0xda, 0xcf, 0x0e,
|
||||
0xfb, 0xd9, 0x71, 0x76, 0x7e, 0x60, 0x1b, 0x9e, 0xe3, 0x3e, 0x03, 0x0a, 0x30, 0xb0, 0xab, 0xb5,
|
||||
0x8a, 0x08, 0xc3, 0xf4, 0xf2, 0xb3, 0xf0, 0x62, 0xd8, 0x12, 0x70, 0x02, 0x56, 0x5d, 0xe5, 0x58,
|
||||
0x75, 0x81, 0x8d, 0x03, 0x04, 0x2c, 0x96, 0x50, 0x08, 0x38, 0x59, 0xa7, 0x7e, 0x80, 0xff, 0x03,
|
||||
0x68, 0x0f, 0xf5, 0xeb, 0xd6, 0xdd, 0x10, 0x0e, 0x13, 0xf0, 0x7e, 0xd6, 0x3f, 0x8d, 0xcc, 0x56,
|
||||
0x2c, 0x13, 0x1d, 0x81, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
|
||||
0x82,
|
||||
0xce, 0x00, 0x00, 0x01, 0x72, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0xb5, 0xb1, 0x9f, 0x9f, 0x5f, 0x03, 0x32, 0x06, 0x89, 0x81, 0x25, 0x7c, 0x7d, 0x7d, 0x6d,
|
||||
0x40, 0xd8, 0xdb, 0xdb, 0xdb, 0x16, 0x86, 0x81, 0x0a, 0xec, 0x60, 0x18, 0x28, 0x67, 0x0f, 0xc3,
|
||||
0xd2, 0xd2, 0xb3, 0x6b, 0x19, 0x18, 0x4e, 0x38, 0x32, 0x30, 0x6c, 0x63, 0x27, 0xd9, 0x22, 0x74,
|
||||
0x09, 0x5c, 0x58, 0x4c, 0x6c, 0xf9, 0x09, 0xa0, 0x25, 0xff, 0xa1, 0xf8, 0x12, 0x03, 0xc3, 0x31,
|
||||
0x0d, 0x9a, 0x58, 0xc4, 0xc1, 0xb1, 0xe7, 0x25, 0x92, 0x45, 0x20, 0xfc, 0x19, 0x88, 0x63, 0xa8,
|
||||
0x6e, 0x91, 0x90, 0xd0, 0xea, 0xf3, 0x68, 0x16, 0x41, 0xf1, 0xc9, 0xd9, 0x40, 0xdf, 0x71, 0x12,
|
||||
0xb4, 0x08, 0x18, 0x27, 0x2e, 0x20, 0xec, 0xe3, 0xe3, 0xe3, 0x0c, 0xc3, 0xc0, 0xf8, 0x70, 0x82,
|
||||
0x61, 0xa0, 0x62, 0x47, 0x10, 0x76, 0x71, 0x89, 0x75, 0xe7, 0xe2, 0xda, 0xbe, 0x15, 0xbb, 0x65,
|
||||
0x88, 0xa0, 0xc4, 0x69, 0x11, 0xa9, 0x18, 0x14, 0x5c, 0xd0, 0x60, 0xfb, 0x8f, 0x2d, 0x28, 0xa9,
|
||||
0x66, 0x11, 0xc4, 0xb2, 0x63, 0x1a, 0x10, 0x5f, 0x60, 0xfa, 0x4e, 0x58, 0x78, 0xd5, 0x59, 0x4f,
|
||||
0xcf, 0xf0, 0x16, 0xaa, 0x58, 0x04, 0xb5, 0x8c, 0x93, 0x81, 0xe1, 0xf8, 0x1c, 0x6c, 0x96, 0x81,
|
||||
0x12, 0x8e, 0xa5, 0x65, 0xde, 0x14, 0xaa, 0x58, 0x44, 0x28, 0x28, 0x99, 0x98, 0x8e, 0xfe, 0xd4,
|
||||
0xd3, 0x6b, 0x58, 0x48, 0x35, 0x8b, 0xf0, 0x05, 0x25, 0xd0, 0x67, 0x2f, 0x48, 0x4e, 0xde, 0x66,
|
||||
0x66, 0xa5, 0xd3, 0x41, 0x1a, 0x81, 0x06, 0x1c, 0x04, 0x26, 0xe9, 0x48, 0x62, 0x82, 0x92, 0x93,
|
||||
0x73, 0xe7, 0x13, 0x92, 0x2d, 0x02, 0x69, 0x42, 0x75, 0x31, 0xc8, 0x50, 0x44, 0xfe, 0x81, 0x61,
|
||||
0x55, 0xd5, 0xde, 0x35, 0xc0, 0x6c, 0xf0, 0x00, 0xe4, 0x28, 0x90, 0xe3, 0xc8, 0x29, 0x19, 0x5e,
|
||||
0xe0, 0xcb, 0x3f, 0x54, 0x2b, 0x19, 0x40, 0x11, 0x0b, 0x8a, 0x60, 0x5c, 0xf9, 0x87, 0xa0, 0x45,
|
||||
0xd4, 0xca, 0x3f, 0xb0, 0xa2, 0x88, 0x8a, 0x25, 0x03, 0xee, 0xfc, 0x03, 0x72, 0x04, 0x2c, 0xff,
|
||||
0x50, 0x31, 0xc3, 0xe2, 0xce, 0x3f, 0xaa, 0xaa, 0x7d, 0xeb, 0xa8, 0x66, 0x11, 0x71, 0x45, 0x51,
|
||||
0x68, 0x0b, 0x15, 0x4b, 0x06, 0xdc, 0x41, 0x09, 0xaa, 0x5a, 0xa8, 0x5a, 0x32, 0xe0, 0x0a, 0x4a,
|
||||
0x50, 0x99, 0x47, 0x75, 0x8b, 0x60, 0x41, 0x89, 0x5c, 0x13, 0x83, 0xaa, 0x7f, 0x9a, 0x58, 0x04,
|
||||
0xc2, 0x5e, 0x5e, 0x21, 0xcd, 0xc0, 0x3c, 0xb7, 0x40, 0x53, 0xb3, 0x73, 0x05, 0x55, 0x4b, 0x6f,
|
||||
0xa2, 0xdb, 0x0c, 0xc3, 0xca, 0x22, 0x00, 0x49, 0x09, 0x08, 0x8b, 0x18, 0xbe, 0x02, 0x9f, 0x00,
|
||||
0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_bus2bus_xpm[1] = {{ png, sizeof( png ), "add_bus2bus_xpm" }};
|
||||
|
||||
@@ -8,53 +8,36 @@
|
||||
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, 0xd2, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x96, 0x4d, 0x68, 0x13,
|
||||
0x41, 0x14, 0xc7, 0xa3, 0x55, 0x2b, 0x22, 0x22, 0xa5, 0xb6, 0x64, 0x77, 0xa3, 0x22, 0x81, 0x26,
|
||||
0x8d, 0x68, 0x76, 0x26, 0xec, 0xa6, 0xf9, 0xb0, 0x11, 0x14, 0x89, 0x8a, 0xa8, 0x10, 0x6c, 0x6d,
|
||||
0x23, 0x8a, 0x08, 0x7a, 0xf3, 0xe0, 0x51, 0x44, 0xf4, 0x2a, 0x78, 0x11, 0xc4, 0xa2, 0x5e, 0xf4,
|
||||
0x50, 0x85, 0x8a, 0x54, 0xaa, 0x55, 0xb0, 0x94, 0x0a, 0x82, 0x25, 0xb4, 0x4d, 0x2f, 0x42, 0x4b,
|
||||
0xf1, 0xa0, 0x2d, 0x9a, 0xec, 0x6c, 0x50, 0x0f, 0x8d, 0x1f, 0xcd, 0xf8, 0x66, 0x9b, 0xc5, 0x6c,
|
||||
0x6d, 0x36, 0x9b, 0x6d, 0xed, 0xe1, 0x4f, 0x92, 0x97, 0x99, 0xf9, 0xcd, 0xbe, 0xff, 0x9b, 0x9d,
|
||||
0xe7, 0xa0, 0x94, 0x3a, 0x56, 0x42, 0x15, 0x07, 0x70, 0x58, 0xf1, 0x08, 0x58, 0x3d, 0xc9, 0x8b,
|
||||
0xe4, 0x06, 0x8f, 0xc8, 0x6b, 0x90, 0xca, 0x63, 0xf2, 0x91, 0x47, 0x4a, 0xaf, 0x80, 0xc8, 0x55,
|
||||
0x4e, 0xcc, 0x1e, 0xd9, 0x86, 0xb3, 0x4e, 0xdb, 0xa0, 0x06, 0xf9, 0x4b, 0x23, 0x2c, 0xda, 0x03,
|
||||
0xa2, 0x16, 0xf4, 0x4b, 0x8c, 0x9e, 0x19, 0x97, 0xc3, 0xc1, 0x94, 0x14, 0x96, 0x86, 0x75, 0xc9,
|
||||
0xad, 0xc1, 0x1e, 0x53, 0x10, 0x27, 0xaa, 0xed, 0x30, 0x59, 0x29, 0x2e, 0xf2, 0x03, 0x76, 0x3e,
|
||||
0x04, 0x9f, 0x37, 0x79, 0x51, 0x49, 0x6e, 0xdd, 0x4d, 0x7c, 0x02, 0x56, 0x64, 0x1e, 0xab, 0x17,
|
||||
0x04, 0x4c, 0xee, 0x42, 0x7c, 0x8c, 0x8d, 0x13, 0x43, 0xa7, 0xa9, 0xb7, 0xeb, 0xc4, 0x6c, 0xf3,
|
||||
0xb3, 0x7d, 0x13, 0xbe, 0x97, 0x91, 0xb4, 0xaf, 0x2f, 0x92, 0x96, 0x5a, 0xa4, 0x91, 0x45, 0x41,
|
||||
0xf0, 0x6b, 0x35, 0x4c, 0x7a, 0xac, 0xef, 0x54, 0x40, 0x6a, 0xca, 0x15, 0x50, 0x77, 0x5a, 0x48,
|
||||
0xef, 0x51, 0x31, 0x94, 0xfc, 0xe9, 0xb9, 0xd7, 0x49, 0x9b, 0x1e, 0x75, 0x14, 0xbc, 0xcf, 0x0f,
|
||||
0x4f, 0x7b, 0x07, 0x4c, 0x40, 0x1c, 0x26, 0x97, 0xf4, 0xa7, 0x80, 0xdd, 0x5f, 0x76, 0xc4, 0xe8,
|
||||
0x1a, 0xab, 0x66, 0x4b, 0xd1, 0xf0, 0xb0, 0xf7, 0xe1, 0xf1, 0x5c, 0x53, 0xf7, 0x3c, 0xac, 0xb9,
|
||||
0x7f, 0xff, 0xe4, 0xa2, 0x20, 0xb6, 0x73, 0x30, 0x38, 0xaf, 0x81, 0x44, 0xe5, 0x54, 0xb5, 0x55,
|
||||
0x25, 0x47, 0xe5, 0xb7, 0x2c, 0x5d, 0x9e, 0xde, 0x63, 0x84, 0xc1, 0x3c, 0xdd, 0x6d, 0x79, 0x29,
|
||||
0x18, 0x1c, 0x33, 0x80, 0x30, 0xa6, 0x6b, 0x01, 0x32, 0xa2, 0xa5, 0x0b, 0xab, 0x4f, 0xed, 0x94,
|
||||
0x2f, 0x80, 0xfa, 0xa4, 0x3d, 0x50, 0x04, 0xad, 0xa1, 0x94, 0x18, 0x6d, 0xcf, 0xfb, 0x23, 0x49,
|
||||
0x8a, 0x42, 0x89, 0x4f, 0x06, 0x10, 0x2f, 0xaa, 0xe7, 0x8b, 0x29, 0xcb, 0x36, 0xee, 0xfa, 0xdc,
|
||||
0x60, 0x07, 0x14, 0x8b, 0xc5, 0xd6, 0x63, 0x8c, 0xeb, 0x99, 0x76, 0xe0, 0x81, 0x43, 0x2e, 0xf4,
|
||||
0x61, 0x4e, 0xc0, 0x33, 0x05, 0x27, 0x52, 0xbc, 0x7f, 0x41, 0x48, 0x79, 0xc0, 0x40, 0xe0, 0xd1,
|
||||
0x95, 0xe5, 0x3a, 0xa0, 0x70, 0xee, 0x5e, 0x69, 0x6b, 0x8a, 0xe4, 0x6c, 0x09, 0x88, 0xbc, 0x67,
|
||||
0x41, 0x17, 0x22, 0x07, 0xca, 0x9b, 0x2d, 0xf7, 0x33, 0x73, 0x0d, 0x82, 0x98, 0x09, 0xe8, 0x9a,
|
||||
0x96, 0x25, 0xac, 0xdc, 0xd6, 0x40, 0x75, 0x32, 0xd9, 0x04, 0x81, 0x82, 0xe6, 0x4f, 0xcb, 0xd7,
|
||||
0xba, 0xb2, 0x1e, 0xc8, 0x72, 0x9a, 0x95, 0x6c, 0xa9, 0x58, 0xac, 0xdc, 0x78, 0x21, 0xa0, 0x1e,
|
||||
0xd4, 0x8f, 0x88, 0x06, 0xe2, 0x71, 0x76, 0xef, 0xbc, 0x3f, 0xea, 0xa4, 0xa9, 0xd9, 0x0c, 0x34,
|
||||
0x14, 0x31, 0xc8, 0x0c, 0xc4, 0xe1, 0x6f, 0xf5, 0xfa, 0x51, 0x71, 0xbb, 0x69, 0xed, 0xca, 0x81,
|
||||
0xaa, 0x4a, 0x5d, 0x15, 0xa0, 0x7f, 0x52, 0x67, 0xb9, 0x18, 0x22, 0xc1, 0x41, 0x28, 0x80, 0x51,
|
||||
0x83, 0x20, 0x66, 0xb9, 0x18, 0xac, 0x96, 0x77, 0x22, 0x91, 0xa8, 0x89, 0xc7, 0xe3, 0xb5, 0xa5,
|
||||
0x62, 0xb1, 0xea, 0xca, 0x7b, 0x19, 0x0e, 0xac, 0xc1, 0x9f, 0x80, 0x1a, 0x86, 0xb5, 0xe6, 0x98,
|
||||
0x25, 0x86, 0x03, 0x5b, 0xfa, 0x0a, 0xe2, 0x10, 0x79, 0xb2, 0x14, 0xc8, 0x16, 0x5f, 0x66, 0x23,
|
||||
0xac, 0x33, 0x55, 0xf4, 0xe7, 0x96, 0xe9, 0x4b, 0x15, 0x06, 0x74, 0xd8, 0x7e, 0x1a, 0x44, 0xba,
|
||||
0x8a, 0xd9, 0x99, 0xe0, 0xf0, 0xcc, 0x86, 0x4a, 0xd7, 0xc4, 0x2c, 0xfb, 0xee, 0x48, 0xd0, 0x1a,
|
||||
0xab, 0x80, 0xed, 0xfe, 0xdc, 0x66, 0x98, 0x77, 0xbf, 0x38, 0xff, 0x37, 0x28, 0x58, 0xf6, 0x2a,
|
||||
0x5f, 0x78, 0xf1, 0x81, 0xa1, 0xef, 0xd8, 0x8d, 0x5a, 0xf1, 0x29, 0xa0, 0x6f, 0x80, 0xf1, 0xd3,
|
||||
0xfa, 0xb5, 0x0e, 0xba, 0x68, 0xa9, 0x67, 0x58, 0x78, 0x95, 0x43, 0x4a, 0x07, 0x59, 0x73, 0x02,
|
||||
0xf1, 0x36, 0x01, 0x65, 0xdc, 0xbc, 0x3f, 0xe7, 0x87, 0xeb, 0xfd, 0x1c, 0xfc, 0x77, 0x07, 0x1a,
|
||||
0x95, 0xd1, 0x92, 0xde, 0x61, 0xdc, 0x89, 0xb2, 0xf8, 0xbf, 0x36, 0x27, 0x00, 0xbc, 0xee, 0xf3,
|
||||
0xd1, 0x75, 0xb6, 0xdb, 0x2d, 0x56, 0x9e, 0x50, 0x1c, 0x9d, 0x5a, 0x73, 0x82, 0xc8, 0x1b, 0xd0,
|
||||
0x77, 0x78, 0xc2, 0x0c, 0x98, 0xfe, 0x82, 0x2d, 0xce, 0xfa, 0x85, 0x25, 0xb5, 0x5b, 0x65, 0x27,
|
||||
0x38, 0xe8, 0x2a, 0x3b, 0xd5, 0xf8, 0x07, 0x4e, 0x6c, 0x94, 0x21, 0x43, 0x7b, 0xc5, 0x80, 0x00,
|
||||
0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x01, 0xc7, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xcd, 0x96, 0x31, 0x4f, 0xc2,
|
||||
0x40, 0x14, 0xc7, 0xdf, 0x60, 0x1c, 0xf8, 0x06, 0x30, 0xba, 0x98, 0x10, 0x07, 0x47, 0x07, 0xd8,
|
||||
0x8c, 0x33, 0x2e, 0x6a, 0x24, 0xd1, 0x04, 0x1a, 0x6a, 0x83, 0xcc, 0xc6, 0xad, 0x09, 0xa1, 0x89,
|
||||
0x13, 0x7c, 0x03, 0x13, 0x77, 0xc7, 0x6e, 0x26, 0x26, 0x86, 0x44, 0x34, 0x2c, 0x0c, 0x4e, 0x4e,
|
||||
0x4e, 0x7c, 0x02, 0x88, 0x21, 0x94, 0xf3, 0xfe, 0x77, 0x57, 0x3d, 0xa0, 0x85, 0xaa, 0xa5, 0x3a,
|
||||
0xfc, 0xd3, 0xe6, 0xda, 0x7b, 0xbf, 0xfe, 0xdf, 0x7b, 0x77, 0x57, 0x62, 0x8c, 0x51, 0x12, 0x5a,
|
||||
0xfe, 0x02, 0x75, 0xd3, 0x44, 0x4f, 0x05, 0xa2, 0x4e, 0x9d, 0xcb, 0xe5, 0xea, 0x2b, 0xb9, 0x72,
|
||||
0x0c, 0xcf, 0xba, 0xe9, 0x1f, 0x83, 0x88, 0x5e, 0xd6, 0x89, 0x1e, 0x1b, 0x3c, 0xd8, 0x98, 0x8b,
|
||||
0x2d, 0x11, 0xde, 0x71, 0x8a, 0xc5, 0x8b, 0x4d, 0xd3, 0x34, 0x6b, 0x96, 0x65, 0x6d, 0x44, 0x02,
|
||||
0x11, 0x3d, 0x6f, 0xf3, 0x89, 0x3d, 0x15, 0xc4, 0xe3, 0xc0, 0x3b, 0x04, 0x92, 0x5f, 0xdf, 0xce,
|
||||
0x48, 0x09, 0x97, 0x8e, 0x7a, 0xe6, 0xe5, 0x77, 0xaf, 0xd8, 0xe9, 0x99, 0xe9, 0x15, 0x1a, 0x47,
|
||||
0xef, 0xa5, 0xaa, 0x31, 0x28, 0xd5, 0xca, 0xd7, 0x0b, 0x41, 0x7c, 0x52, 0x85, 0x6b, 0xa4, 0x20,
|
||||
0xaf, 0x5c, 0xb9, 0x65, 0x69, 0xc9, 0x66, 0x6f, 0x0e, 0x38, 0x64, 0xb2, 0x75, 0x9f, 0x67, 0xd9,
|
||||
0x87, 0x1c, 0xc3, 0x15, 0x30, 0xdd, 0x59, 0x90, 0x13, 0x40, 0x26, 0x5c, 0x4d, 0x9e, 0xfb, 0x54,
|
||||
0x94, 0x42, 0x23, 0x5d, 0xfb, 0xce, 0xe1, 0x10, 0x10, 0x5f, 0x70, 0x86, 0xf1, 0x39, 0x90, 0xac,
|
||||
0xc9, 0x67, 0xba, 0x9a, 0xdf, 0xe9, 0x28, 0x7c, 0x39, 0x1c, 0xe8, 0x8e, 0x90, 0x46, 0xd4, 0x2c,
|
||||
0x00, 0x24, 0x0a, 0xaf, 0xd2, 0x15, 0xcd, 0x89, 0x2e, 0xd4, 0x04, 0x30, 0x38, 0x43, 0x1a, 0x51,
|
||||
0x33, 0xd4, 0x70, 0x0a, 0x24, 0x5b, 0x58, 0x74, 0x8e, 0x17, 0xa5, 0x26, 0x8b, 0x9c, 0x21, 0x5d,
|
||||
0xa8, 0x99, 0x8a, 0x35, 0xf6, 0x5b, 0x5f, 0x81, 0x44, 0x07, 0x31, 0x74, 0x50, 0x6c, 0x0b, 0x54,
|
||||
0x76, 0x23, 0x43, 0x6c, 0x0d, 0x24, 0x16, 0xe3, 0x94, 0xd5, 0x59, 0xd9, 0xb6, 0xbd, 0x66, 0x58,
|
||||
0x46, 0xb5, 0x7c, 0x6e, 0xbc, 0x41, 0xb8, 0xc7, 0x58, 0x38, 0x08, 0xad, 0x2f, 0x62, 0xd6, 0x75,
|
||||
0x90, 0xab, 0xd3, 0x83, 0x84, 0xc0, 0xc7, 0x97, 0x27, 0x83, 0x9d, 0xdb, 0x3d, 0x06, 0xe1, 0x1e,
|
||||
0x63, 0xe1, 0x20, 0x3f, 0x4b, 0x1d, 0x57, 0x07, 0xf5, 0xe5, 0x60, 0x3b, 0x13, 0x36, 0x11, 0x2e,
|
||||
0x00, 0xf0, 0xdb, 0x17, 0xf7, 0x18, 0x0b, 0x07, 0x61, 0x51, 0x0b, 0x50, 0xff, 0x4f, 0x40, 0x89,
|
||||
0xa5, 0x2e, 0xa9, 0x66, 0x48, 0xac, 0xbd, 0xe3, 0x59, 0xb0, 0x9a, 0x9b, 0x5c, 0xe0, 0x82, 0x8d,
|
||||
0x63, 0x0b, 0xd2, 0x0e, 0xca, 0x94, 0xda, 0xf5, 0xe7, 0xb7, 0xa0, 0xdf, 0x6e, 0xaa, 0x33, 0x6e,
|
||||
0x5a, 0x2a, 0x46, 0x0f, 0x31, 0x63, 0x3d, 0x26, 0x34, 0x27, 0x2d, 0x35, 0x77, 0x84, 0x58, 0xb1,
|
||||
0x1f, 0x7c, 0xaa, 0x26, 0x7e, 0xba, 0x30, 0xb7, 0xb2, 0xb2, 0xa3, 0xfc, 0x2b, 0x5d, 0xd3, 0x4e,
|
||||
0x56, 0xf2, 0x73, 0xa2, 0xd7, 0xe4, 0xff, 0xfd, 0x6e, 0xc5, 0xad, 0x0f, 0xa2, 0x2a, 0x66, 0x8d,
|
||||
0xf7, 0xe6, 0x8a, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_circle_xpm[1] = {{ png, sizeof( png ), "add_circle_xpm" }};
|
||||
|
||||
@@ -8,47 +8,29 @@
|
||||
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, 0x68, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x96, 0xcf, 0x6a, 0x13,
|
||||
0x51, 0x14, 0xc6, 0x83, 0x56, 0xd1, 0x9d, 0x2f, 0x50, 0x95, 0x5a, 0x15, 0x7c, 0x8a, 0x2c, 0x9a,
|
||||
0x76, 0xfe, 0x27, 0x33, 0xed, 0xb4, 0xc6, 0x46, 0xab, 0xc4, 0x4e, 0xba, 0x70, 0x25, 0xa9, 0x48,
|
||||
0x77, 0x7d, 0x00, 0x51, 0x0b, 0x4a, 0x41, 0xc4, 0xb8, 0xd0, 0x85, 0x25, 0x26, 0xad, 0x92, 0x50,
|
||||
0x8a, 0x22, 0x2a, 0x22, 0xd9, 0x76, 0x27, 0xb8, 0x90, 0x2c, 0x74, 0x15, 0x5c, 0x0c, 0x34, 0xa3,
|
||||
0xc2, 0x71, 0xbe, 0xcb, 0xdc, 0xe1, 0x66, 0x3a, 0x13, 0x04, 0x49, 0x70, 0x61, 0xe0, 0x63, 0xce,
|
||||
0xdc, 0xdf, 0x39, 0xf7, 0x63, 0xee, 0xcc, 0x3d, 0x37, 0x29, 0x22, 0x4a, 0x0d, 0x43, 0x3d, 0x37,
|
||||
0xa6, 0x9a, 0xf9, 0xa4, 0xc8, 0x53, 0x3f, 0xb9, 0xb2, 0x4a, 0xe6, 0x0b, 0x67, 0x96, 0x3a, 0xb1,
|
||||
0xab, 0xc9, 0x93, 0x7b, 0x5c, 0xc8, 0xe5, 0x0c, 0x79, 0x49, 0x75, 0xb1, 0x46, 0x48, 0x72, 0x97,
|
||||
0x47, 0xc8, 0xbb, 0x71, 0x80, 0x49, 0x92, 0x24, 0x12, 0x59, 0xa7, 0x7c, 0x98, 0xdc, 0xe5, 0x43,
|
||||
0x4c, 0x22, 0x43, 0xcc, 0x6b, 0xa2, 0x75, 0x89, 0x46, 0xf5, 0xc5, 0x71, 0xba, 0x3c, 0x23, 0x51,
|
||||
0xd5, 0x39, 0xb3, 0xcf, 0xa8, 0xe6, 0x9c, 0x66, 0xac, 0xe6, 0x8c, 0xef, 0x33, 0x42, 0xfe, 0xbc,
|
||||
0x29, 0xd3, 0xc6, 0xe2, 0xd9, 0x64, 0x23, 0xcb, 0xb2, 0x76, 0x15, 0x45, 0xc1, 0x63, 0xd3, 0xc2,
|
||||
0xb4, 0x4c, 0x8f, 0xd7, 0xd7, 0xc8, 0xce, 0xca, 0xac, 0x80, 0x8d, 0x07, 0xec, 0x82, 0x3f, 0xd1,
|
||||
0xa3, 0xfb, 0x77, 0xd8, 0x55, 0x64, 0x88, 0xe7, 0x2d, 0x99, 0x1e, 0xde, 0xbb, 0xdd, 0xc3, 0x0c,
|
||||
0xc3, 0xf8, 0x9a, 0x4e, 0xa7, 0x8f, 0x84, 0x46, 0x9a, 0xa6, 0xed, 0x75, 0x3a, 0x1d, 0xd2, 0x55,
|
||||
0x85, 0x1a, 0xa5, 0x93, 0xe4, 0xcc, 0x4e, 0xd1, 0xcb, 0xd2, 0x29, 0x56, 0xe0, 0x79, 0x1e, 0x13,
|
||||
0xd8, 0x0b, 0x67, 0x2c, 0x60, 0x63, 0x3d, 0x0c, 0xf1, 0xce, 0xd2, 0x71, 0xba, 0x76, 0x7e, 0x92,
|
||||
0xb6, 0x4b, 0x27, 0x42, 0xe6, 0x1b, 0x75, 0x73, 0xb9, 0xdc, 0xb1, 0x1e, 0x23, 0xd7, 0x75, 0x49,
|
||||
0x53, 0x65, 0xb6, 0xc6, 0x74, 0x33, 0xc5, 0x84, 0x82, 0x8f, 0xcd, 0x26, 0x93, 0xa6, 0x24, 0x33,
|
||||
0xb6, 0x54, 0xc1, 0x38, 0x67, 0xf8, 0x25, 0x1a, 0x15, 0x6c, 0xd3, 0x9f, 0x50, 0x0a, 0x35, 0x67,
|
||||
0x19, 0xf4, 0x7e, 0x6b, 0x8b, 0xa9, 0x1f, 0x43, 0x1c, 0x65, 0x49, 0x46, 0xdd, 0x56, 0xab, 0x45,
|
||||
0x1f, 0x1a, 0x0d, 0x7a, 0x53, 0xab, 0x85, 0x7a, 0x5b, 0xaf, 0x87, 0x93, 0xbd, 0xdb, 0xdc, 0x4c,
|
||||
0x64, 0x88, 0xa3, 0x2c, 0xd6, 0x48, 0x55, 0x55, 0xaf, 0x58, 0x2c, 0xd2, 0xea, 0xca, 0x4a, 0x58,
|
||||
0xfc, 0xb7, 0x4a, 0x5c, 0xba, 0x76, 0xbb, 0x4d, 0xba, 0xa6, 0xd1, 0xeb, 0x6a, 0x75, 0xb0, 0x46,
|
||||
0x55, 0xdf, 0x60, 0xa1, 0x50, 0x18, 0xec, 0x13, 0xf9, 0xdf, 0xfc, 0x8f, 0x72, 0xb9, 0x4c, 0xcf,
|
||||
0x2b, 0x95, 0xc1, 0x2f, 0x1d, 0xbe, 0x3a, 0x7c, 0xaa, 0x43, 0x31, 0xba, 0x34, 0x67, 0xb1, 0x3d,
|
||||
0xc0, 0x95, 0x9f, 0xce, 0x86, 0x85, 0x17, 0x67, 0x2d, 0xb6, 0x97, 0xb8, 0xae, 0xe4, 0x67, 0x42,
|
||||
0x86, 0x3c, 0xb1, 0x0e, 0xb9, 0x7d, 0x8d, 0xe2, 0x36, 0x25, 0x9f, 0x4c, 0x6c, 0x9c, 0x68, 0xbc,
|
||||
0xc8, 0x15, 0x19, 0xaf, 0x01, 0x07, 0xeb, 0x6b, 0x84, 0x36, 0xf3, 0xcc, 0x6f, 0x8a, 0x62, 0x73,
|
||||
0xf4, 0xba, 0x5d, 0x26, 0xc4, 0x1b, 0x01, 0x43, 0x0e, 0x72, 0x45, 0xf6, 0xf4, 0xea, 0x39, 0xd6,
|
||||
0x1f, 0x9f, 0xf8, 0x57, 0xb0, 0x58, 0x23, 0xd3, 0x34, 0x3f, 0xfb, 0x7b, 0xe9, 0x17, 0x1a, 0x27,
|
||||
0x26, 0xaa, 0xac, 0xdf, 0x0d, 0x9b, 0x23, 0xc6, 0x21, 0xc4, 0xbc, 0xa9, 0x22, 0x07, 0xb9, 0x51,
|
||||
0xf6, 0x60, 0xed, 0x16, 0xbb, 0x72, 0xa6, 0xeb, 0xfa, 0x77, 0xdb, 0xb6, 0x8f, 0x86, 0x46, 0xfe,
|
||||
0xcd, 0x41, 0x74, 0x59, 0x1c, 0x05, 0x4d, 0xbf, 0x29, 0x8a, 0xcd, 0x11, 0xe3, 0x10, 0xe2, 0xed,
|
||||
0x80, 0x21, 0x07, 0xb9, 0x22, 0x7b, 0xb5, 0x34, 0x4a, 0xd7, 0xf3, 0x13, 0xb4, 0x53, 0x1a, 0x15,
|
||||
0xd9, 0x48, 0xe2, 0x79, 0x14, 0x7d, 0x47, 0xe2, 0x99, 0x23, 0xbe, 0x07, 0xe4, 0xfe, 0x09, 0x8b,
|
||||
0x35, 0xc2, 0x11, 0x2c, 0x7e, 0x3d, 0x86, 0x92, 0xf9, 0xc6, 0x19, 0x62, 0x91, 0x89, 0xc7, 0x75,
|
||||
0x3f, 0x16, 0x6b, 0x34, 0xb4, 0x3f, 0x27, 0xff, 0x8d, 0xfe, 0x49, 0xa3, 0xdf, 0xf4, 0x5e, 0xec,
|
||||
0x57, 0x87, 0xb9, 0x43, 0x28, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
|
||||
0x82,
|
||||
0xce, 0x00, 0x00, 0x01, 0x56, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0x3d, 0x30, 0x86, 0x40, 0x03, 0x03, 0x43, 0x12, 0x10, 0x37, 0x03, 0x31, 0x17, 0xad, 0x2d,
|
||||
0x3a, 0x00, 0xc4, 0xff, 0x9b, 0x98, 0x99, 0xef, 0x01, 0x69, 0x1b, 0x9a, 0x5a, 0xd4, 0x2f, 0x2f,
|
||||
0xff, 0x7f, 0x82, 0xbc, 0xfc, 0x9f, 0x46, 0x46, 0xc6, 0x7f, 0x40, 0x7e, 0x3f, 0x35, 0x7c, 0x87,
|
||||
0xd5, 0xa2, 0x79, 0x76, 0x76, 0xff, 0xbf, 0x7e, 0xf8, 0xf0, 0x7f, 0x4b, 0x76, 0xf6, 0xff, 0x06,
|
||||
0x46, 0x46, 0xaa, 0xf8, 0x0e, 0xa7, 0x45, 0xbf, 0x7e, 0xfd, 0x02, 0xe3, 0x3b, 0x7b, 0xf7, 0x52,
|
||||
0xc5, 0x77, 0x04, 0x2d, 0x02, 0x61, 0x90, 0xef, 0xb6, 0xe6, 0xe4, 0x50, 0xe4, 0x3b, 0xa2, 0x2c,
|
||||
0xa2, 0x86, 0xef, 0x60, 0xc9, 0xf9, 0x00, 0x12, 0x7e, 0x3f, 0x49, 0x55, 0x15, 0xab, 0x45, 0x94,
|
||||
0xf8, 0x0e, 0x64, 0x51, 0x1a, 0x86, 0x45, 0x6a, 0x6a, 0x60, 0x43, 0xdf, 0x3d, 0x7c, 0xf8, 0xff,
|
||||
0xf9, 0xe5, 0xcb, 0x28, 0xf8, 0xdb, 0xc7, 0x8f, 0x60, 0xb9, 0xbb, 0xfb, 0xf6, 0xfd, 0x9f, 0xa0,
|
||||
0xa0, 0x40, 0xb4, 0xef, 0x70, 0x06, 0xdd, 0x8f, 0x6f, 0xdf, 0xfe, 0xb7, 0xf1, 0xf2, 0xfe, 0x07,
|
||||
0xe5, 0x29, 0x64, 0x7c, 0xa8, 0xbd, 0x1d, 0xd5, 0x77, 0xb9, 0xb9, 0x44, 0xf9, 0x0e, 0x6f, 0x1c,
|
||||
0xfd, 0xf8, 0xfa, 0xf5, 0xff, 0xb7, 0x4f, 0x9f, 0x50, 0x30, 0xb6, 0xe0, 0x24, 0xc6, 0x77, 0x44,
|
||||
0x25, 0x86, 0xc7, 0xa7, 0x4e, 0x81, 0x7d, 0x88, 0x2b, 0xde, 0x90, 0x7d, 0x07, 0xb6, 0x8c, 0x91,
|
||||
0xf1, 0x2b, 0xd0, 0x9c, 0x23, 0x48, 0xd1, 0x91, 0x46, 0x94, 0x45, 0x9d, 0x42, 0x42, 0xff, 0xef,
|
||||
0xee, 0xdf, 0x4f, 0x89, 0x45, 0x49, 0x78, 0x2d, 0xfa, 0xfc, 0xe6, 0xcd, 0xff, 0xf7, 0x8f, 0x1e,
|
||||
0xfd, 0x6f, 0x07, 0xc6, 0xd5, 0xe5, 0x95, 0x2b, 0xc1, 0x6c, 0x6c, 0x3e, 0xa3, 0x28, 0xe8, 0x70,
|
||||
0x25, 0x86, 0x83, 0xad, 0xad, 0xe4, 0x25, 0x06, 0x7c, 0xf9, 0xe8, 0xd3, 0xab, 0x57, 0x18, 0x3e,
|
||||
0xfa, 0xf9, 0xe3, 0x07, 0x79, 0xc9, 0x1b, 0x5f, 0x3e, 0x82, 0xc7, 0x91, 0xb0, 0x30, 0xb8, 0x54,
|
||||
0xa0, 0x28, 0xc3, 0x12, 0x93, 0x18, 0x1e, 0x1e, 0x3f, 0xfe, 0xff, 0xe7, 0xf7, 0xef, 0x94, 0x15,
|
||||
0x41, 0x83, 0xa6, 0x50, 0xa5, 0x79, 0x35, 0x41, 0x97, 0x8a, 0x8f, 0x6e, 0x55, 0x39, 0xbd, 0x1a,
|
||||
0x27, 0xa0, 0x7c, 0xd5, 0x41, 0xf3, 0xe6, 0x16, 0xad, 0x30, 0x00, 0xee, 0x60, 0x35, 0xe4, 0x92,
|
||||
0x65, 0x02, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_component_xpm[1] = {{ png, sizeof( png ), "add_component_xpm" }};
|
||||
|
||||
@@ -8,48 +8,33 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||
0xce, 0x00, 0x00, 0x02, 0x7e, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0xd6, 0x41, 0x88, 0x55,
|
||||
0x55, 0x1c, 0xc7, 0xf1, 0xcf, 0x7b, 0xf3, 0x9a, 0x19, 0xa7, 0x99, 0x67, 0x38, 0x8a, 0x4d, 0x23,
|
||||
0x8d, 0x23, 0x9a, 0xf8, 0xe6, 0xbd, 0x73, 0x89, 0x49, 0x43, 0x89, 0x4c, 0x2d, 0xd2, 0x45, 0xd1,
|
||||
0x42, 0x49, 0xb3, 0xb1, 0x48, 0x28, 0xca, 0x48, 0x4a, 0x0d, 0x87, 0x79, 0x77, 0x32, 0xca, 0x30,
|
||||
0x30, 0x5b, 0x24, 0x39, 0x44, 0x41, 0x2d, 0xda, 0xa4, 0xa5, 0xe0, 0x26, 0x71, 0x23, 0x4d, 0x09,
|
||||
0x15, 0xb4, 0x08, 0xf1, 0x09, 0x41, 0x8b, 0x16, 0xad, 0x5a, 0x04, 0x31, 0x53, 0x12, 0x7a, 0x5a,
|
||||
0x78, 0xe7, 0x31, 0x33, 0x22, 0x91, 0x3e, 0x23, 0xc2, 0xc5, 0x17, 0xce, 0xbd, 0x8b, 0xfb, 0xbd,
|
||||
0xbf, 0xff, 0xff, 0x7f, 0xee, 0xb9, 0x62, 0x8c, 0xfe, 0x0d, 0xdc, 0x10, 0xfd, 0xa7, 0x44, 0x86,
|
||||
0xad, 0x31, 0xe4, 0x1e, 0xe4, 0xae, 0x9b, 0xc8, 0x1e, 0x45, 0xa9, 0xdf, 0xa5, 0xa2, 0x21, 0x7b,
|
||||
0x27, 0x64, 0xd7, 0x23, 0xcd, 0x13, 0x52, 0x51, 0x2a, 0x7a, 0xc1, 0x21, 0xcc, 0x46, 0xa1, 0xf1,
|
||||
0xa2, 0xaa, 0x13, 0x75, 0xd1, 0x0a, 0xef, 0x61, 0x2d, 0x66, 0x36, 0x56, 0x32, 0x68, 0x8e, 0xd4,
|
||||
0x9f, 0x52, 0xd1, 0xa0, 0x71, 0x05, 0x07, 0xb0, 0x09, 0x9d, 0x8d, 0x4e, 0xb3, 0xad, 0x9e, 0x66,
|
||||
0xc0, 0xf7, 0xd8, 0x87, 0x75, 0x28, 0x36, 0x56, 0x94, 0x1a, 0xad, 0x8b, 0xfa, 0x1d, 0x43, 0x8a,
|
||||
0x04, 0xcd, 0xd7, 0xfc, 0xf0, 0xb3, 0x95, 0xca, 0xbd, 0xe7, 0x92, 0x64, 0xdf, 0xd7, 0xfd, 0x7d,
|
||||
0x9f, 0x0c, 0x6c, 0x9e, 0x7d, 0xb1, 0xb8, 0xbb, 0x29, 0xda, 0x6d, 0x5c, 0x93, 0x77, 0xf0, 0x1c,
|
||||
0xba, 0x91, 0xbf, 0x26, 0x49, 0x2d, 0x49, 0x0e, 0xd6, 0x42, 0x88, 0x93, 0x39, 0xb5, 0x6c, 0x49,
|
||||
0x5c, 0xf6, 0x48, 0xfb, 0x0f, 0x78, 0x13, 0x0f, 0x61, 0x26, 0x72, 0x57, 0x2d, 0x39, 0x97, 0x24,
|
||||
0x4f, 0x4d, 0x16, 0x9c, 0x4e, 0x4a, 0x17, 0x26, 0xd6, 0xa3, 0xa1, 0x34, 0xd6, 0x59, 0x28, 0xec,
|
||||
0xcd, 0xca, 0xd6, 0x32, 0x65, 0x1f, 0xa9, 0x7a, 0x58, 0xd5, 0x7a, 0xc3, 0x1e, 0x95, 0x7a, 0xcc,
|
||||
0xb0, 0x01, 0xa9, 0x27, 0x0d, 0xdb, 0x2a, 0xf5, 0xb4, 0xaa, 0x67, 0xa5, 0x9e, 0x57, 0xb5, 0x5d,
|
||||
0xea, 0xa5, 0xd1, 0xa5, 0xa5, 0x9f, 0x6b, 0x21, 0xc4, 0xe3, 0xe5, 0xc5, 0x63, 0x2d, 0x1d, 0xf9,
|
||||
0xdf, 0xdc, 0x24, 0xae, 0x28, 0x77, 0xd4, 0xc5, 0x3b, 0xbb, 0xba, 0x3e, 0x46, 0x0f, 0xf2, 0x53,
|
||||
0x45, 0xa9, 0x3f, 0xea, 0x8d, 0xfc, 0x1b, 0x0a, 0x43, 0xb9, 0x78, 0x26, 0xa9, 0xc4, 0x5a, 0x08,
|
||||
0x71, 0x79, 0xa9, 0x3d, 0xe2, 0x12, 0x4d, 0xe2, 0x57, 0x95, 0x4b, 0xc9, 0x46, 0x7a, 0x7b, 0x4f,
|
||||
0xe1, 0x0e, 0x14, 0xae, 0x5a, 0x24, 0x15, 0xbf, 0x5c, 0x5a, 0x8a, 0xb5, 0x10, 0xe2, 0xf6, 0x3b,
|
||||
0x6f, 0xad, 0x8b, 0x5a, 0xe7, 0xe4, 0xeb, 0x89, 0xf6, 0x74, 0x77, 0x9f, 0xc4, 0x1a, 0xb4, 0xd7,
|
||||
0x7b, 0x84, 0x9c, 0x17, 0xbd, 0x6c, 0x83, 0x0f, 0xac, 0x73, 0xd4, 0x83, 0x8e, 0x79, 0xc0, 0x51,
|
||||
0xab, 0x7d, 0x6a, 0x95, 0x23, 0xee, 0x73, 0x38, 0xe3, 0xc8, 0x04, 0xef, 0xf7, 0x2f, 0xf8, 0xa9,
|
||||
0x16, 0x42, 0x3c, 0x1b, 0x42, 0x1c, 0x5c, 0x78, 0xdb, 0xaf, 0xf7, 0xcf, 0x2b, 0xfe, 0xf2, 0x79,
|
||||
0x79, 0xf1, 0xf9, 0xec, 0xde, 0xc5, 0x95, 0x1d, 0x1d, 0x1f, 0x61, 0x03, 0x66, 0x4d, 0x15, 0x31,
|
||||
0x17, 0x5b, 0xb3, 0x69, 0x39, 0x30, 0x8d, 0xb7, 0xa6, 0x33, 0xbf, 0xa5, 0x65, 0xe4, 0xdb, 0x72,
|
||||
0x79, 0x7c, 0xfa, 0xd4, 0xd5, 0x42, 0x88, 0x6f, 0xf7, 0xf4, 0x7c, 0x87, 0xfd, 0x57, 0x12, 0xdd,
|
||||
0x92, 0x45, 0xdd, 0x8c, 0x2d, 0x18, 0xc0, 0xe3, 0xd9, 0xf5, 0x26, 0x6c, 0x9c, 0xc6, 0x96, 0xa4,
|
||||
0xad, 0xed, 0xb5, 0xcf, 0x16, 0x2d, 0xfa, 0xf1, 0x4c, 0xa5, 0x72, 0xa1, 0x16, 0x42, 0xfc, 0xa6,
|
||||
0xaf, 0x6f, 0x6c, 0x57, 0x57, 0xd7, 0x17, 0x78, 0x17, 0xaf, 0x63, 0xf5, 0x94, 0xd2, 0x65, 0xb2,
|
||||
0x02, 0x8a, 0xd9, 0xd7, 0x76, 0x32, 0x9d, 0x57, 0x60, 0x2e, 0xee, 0xc2, 0x8e, 0x19, 0xf9, 0xfc,
|
||||
0xc1, 0xdb, 0x9b, 0x9b, 0x3f, 0xc4, 0x08, 0x0e, 0x65, 0x55, 0x78, 0x06, 0xbd, 0x97, 0x0d, 0xc3,
|
||||
0xa4, 0x64, 0xff, 0x84, 0x22, 0x96, 0x63, 0x1b, 0x5e, 0xc5, 0x1b, 0x78, 0x25, 0x6b, 0x41, 0x82,
|
||||
0xb6, 0x86, 0x9c, 0x47, 0xc8, 0xe3, 0x66, 0xcc, 0xc7, 0xdd, 0x58, 0x95, 0xa5, 0x9c, 0x87, 0xd6,
|
||||
0x86, 0x9e, 0xb0, 0x59, 0xb2, 0x26, 0xcc, 0xc8, 0xa4, 0xad, 0xd9, 0x0b, 0xe4, 0xfe, 0xdf, 0x7f,
|
||||
0x41, 0x7f, 0x01, 0x07, 0x61, 0x97, 0xa4, 0xee, 0x5d, 0x02, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x49,
|
||||
0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x01, 0x88, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xdd, 0xd6, 0xb1, 0x2b, 0xc4,
|
||||
0x61, 0x1c, 0xc7, 0xf1, 0xf7, 0xf9, 0x1d, 0xb9, 0xa8, 0xc3, 0x5d, 0x57, 0x9e, 0x94, 0x0c, 0x32,
|
||||
0x51, 0x94, 0x49, 0x92, 0x59, 0x16, 0x75, 0x83, 0x41, 0x99, 0x0c, 0x12, 0x19, 0x18, 0x44, 0x49,
|
||||
0x59, 0xee, 0xf7, 0x60, 0x10, 0x25, 0xc4, 0x72, 0x9c, 0xe7, 0xce, 0x1f, 0x60, 0x30, 0x1a, 0x0c,
|
||||
0x4a, 0x99, 0x2f, 0x25, 0x9b, 0xe5, 0x46, 0x4a, 0xbe, 0x06, 0x77, 0xbf, 0x7b, 0x58, 0xa4, 0x7e,
|
||||
0xcf, 0x0d, 0x86, 0xef, 0xf2, 0x0c, 0xcf, 0xab, 0xcf, 0xf7, 0xf9, 0x3e, 0x4f, 0x0f, 0x22, 0x42,
|
||||
0x2d, 0xca, 0xdd, 0xc6, 0x9a, 0x65, 0x34, 0x4f, 0xf8, 0xcc, 0x39, 0x83, 0xd8, 0xa1, 0x05, 0xcd,
|
||||
0x3b, 0x1a, 0x41, 0x53, 0x74, 0x07, 0x6d, 0x91, 0x2e, 0x23, 0x82, 0xe6, 0xc6, 0x1d, 0xa4, 0x39,
|
||||
0x0e, 0xa0, 0x2d, 0xd6, 0x5c, 0x42, 0xcf, 0x56, 0xa2, 0x41, 0x27, 0x10, 0xdb, 0xf4, 0x5a, 0xc8,
|
||||
0x0b, 0xeb, 0xd4, 0xb9, 0x81, 0x7c, 0x96, 0xac, 0xb6, 0x65, 0x9d, 0x8d, 0x37, 0x9a, 0x6b, 0x2b,
|
||||
0xd1, 0x94, 0x13, 0x08, 0x9f, 0x26, 0x34, 0x6f, 0x65, 0xe4, 0x03, 0x9f, 0x94, 0x2b, 0x68, 0xdc,
|
||||
0x6a, 0xdb, 0x9d, 0xb3, 0x97, 0x01, 0xcd, 0x9e, 0xd5, 0xb6, 0x4d, 0x97, 0x50, 0x31, 0x80, 0x32,
|
||||
0x0c, 0x3b, 0x81, 0xc8, 0xd0, 0x6d, 0xa5, 0x29, 0xb1, 0x4e, 0x34, 0x54, 0xe8, 0x12, 0x3a, 0xf2,
|
||||
0x70, 0x7a, 0x1a, 0xe3, 0x65, 0xaf, 0x0d, 0x59, 0xe8, 0x47, 0xba, 0x16, 0xb9, 0x0a, 0xf5, 0xf5,
|
||||
0x2e, 0x40, 0x9f, 0x81, 0x92, 0x01, 0xb1, 0xeb, 0xbc, 0x8e, 0x37, 0x03, 0x23, 0xa1, 0x41, 0x06,
|
||||
0xee, 0x0d, 0xc8, 0xbe, 0xe7, 0xc9, 0x64, 0x3c, 0x2e, 0xe9, 0x78, 0x5c, 0x76, 0xa3, 0xd1, 0x0a,
|
||||
0x58, 0x3c, 0x80, 0xfa, 0x6f, 0x10, 0x9a, 0x59, 0x34, 0x25, 0xab, 0xc7, 0xbf, 0x56, 0x72, 0xb5,
|
||||
0x9a, 0x60, 0x28, 0x99, 0x14, 0xa5, 0x94, 0x28, 0xa5, 0xa4, 0x3f, 0x95, 0x92, 0x8b, 0xf2, 0x7a,
|
||||
0x0e, 0x06, 0x7e, 0x42, 0x8f, 0x7f, 0x41, 0xd0, 0x48, 0xcf, 0xdc, 0xd7, 0x66, 0xd9, 0x48, 0x44,
|
||||
0x3a, 0xda, 0xdb, 0x03, 0x48, 0x29, 0x25, 0x87, 0x9e, 0x27, 0x06, 0x24, 0x0f, 0x13, 0xdf, 0x21,
|
||||
0x9f, 0x79, 0x34, 0xaf, 0x7f, 0x81, 0x9a, 0x37, 0xaa, 0x89, 0xc6, 0x5a, 0x5b, 0x03, 0x64, 0x34,
|
||||
0x91, 0x08, 0xd6, 0x0b, 0xd0, 0x1d, 0xd6, 0x19, 0xe5, 0xcb, 0x2d, 0x92, 0xb5, 0xc6, 0x46, 0x59,
|
||||
0x89, 0xc5, 0x24, 0x17, 0x89, 0x54, 0xa0, 0xeb, 0xd0, 0x86, 0xe1, 0x0c, 0x92, 0x06, 0x6e, 0x7f,
|
||||
0x4e, 0x9d, 0x81, 0x87, 0x4b, 0xe8, 0x0c, 0xf5, 0x1e, 0x19, 0xf0, 0x0c, 0x4c, 0x1b, 0x38, 0x32,
|
||||
0x70, 0x62, 0x60, 0xc6, 0x40, 0x43, 0xcd, 0x7e, 0x41, 0xff, 0x1f, 0xfa, 0x04, 0xa0, 0xb0, 0xd7,
|
||||
0x03, 0x0b, 0xe0, 0xec, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
|
||||
0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_corner_xpm[1] = {{ png, sizeof( png ), "add_corner_xpm" }};
|
||||
|
||||
@@ -8,40 +8,28 @@
|
||||
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, 0xf9, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0xd6, 0x3f, 0x48, 0xd4,
|
||||
0x61, 0x1c, 0xc7, 0xf1, 0xd7, 0x73, 0x5d, 0xa6, 0x99, 0x7f, 0x50, 0xa4, 0xb3, 0x41, 0x2a, 0xb2,
|
||||
0x24, 0xa7, 0x08, 0x24, 0x88, 0x9a, 0x1a, 0xca, 0x31, 0x08, 0x6a, 0x6a, 0x08, 0x5a, 0x1d, 0x6b,
|
||||
0x11, 0x2a, 0x24, 0x08, 0x89, 0xa0, 0xa1, 0x96, 0x86, 0x86, 0xa2, 0xad, 0xb1, 0xa1, 0x29, 0x22,
|
||||
0x02, 0xa3, 0x38, 0xb0, 0xa1, 0xa9, 0x2c, 0x24, 0x33, 0x1c, 0x2a, 0xcb, 0x4a, 0xbb, 0xee, 0x69,
|
||||
0xb8, 0xdf, 0xe5, 0x5d, 0x1d, 0x7a, 0x7a, 0xa7, 0x0f, 0x7c, 0xe1, 0xc7, 0xc3, 0xef, 0xf7, 0xbc,
|
||||
0xf9, 0x7d, 0x3f, 0x9f, 0xcf, 0xf3, 0x3c, 0x21, 0xc6, 0x68, 0x3d, 0x46, 0xca, 0x3a, 0x8d, 0x35,
|
||||
0x01, 0x85, 0xe0, 0x64, 0x08, 0x1a, 0xca, 0x26, 0x63, 0x8c, 0x75, 0x2d, 0xe2, 0x39, 0x62, 0x24,
|
||||
0xde, 0x23, 0x86, 0xbf, 0xf3, 0x75, 0x86, 0x9c, 0x4f, 0x20, 0xc5, 0x1a, 0xaa, 0x3b, 0x88, 0x78,
|
||||
0xf6, 0x1f, 0xc8, 0x18, 0xb1, 0x6d, 0x2d, 0x40, 0x3d, 0xe4, 0x3f, 0x14, 0x20, 0xb3, 0x2f, 0x39,
|
||||
0xdd, 0x87, 0xfa, 0xb6, 0x0e, 0x01, 0x8d, 0xdc, 0x1d, 0x64, 0x3a, 0x4b, 0xdf, 0x29, 0xec, 0x43,
|
||||
0x73, 0xf1, 0x9d, 0x50, 0x4b, 0x8e, 0x42, 0x70, 0x01, 0x0b, 0x84, 0x2b, 0xe8, 0x46, 0x1f, 0xcd,
|
||||
0x6d, 0xcc, 0xcd, 0x61, 0x06, 0xaf, 0x62, 0x8c, 0xdf, 0x21, 0x5d, 0x03, 0xe4, 0x12, 0x86, 0x13,
|
||||
0xef, 0x4e, 0x12, 0x1e, 0xe0, 0x37, 0x73, 0xb3, 0x09, 0xe4, 0x35, 0x7e, 0xd6, 0x64, 0x6f, 0xe2,
|
||||
0x48, 0xb9, 0xf0, 0xf9, 0x47, 0x3c, 0x49, 0x23, 0x83, 0xdd, 0xd8, 0xfc, 0xdf, 0x37, 0xab, 0x80,
|
||||
0xec, 0x24, 0xce, 0x2f, 0x42, 0xbe, 0xbc, 0x60, 0x38, 0x93, 0xe8, 0x54, 0xec, 0x52, 0xaa, 0x0e,
|
||||
0x20, 0x69, 0xa6, 0xce, 0x10, 0xf3, 0x7c, 0x1c, 0x67, 0xc7, 0x09, 0xf4, 0x56, 0xfa, 0x8b, 0xd2,
|
||||
0x4a, 0xad, 0x40, 0x93, 0x3d, 0xc5, 0x47, 0xb6, 0x3d, 0xe7, 0xce, 0x28, 0x07, 0x46, 0x98, 0x98,
|
||||
0x41, 0xae, 0x60, 0x8a, 0x25, 0x46, 0x95, 0xed, 0x1a, 0x25, 0x7e, 0x25, 0xee, 0xc7, 0x06, 0xf4,
|
||||
0xe0, 0x18, 0x0e, 0x61, 0x17, 0x36, 0x96, 0x66, 0xa6, 0xe2, 0x1a, 0x55, 0x40, 0xae, 0x96, 0x08,
|
||||
0x3f, 0x4d, 0xcc, 0xa0, 0x21, 0xb1, 0x73, 0xa6, 0xe8, 0xdc, 0x65, 0xd7, 0x59, 0x06, 0x72, 0xad,
|
||||
0xdc, 0x5d, 0x9f, 0x9f, 0x72, 0xab, 0x25, 0x11, 0x3e, 0x9d, 0xec, 0xfe, 0xa1, 0x9a, 0xae, 0x2c,
|
||||
0x93, 0xa3, 0xdc, 0xfc, 0x62, 0xd4, 0xa6, 0xb2, 0x0c, 0x5c, 0xe6, 0x7d, 0x2b, 0x7e, 0xc4, 0x18,
|
||||
0x73, 0x2b, 0x0a, 0xde, 0x12, 0xee, 0x82, 0x66, 0xde, 0x3c, 0x64, 0x32, 0x4b, 0xf7, 0x71, 0x1c,
|
||||
0x44, 0xc7, 0x6a, 0xf2, 0x57, 0xa9, 0x5d, 0x17, 0x89, 0x5b, 0x13, 0x58, 0x13, 0x5d, 0xfd, 0x74,
|
||||
0x0c, 0x62, 0x00, 0x5d, 0x95, 0x32, 0xb2, 0x22, 0x10, 0x31, 0x90, 0xbf, 0x51, 0xd0, 0xe2, 0x57,
|
||||
0x96, 0x99, 0x2d, 0x09, 0xac, 0x15, 0xdb, 0xd1, 0x5e, 0xd3, 0xc6, 0x5b, 0x02, 0xb9, 0x59, 0x2e,
|
||||
0xfc, 0xc4, 0x75, 0x9a, 0x52, 0x8b, 0x21, 0xad, 0x4e, 0xf4, 0x25, 0xa4, 0x88, 0xc8, 0x0d, 0x95,
|
||||
0x43, 0xde, 0x3d, 0xa3, 0xfb, 0x30, 0x3a, 0xeb, 0x76, 0x5e, 0x15, 0x68, 0x8f, 0xdb, 0x99, 0x1f,
|
||||
0x2f, 0x40, 0xde, 0x8e, 0xd1, 0x75, 0x14, 0xfd, 0x68, 0xac, 0x2b, 0xa8, 0x00, 0xbb, 0xdd, 0xcb,
|
||||
0xc4, 0x7d, 0x3a, 0x8f, 0x60, 0x6f, 0xe1, 0x20, 0xab, 0xad, 0x5d, 0xa5, 0x55, 0x76, 0xf0, 0x85,
|
||||
0xd0, 0xd2, 0xce, 0xb7, 0x4d, 0xf8, 0x14, 0x63, 0x5c, 0xa8, 0xe7, 0x15, 0xec, 0x0f, 0x67, 0x83,
|
||||
0x90, 0xe8, 0x8e, 0xba, 0xc6, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
|
||||
0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x01, 0x3f, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x95, 0xbd, 0x4a, 0x03,
|
||||
0x41, 0x14, 0x46, 0x4f, 0x82, 0x88, 0x22, 0x58, 0x0b, 0x36, 0x96, 0x22, 0x16, 0x06, 0x7f, 0x48,
|
||||
0xa5, 0x22, 0x88, 0xfa, 0x0e, 0x56, 0xbe, 0x4a, 0x1a, 0x0b, 0x1b, 0x1f, 0x42, 0xb0, 0xb2, 0xf1,
|
||||
0x01, 0xb6, 0xb1, 0x08, 0xe8, 0xce, 0xbd, 0x2b, 0x2e, 0xd8, 0xa8, 0x68, 0x14, 0xa3, 0x8d, 0xbe,
|
||||
0xc1, 0x58, 0x64, 0x75, 0x43, 0xb2, 0xab, 0x71, 0x76, 0xa6, 0x18, 0x66, 0x60, 0x67, 0x38, 0x7c,
|
||||
0x73, 0x76, 0xee, 0xc5, 0x5a, 0x4b, 0xa8, 0x01, 0x57, 0xf3, 0x3f, 0xeb, 0x70, 0x90, 0xeb, 0x3d,
|
||||
0x90, 0x77, 0x30, 0xad, 0x60, 0xa0, 0x1c, 0x22, 0x9f, 0x20, 0x0f, 0xa0, 0xb3, 0x81, 0x40, 0xe6,
|
||||
0x00, 0xe4, 0x03, 0xe4, 0x1e, 0x92, 0x45, 0xef, 0x89, 0x20, 0x99, 0xca, 0xd7, 0xba, 0x0f, 0x66,
|
||||
0xc1, 0xbb, 0x23, 0x90, 0x6d, 0xd0, 0x3b, 0x48, 0x9a, 0x85, 0xdf, 0xfd, 0x40, 0xe2, 0x1d, 0x90,
|
||||
0xb7, 0xcc, 0xc9, 0x0d, 0xa4, 0xe3, 0xde, 0x41, 0x90, 0xec, 0xf6, 0x89, 0x7f, 0x04, 0x59, 0x0a,
|
||||
0x92, 0x08, 0xf4, 0xb0, 0x07, 0x31, 0x4f, 0xa0, 0x8d, 0xd2, 0x7d, 0xee, 0x80, 0x68, 0xac, 0x37,
|
||||
0xdb, 0x1a, 0x98, 0x16, 0xc4, 0xcb, 0xbf, 0xee, 0x77, 0x74, 0xb2, 0x05, 0x72, 0x09, 0x32, 0x37,
|
||||
0xf2, 0x19, 0x87, 0xbf, 0x6b, 0x13, 0xb4, 0x9b, 0x39, 0x69, 0x83, 0xad, 0x7b, 0x07, 0x81, 0xd9,
|
||||
0x00, 0xe9, 0xe6, 0x4e, 0xcc, 0x4a, 0x90, 0x44, 0xa0, 0xa7, 0x2e, 0x10, 0x07, 0x50, 0x67, 0x12,
|
||||
0xe4, 0xe4, 0xbf, 0x90, 0x91, 0x40, 0x60, 0xd6, 0x41, 0xce, 0xa1, 0x3d, 0x5d, 0xe9, 0x19, 0xfc,
|
||||
0x0d, 0x31, 0xaf, 0x99, 0xf8, 0xb3, 0x20, 0xa0, 0x01, 0x48, 0x07, 0x64, 0xd5, 0x3b, 0x08, 0x6c,
|
||||
0x1d, 0xe4, 0x22, 0x83, 0x3c, 0x83, 0xae, 0x55, 0xae, 0x20, 0xe5, 0x89, 0xd2, 0x19, 0x90, 0x08,
|
||||
0xe2, 0xa6, 0x97, 0xc2, 0x3b, 0x7c, 0x5d, 0x7a, 0xfc, 0xfd, 0x08, 0xc1, 0xd6, 0xbc, 0xb5, 0x91,
|
||||
0x62, 0x27, 0x7a, 0xe4, 0xbd, 0xeb, 0x16, 0x88, 0x7f, 0x29, 0x6b, 0x5e, 0xd5, 0xaa, 0x3c, 0xd1,
|
||||
0x04, 0xe8, 0x6d, 0x48, 0x48, 0x5f, 0x22, 0x6d, 0x80, 0xa4, 0xa1, 0x20, 0x03, 0x8e, 0x86, 0xdb,
|
||||
0xaf, 0xcf, 0xf1, 0x05, 0x56, 0x13, 0x40, 0xc7, 0xbb, 0x6a, 0xb9, 0x16, 0x00, 0x00, 0x00, 0x00,
|
||||
0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_dashed_line_xpm[1] = {{ png, sizeof( png ), "add_dashed_line_xpm" }};
|
||||
|
||||
@@ -8,33 +8,31 @@
|
||||
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, 0x95, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xcd, 0xd6, 0xbd, 0x4b, 0xc3,
|
||||
0x40, 0x18, 0x06, 0xf0, 0x03, 0x2d, 0x16, 0xe2, 0x20, 0xa2, 0x4e, 0x2a, 0xd2, 0x8a, 0x83, 0x14,
|
||||
0x6c, 0x51, 0x10, 0xd4, 0xd5, 0xd5, 0x59, 0xc4, 0x41, 0x04, 0x67, 0xb5, 0x83, 0x82, 0x78, 0x83,
|
||||
0x8a, 0x82, 0x83, 0xb8, 0x09, 0xfe, 0x03, 0x45, 0x5c, 0x84, 0x2e, 0x2e, 0x8e, 0xce, 0xba, 0x38,
|
||||
0x38, 0xd6, 0x49, 0xc1, 0x0f, 0x1c, 0x83, 0xad, 0x9e, 0xcf, 0x5b, 0xde, 0x2b, 0x67, 0x0c, 0x77,
|
||||
0xad, 0x24, 0xc1, 0xc0, 0xaf, 0x49, 0xdf, 0x24, 0xf7, 0x5c, 0x2e, 0x97, 0x10, 0xa1, 0x94, 0x12,
|
||||
0x49, 0x10, 0xff, 0x2a, 0x08, 0x4b, 0x05, 0x7c, 0xd8, 0x0c, 0xd4, 0xa9, 0xf6, 0x1e, 0x65, 0xd0,
|
||||
0x13, 0xd0, 0xc6, 0x17, 0xcc, 0x1b, 0x75, 0xfa, 0xf1, 0xe3, 0x08, 0xfa, 0x60, 0x33, 0x46, 0x50,
|
||||
0x15, 0x36, 0xa2, 0x0e, 0x2a, 0x41, 0x8d, 0x86, 0x0b, 0x46, 0x8c, 0xa0, 0xad, 0xa8, 0x83, 0xf6,
|
||||
0xe1, 0x9c, 0xb7, 0x2b, 0x71, 0x07, 0x8d, 0xc2, 0x15, 0xff, 0x8f, 0x35, 0x28, 0x0d, 0x05, 0xb8,
|
||||
0x89, 0x3d, 0x88, 0x6b, 0xb3, 0x2d, 0x07, 0xe5, 0x72, 0xca, 0x27, 0x2d, 0x06, 0x09, 0x57, 0x90,
|
||||
0xd9, 0xae, 0x2e, 0x28, 0x62, 0x09, 0xea, 0xa0, 0x29, 0x0c, 0x52, 0x07, 0x71, 0xdd, 0x83, 0x1d,
|
||||
0x4b, 0x50, 0xa3, 0xdd, 0x1f, 0x05, 0xdb, 0x10, 0x60, 0x29, 0x06, 0x83, 0xb8, 0x2e, 0x5d, 0x41,
|
||||
0xb4, 0x3f, 0x58, 0x90, 0x81, 0x46, 0xc6, 0xe0, 0x18, 0x16, 0xa1, 0x0d, 0xda, 0x43, 0x3a, 0xb0,
|
||||
0x02, 0x27, 0x30, 0x69, 0x09, 0x92, 0xbf, 0x0b, 0x42, 0xf4, 0xc0, 0x2a, 0xdc, 0x1a, 0x53, 0x38,
|
||||
0x63, 0xb9, 0xd2, 0xac, 0x71, 0xdc, 0x7d, 0xbd, 0xf7, 0x42, 0x0c, 0xb8, 0x82, 0xcc, 0xc6, 0x35,
|
||||
0xfd, 0x26, 0x78, 0x83, 0x67, 0xf6, 0xc2, 0x5e, 0xd9, 0x67, 0xc8, 0x79, 0x25, 0x5b, 0xd0, 0x2e,
|
||||
0xdf, 0x8b, 0x6b, 0xe3, 0x64, 0x5a, 0x9f, 0xc2, 0x04, 0x0c, 0xb3, 0x2c, 0xcb, 0xc0, 0x38, 0x77,
|
||||
0x46, 0x77, 0xea, 0x0e, 0x0e, 0xa0, 0xdb, 0x35, 0x74, 0x73, 0xbc, 0x3e, 0x84, 0x4b, 0x78, 0x84,
|
||||
0x0b, 0x58, 0x63, 0xeb, 0xac, 0xc8, 0xce, 0xe0, 0x01, 0xca, 0x1c, 0x20, 0x35, 0x57, 0x50, 0x0a,
|
||||
0xa6, 0x61, 0x09, 0xb6, 0xb9, 0xb6, 0x07, 0x83, 0xd0, 0x67, 0xe8, 0x65, 0x54, 0xef, 0x37, 0x8e,
|
||||
0xa5, 0x7b, 0xb4, 0x40, 0x57, 0x6a, 0x0d, 0x0a, 0xdc, 0xe8, 0x4e, 0x9a, 0x4d, 0x3c, 0xb3, 0x0a,
|
||||
0x96, 0x09, 0x41, 0xb3, 0x73, 0x99, 0x87, 0x31, 0xdd, 0xd4, 0xac, 0xb3, 0x3d, 0xb4, 0x96, 0x7d,
|
||||
0x29, 0xc7, 0x73, 0xd4, 0x7c, 0xd0, 0x5f, 0x84, 0x05, 0xe1, 0x9d, 0x54, 0xab, 0x46, 0x1d, 0x94,
|
||||
0xcf, 0xab, 0x21, 0xcf, 0x9b, 0x3a, 0x6a, 0x04, 0x19, 0xaf, 0x12, 0x19, 0xf9, 0xd7, 0x8f, 0x9e,
|
||||
0x85, 0x09, 0x04, 0x75, 0xd5, 0x25, 0xf5, 0x5d, 0xf7, 0x0d, 0x2a, 0x30, 0xaf, 0x71, 0x68, 0xa7,
|
||||
0x5d, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x01, 0x70, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x96, 0x3d, 0x4b, 0xc3,
|
||||
0x40, 0x18, 0xc7, 0x2f, 0x34, 0x89, 0x22, 0xc4, 0x04, 0xdc, 0x7c, 0x59, 0x24, 0x90, 0xad, 0x79,
|
||||
0x4f, 0xd6, 0xa8, 0x73, 0x15, 0x71, 0x13, 0x1c, 0xfd, 0x04, 0x82, 0x9b, 0xf8, 0x09, 0xea, 0xd4,
|
||||
0xb9, 0xa3, 0xb8, 0xea, 0x66, 0x3f, 0x86, 0x38, 0x0b, 0x5a, 0xb5, 0x20, 0x0a, 0xe2, 0xd4, 0x45,
|
||||
0xcf, 0xff, 0x23, 0x17, 0x08, 0x35, 0xea, 0x55, 0x4d, 0x29, 0x68, 0xe0, 0xc7, 0x71, 0xcf, 0xe5,
|
||||
0x9e, 0xdf, 0xe5, 0xb9, 0x3b, 0x08, 0xe3, 0x9c, 0xb3, 0x51, 0xc0, 0xc6, 0x46, 0x64, 0xdb, 0xf6,
|
||||
0x44, 0x18, 0x86, 0x7d, 0xc1, 0xce, 0xe0, 0x38, 0x62, 0xcf, 0xe0, 0xee, 0xc7, 0xa2, 0x2c, 0xcb,
|
||||
0x26, 0x91, 0x88, 0x0b, 0xfa, 0x41, 0x10, 0xd4, 0x07, 0x44, 0x14, 0x7f, 0xfc, 0x55, 0x51, 0x14,
|
||||
0x45, 0x47, 0x68, 0xcf, 0xe8, 0x2b, 0x2b, 0x15, 0x25, 0x49, 0x32, 0x83, 0xb6, 0x07, 0x9a, 0x95,
|
||||
0x8a, 0xa8, 0x8f, 0xd2, 0x35, 0x68, 0x5f, 0xd0, 0x2e, 0x57, 0x2a, 0x22, 0x50, 0xc2, 0x36, 0xfa,
|
||||
0x57, 0x9e, 0xe7, 0x59, 0x95, 0x8a, 0xd2, 0x34, 0x9d, 0x46, 0xff, 0x12, 0x1c, 0x56, 0x2a, 0x22,
|
||||
0x7c, 0xdf, 0x5f, 0x41, 0xec, 0x65, 0x28, 0x11, 0xea, 0x7d, 0x8c, 0x72, 0x9c, 0x0c, 0x23, 0x12,
|
||||
0x25, 0x6c, 0x7d, 0x26, 0xa2, 0x9c, 0x79, 0xde, 0xe2, 0xc9, 0xe1, 0x1f, 0xad, 0x06, 0x63, 0x1a,
|
||||
0x63, 0x4c, 0x79, 0xb7, 0x4a, 0xc4, 0x68, 0x21, 0xc5, 0xe3, 0x5e, 0x72, 0xc7, 0xb8, 0xb4, 0xe8,
|
||||
0xbb, 0x48, 0x89, 0xf0, 0xe8, 0x60, 0x03, 0x6c, 0x7d, 0x59, 0x7f, 0xc6, 0xb6, 0xc1, 0x26, 0x98,
|
||||
0x92, 0x16, 0xe1, 0x89, 0x40, 0x0b, 0x3c, 0x00, 0x0a, 0x34, 0x24, 0x44, 0xab, 0xe2, 0xdd, 0x27,
|
||||
0xd0, 0x06, 0x4b, 0x54, 0xd6, 0x52, 0x91, 0xe3, 0x38, 0x5c, 0x55, 0xd5, 0x9e, 0x98, 0xf0, 0x86,
|
||||
0xa2, 0x28, 0x1c, 0x77, 0xa5, 0x4b, 0x77, 0x46, 0xd0, 0x15, 0x5c, 0x0b, 0x6e, 0x08, 0x9c, 0xc0,
|
||||
0x5b, 0x7a, 0xb7, 0x38, 0xb7, 0x56, 0xab, 0xdd, 0x53, 0xce, 0xd2, 0x2f, 0xb2, 0x2c, 0xcb, 0xd5,
|
||||
0x34, 0xed, 0x00, 0x93, 0x2e, 0xf2, 0x09, 0x88, 0xad, 0xc7, 0x71, 0xbc, 0x40, 0xe0, 0xfe, 0xcc,
|
||||
0x13, 0xae, 0xeb, 0xce, 0x11, 0x10, 0xcc, 0x12, 0x86, 0x61, 0xac, 0x15, 0x16, 0x77, 0xae, 0xeb,
|
||||
0xfa, 0xbe, 0x69, 0x9a, 0x8b, 0xb2, 0x7b, 0x94, 0x8a, 0x12, 0xee, 0x49, 0x94, 0x6e, 0x17, 0x34,
|
||||
0x41, 0x7d, 0x7c, 0x4f, 0xdd, 0xbf, 0xe8, 0xef, 0x8a, 0x4e, 0x41, 0xa7, 0x02, 0x51, 0x27, 0xcf,
|
||||
0x3b, 0xb2, 0xff, 0xba, 0x57, 0xa9, 0x62, 0x87, 0xa0, 0x34, 0xfb, 0xea, 0xd6, 0x00, 0x00, 0x00,
|
||||
0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_dimension_xpm[1] = {{ png, sizeof( png ), "add_dimension_xpm" }};
|
||||
|
||||
@@ -8,15 +8,15 @@
|
||||
static const unsigned char png[] = {
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
|
||||
0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1a, 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0x4a, 0x4c,
|
||||
0xce, 0x00, 0x00, 0x00, 0x6b, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0xd3, 0xb1, 0x0a, 0x40,
|
||||
0x50, 0x1c, 0x85, 0xf1, 0xef, 0xca, 0xe8, 0x01, 0xac, 0x1e, 0xc1, 0x64, 0xf0, 0x2c, 0x06, 0x83,
|
||||
0xbc, 0x85, 0x6c, 0xbc, 0x80, 0x52, 0x94, 0x47, 0xfd, 0x1b, 0x88, 0x94, 0xd1, 0xbd, 0xa5, 0xce,
|
||||
0xf0, 0xcd, 0xbf, 0xe5, 0x1c, 0xcc, 0x8c, 0x10, 0x21, 0x48, 0x90, 0xa0, 0x1f, 0x41, 0x4c, 0x24,
|
||||
0xac, 0x8c, 0xbe, 0xba, 0xa1, 0x8d, 0x94, 0x05, 0xf3, 0x16, 0xb8, 0x50, 0x50, 0x76, 0x40, 0x3d,
|
||||
0x31, 0x33, 0x39, 0x25, 0x1d, 0x05, 0xc3, 0xe7, 0x41, 0x73, 0x8d, 0x01, 0x70, 0x40, 0x05, 0xb4,
|
||||
0x1e, 0xaa, 0x1f, 0xab, 0x3b, 0xb1, 0xc8, 0x47, 0x3a, 0xac, 0x20, 0x41, 0x82, 0xde, 0xdb, 0x01,
|
||||
0xe4, 0x1f, 0xb1, 0x9e, 0xf9, 0x08, 0x63, 0x44, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
|
||||
0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x00, 0x74, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0xd5, 0x31, 0x0a, 0xc2,
|
||||
0x40, 0x14, 0x84, 0xe1, 0xff, 0x45, 0x21, 0x2b, 0xd8, 0x59, 0x58, 0x5b, 0x0a, 0x39, 0x59, 0x9a,
|
||||
0xdc, 0x44, 0xb0, 0xf1, 0x64, 0xe9, 0x53, 0x58, 0x6d, 0x6f, 0xb1, 0x62, 0x92, 0xf1, 0x14, 0x6f,
|
||||
0x43, 0xe0, 0xcd, 0x05, 0x3e, 0x66, 0x9a, 0x31, 0x49, 0xd4, 0x48, 0x43, 0xa5, 0x04, 0x14, 0x50,
|
||||
0x40, 0x3b, 0x82, 0x8e, 0x00, 0xf6, 0xb2, 0x33, 0x85, 0xce, 0x45, 0x38, 0x30, 0x69, 0x50, 0x36,
|
||||
0x1e, 0x9c, 0x58, 0x79, 0x03, 0x17, 0xa7, 0x32, 0x99, 0x1f, 0xf7, 0x86, 0x2f, 0x09, 0x98, 0x5d,
|
||||
0x57, 0x6b, 0x29, 0x26, 0x09, 0x7b, 0xda, 0x95, 0x85, 0x9b, 0x0b, 0x93, 0x18, 0xd5, 0xeb, 0x63,
|
||||
0x71, 0x13, 0x01, 0x05, 0x14, 0xd0, 0x76, 0xd0, 0x1f, 0x27, 0x57, 0x1c, 0xc2, 0x57, 0xbf, 0x3f,
|
||||
0x4a, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_entry_xpm[1] = {{ png, sizeof( png ), "add_entry_xpm" }};
|
||||
|
||||
@@ -8,42 +8,36 @@
|
||||
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, 0x1b, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0xd6, 0xcd, 0x4b, 0x54,
|
||||
0x51, 0x18, 0xc7, 0xf1, 0xcf, 0x8c, 0x8d, 0xe3, 0x50, 0xd2, 0x1b, 0x59, 0xa6, 0xc5, 0x38, 0x09,
|
||||
0x6d, 0xa2, 0x90, 0xc0, 0x5d, 0x8b, 0x40, 0x28, 0xa2, 0xa0, 0x20, 0x24, 0x82, 0xc0, 0xca, 0x8a,
|
||||
0x96, 0x45, 0x10, 0xed, 0x42, 0xc8, 0x45, 0xd9, 0xa2, 0x36, 0xfd, 0x09, 0x81, 0xb5, 0x08, 0x82,
|
||||
0x72, 0x59, 0xa0, 0x48, 0xef, 0x82, 0x9e, 0x08, 0x82, 0x16, 0x89, 0xe0, 0x26, 0xe9, 0x95, 0xd2,
|
||||
0xc8, 0xd3, 0xe6, 0x06, 0x17, 0xf3, 0x65, 0xc6, 0xa8, 0x55, 0x8b, 0x2f, 0x97, 0x7b, 0x0f, 0xf7,
|
||||
0xf7, 0xe5, 0x9c, 0xf3, 0x3c, 0xe7, 0x5e, 0x31, 0x46, 0xff, 0x02, 0xff, 0x45, 0x7f, 0x24, 0x0a,
|
||||
0x3c, 0x0e, 0xbc, 0x5a, 0x2c, 0x23, 0x9c, 0x29, 0x57, 0xf4, 0x3e, 0x10, 0xff, 0x80, 0x1f, 0x2f,
|
||||
0xd9, 0x5f, 0x96, 0x68, 0x98, 0x8f, 0xf5, 0x8a, 0x9d, 0xeb, 0x15, 0xdb, 0x2b, 0xa1, 0x5b, 0x6d,
|
||||
0x4f, 0x60, 0x7a, 0x84, 0x2f, 0x81, 0x96, 0xb2, 0x44, 0x79, 0xcd, 0xbb, 0x90, 0xa9, 0x74, 0xfd,
|
||||
0x07, 0x64, 0xbb, 0x02, 0x71, 0x84, 0xb1, 0x97, 0xd4, 0x2f, 0x4a, 0x84, 0x26, 0xbc, 0xc3, 0x07,
|
||||
0x4c, 0x60, 0xdb, 0x6c, 0x41, 0x83, 0xb2, 0xb7, 0x13, 0xd9, 0x93, 0x51, 0x0a, 0x8b, 0x11, 0xdd,
|
||||
0x40, 0x4c, 0xf1, 0x00, 0xc5, 0x99, 0x41, 0xf7, 0xc9, 0x0f, 0xca, 0x3e, 0x4f, 0xf6, 0xac, 0x37,
|
||||
0xce, 0xcc, 0x99, 0x4f, 0x84, 0x7a, 0x7c, 0x4b, 0x04, 0xa3, 0xc9, 0x75, 0x0a, 0x1d, 0xb3, 0xcd,
|
||||
0xaa, 0x9f, 0x35, 0x4f, 0x65, 0xc7, 0x02, 0xf1, 0x71, 0x75, 0xf6, 0x72, 0xbe, 0xa7, 0xb4, 0xe2,
|
||||
0x17, 0x0b, 0x89, 0xae, 0x24, 0xe1, 0xdf, 0x71, 0x21, 0x59, 0xc2, 0x88, 0x3e, 0x34, 0xcc, 0x26,
|
||||
0xeb, 0x93, 0xdb, 0x3a, 0x24, 0xf3, 0x39, 0x10, 0x0f, 0x1c, 0xae, 0x8b, 0xf9, 0x9e, 0x52, 0xcc,
|
||||
0xf7, 0x94, 0xe2, 0x9c, 0x22, 0xac, 0xc2, 0xa7, 0x24, 0x78, 0x00, 0xc7, 0x71, 0x35, 0xb9, 0xff,
|
||||
0x8a, 0xf6, 0xb9, 0x8a, 0xe3, 0xa1, 0xaa, 0xb3, 0x81, 0xf8, 0x2c, 0x97, 0x89, 0x75, 0x5d, 0xc5,
|
||||
0x05, 0x45, 0x17, 0x53, 0xfb, 0x72, 0x0f, 0xdd, 0xe8, 0x4a, 0x3d, 0xbb, 0x83, 0xba, 0x99, 0x92,
|
||||
0xc0, 0xba, 0xc0, 0xdb, 0x40, 0x3c, 0xb9, 0x77, 0xd5, 0xfc, 0x33, 0xc2, 0xb2, 0xd4, 0x32, 0xcd,
|
||||
0xc5, 0x47, 0xec, 0x4b, 0x4b, 0x46, 0x29, 0x24, 0xa7, 0x4c, 0x1c, 0x50, 0xd5, 0x9b, 0xd3, 0x78,
|
||||
0x82, 0x25, 0xad, 0x68, 0x99, 0x4b, 0x74, 0x2e, 0x15, 0xd8, 0x8b, 0x6b, 0x29, 0x7a, 0x53, 0x63,
|
||||
0x37, 0xb1, 0x32, 0xc6, 0x28, 0x92, 0x09, 0xdc, 0x0a, 0xc4, 0x21, 0x99, 0xfe, 0xd5, 0x8a, 0x47,
|
||||
0x28, 0xae, 0x98, 0xaf, 0xea, 0xf2, 0x78, 0x83, 0x49, 0x8c, 0xe3, 0x14, 0x8a, 0xa8, 0x4e, 0xa8,
|
||||
0xc1, 0xeb, 0xa4, 0x40, 0xc6, 0xd1, 0x96, 0x64, 0x5c, 0x4a, 0xfa, 0xe8, 0xf5, 0x16, 0x1b, 0x8e,
|
||||
0x15, 0x94, 0x36, 0x96, 0x55, 0xde, 0xd8, 0x89, 0x3d, 0xbf, 0x82, 0x7e, 0x6b, 0x40, 0x5a, 0x93,
|
||||
0xf1, 0xdd, 0x2f, 0x38, 0x9a, 0xf4, 0xcf, 0x44, 0xbb, 0xba, 0xce, 0x9c, 0xe6, 0x16, 0x95, 0xf4,
|
||||
0x51, 0x39, 0x04, 0x76, 0x04, 0x26, 0x03, 0x53, 0x97, 0xd4, 0x9e, 0xae, 0x51, 0x6a, 0x9b, 0x2d,
|
||||
0x23, 0x7d, 0x7a, 0x4f, 0x0f, 0xc9, 0x4c, 0x04, 0xc6, 0x2b, 0xe4, 0x5b, 0x20, 0xde, 0x95, 0x3b,
|
||||
0x5f, 0xad, 0xe9, 0x20, 0xdb, 0x73, 0xf3, 0x9d, 0x75, 0xe3, 0x23, 0x4c, 0x0e, 0x33, 0x95, 0xbc,
|
||||
0x58, 0x11, 0x8f, 0x64, 0xaf, 0x17, 0x6c, 0x3a, 0x44, 0x69, 0xf9, 0x82, 0x5f, 0xd8, 0x82, 0xc6,
|
||||
0x86, 0x1a, 0x9b, 0x3a, 0xaa, 0x35, 0x1d, 0xac, 0x94, 0x1a, 0xcd, 0x47, 0x0a, 0x9a, 0x1b, 0xcb,
|
||||
0xfa, 0x94, 0xa3, 0x8a, 0xcd, 0xb5, 0x8b, 0x63, 0xed, 0xd2, 0xff, 0x7f, 0x41, 0x7f, 0x8d, 0x9f,
|
||||
0x8e, 0x31, 0x67, 0x6a, 0x5f, 0x12, 0x40, 0xd2, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
|
||||
0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x01, 0xc1, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x96, 0x31, 0x48, 0x02,
|
||||
0x61, 0x14, 0xc7, 0x5f, 0x77, 0xa6, 0x17, 0x72, 0xd0, 0xe2, 0x68, 0xb9, 0x38, 0x8a, 0x42, 0x81,
|
||||
0x63, 0x2d, 0x42, 0x53, 0x21, 0x4e, 0x82, 0xa3, 0x2d, 0x4a, 0xd0, 0x12, 0x21, 0x2e, 0x5a, 0x4a,
|
||||
0x44, 0x51, 0x38, 0x55, 0x93, 0x05, 0x0d, 0x89, 0x38, 0xeb, 0x64, 0x2d, 0x82, 0x46, 0x60, 0x20,
|
||||
0x68, 0x82, 0xe0, 0x2a, 0x35, 0x09, 0x89, 0x92, 0x79, 0xff, 0x3e, 0x6f, 0x28, 0xaa, 0xb3, 0xba,
|
||||
0x32, 0x69, 0xe8, 0xe0, 0x0f, 0x1f, 0xf7, 0xf1, 0xde, 0xef, 0x1e, 0xff, 0xf7, 0xbd, 0xfb, 0x08,
|
||||
0x00, 0x8d, 0x42, 0xf4, 0x0f, 0xfa, 0xfb, 0xa0, 0x10, 0x91, 0xc0, 0x74, 0xcc, 0x74, 0xa1, 0x46,
|
||||
0x61, 0xa2, 0x35, 0xb5, 0xa0, 0x79, 0x26, 0x1c, 0x58, 0xad, 0x88, 0xcf, 0xcd, 0x7d, 0x49, 0x87,
|
||||
0x36, 0x1b, 0xfa, 0x31, 0x0c, 0xb6, 0xa2, 0x1a, 0x54, 0x3f, 0x3f, 0xc7, 0x57, 0x1f, 0xa9, 0xd7,
|
||||
0xc3, 0xd9, 0xd2, 0x92, 0x14, 0x1e, 0x1b, 0x93, 0x58, 0xec, 0xe2, 0x8f, 0x41, 0x9d, 0x4e, 0x07,
|
||||
0xa1, 0x50, 0x08, 0x99, 0x4c, 0xe6, 0xdd, 0xde, 0x43, 0xab, 0x85, 0xa3, 0x99, 0x99, 0x5e, 0x98,
|
||||
0xe3, 0xda, 0x2c, 0x7e, 0xf6, 0x47, 0xa0, 0x54, 0x2a, 0x05, 0x8e, 0xe3, 0x60, 0xb1, 0x58, 0x14,
|
||||
0x2b, 0xbb, 0x6f, 0x34, 0xb0, 0x6f, 0x34, 0x3e, 0x6e, 0xf0, 0xfc, 0x6d, 0x84, 0x68, 0xfa, 0xdb,
|
||||
0x20, 0x97, 0xcb, 0x05, 0x9f, 0xcf, 0x07, 0x41, 0x10, 0x50, 0x2a, 0x95, 0x14, 0x61, 0x77, 0xe5,
|
||||
0x32, 0xb6, 0x44, 0xf1, 0x71, 0x43, 0xa3, 0xb9, 0x61, 0x79, 0x26, 0x55, 0x83, 0x9a, 0xcd, 0xa6,
|
||||
0x0c, 0x28, 0x16, 0x8b, 0x70, 0x3a, 0x9d, 0x08, 0x04, 0x02, 0x03, 0x3d, 0xab, 0x67, 0xb3, 0x60,
|
||||
0xa0, 0xbe, 0x67, 0xd9, 0x23, 0xa2, 0x71, 0x55, 0xa0, 0x78, 0x3c, 0x0e, 0xb3, 0xd9, 0x2c, 0xaf,
|
||||
0x13, 0x89, 0x04, 0x4c, 0x26, 0x13, 0x24, 0x49, 0x1a, 0x08, 0xbb, 0x3e, 0x39, 0x91, 0x3b, 0x71,
|
||||
0xd9, 0x48, 0x97, 0xb4, 0xc3, 0xd2, 0xbe, 0x68, 0x9d, 0xf6, 0x68, 0x62, 0x20, 0xc8, 0xe1, 0x70,
|
||||
0x20, 0x18, 0x0c, 0xca, 0xeb, 0x16, 0x33, 0x5e, 0xaf, 0xd7, 0x23, 0x97, 0xcb, 0x7d, 0xd8, 0x8d,
|
||||
0xa7, 0x0b, 0x0b, 0x32, 0x4c, 0xd8, 0x24, 0xd0, 0xee, 0x2b, 0x79, 0x15, 0x41, 0x0d, 0x66, 0x32,
|
||||
0xcf, 0xf3, 0x48, 0x26, 0x93, 0xa8, 0x54, 0x2a, 0xb2, 0xfa, 0x60, 0xbf, 0xdf, 0xff, 0x69, 0x45,
|
||||
0xde, 0x29, 0xba, 0x7a, 0x53, 0xd1, 0x2a, 0x6d, 0x93, 0xa8, 0x08, 0x8a, 0xc5, 0x62, 0x72, 0xb7,
|
||||
0xe9, 0x74, 0xba, 0x67, 0x69, 0xb5, 0x5a, 0x18, 0x0c, 0x06, 0x74, 0xbb, 0xdd, 0xe1, 0x79, 0x64,
|
||||
0xb7, 0xdb, 0x11, 0x89, 0x44, 0x5e, 0x25, 0x6b, 0xb7, 0xdb, 0x10, 0x45, 0x11, 0xe9, 0x74, 0x7a,
|
||||
0x38, 0x5d, 0x57, 0xab, 0xd5, 0xd8, 0x5b, 0x42, 0xb5, 0x5a, 0x7d, 0xf7, 0xe5, 0x6e, 0xb7, 0x1b,
|
||||
0x1e, 0x8f, 0x67, 0x38, 0xe7, 0x28, 0x9f, 0xcf, 0x23, 0x1a, 0x8d, 0x2a, 0xfa, 0x50, 0x28, 0x14,
|
||||
0x9e, 0x2b, 0x1d, 0xea, 0x64, 0xf8, 0x95, 0x59, 0x37, 0x8a, 0xe9, 0x3d, 0x9a, 0xff, 0xd1, 0xff,
|
||||
0x9d, 0xe1, 0xcf, 0x83, 0x9e, 0x00, 0x5a, 0xce, 0x5e, 0x60, 0x01, 0xb3, 0x24, 0x02, 0x00, 0x00,
|
||||
0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_glabel_xpm[1] = {{ png, sizeof( png ), "add_glabel_xpm" }};
|
||||
|
||||
@@ -8,74 +8,70 @@
|
||||
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, 0x1b, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x96, 0xdf, 0x4f, 0x93,
|
||||
0x57, 0x18, 0xc7, 0x3f, 0xcf, 0x69, 0x2b, 0x88, 0x20, 0x8b, 0x23, 0xd5, 0x0e, 0xb3, 0x09, 0x91,
|
||||
0x59, 0xc4, 0x25, 0x98, 0xc5, 0x19, 0x82, 0xb8, 0x6c, 0x31, 0x0e, 0xb7, 0xf1, 0x23, 0x59, 0xa2,
|
||||
0x68, 0xbc, 0x59, 0x02, 0x17, 0x1b, 0xf1, 0xce, 0x98, 0x8c, 0x2d, 0x5c, 0x7a, 0xb1, 0x3f, 0x80,
|
||||
0x0d, 0x97, 0xcc, 0x71, 0x23, 0x24, 0xdb, 0x85, 0x04, 0x0d, 0x28, 0x5b, 0xb0, 0xc4, 0x48, 0x3a,
|
||||
0x34, 0x8c, 0x64, 0xc9, 0x36, 0x15, 0x2d, 0xa6, 0x73, 0x10, 0xba, 0x21, 0xa5, 0x80, 0x6d, 0x69,
|
||||
0xcf, 0x2e, 0xfa, 0xb6, 0xbc, 0x6f, 0xcb, 0x5b, 0x2f, 0x96, 0xec, 0x24, 0x4f, 0xf2, 0xbc, 0xef,
|
||||
0xfb, 0x9c, 0xf3, 0x7d, 0xbe, 0xdf, 0xe7, 0x39, 0xe7, 0xbc, 0xa2, 0xb5, 0xe6, 0xff, 0x18, 0x4e,
|
||||
0x00, 0x11, 0x71, 0x00, 0x05, 0xff, 0x71, 0xad, 0xa4, 0xd6, 0xfa, 0x79, 0x5e, 0x20, 0xe0, 0x0d,
|
||||
0xbf, 0xdf, 0x3f, 0x54, 0x52, 0x52, 0x52, 0x88, 0x08, 0x92, 0x02, 0xdf, 0x88, 0x32, 0xde, 0xe5,
|
||||
0x1b, 0x7d, 0x7d, 0x7d, 0x63, 0xc0, 0xc9, 0x17, 0x01, 0xb1, 0xb7, 0xaa, 0xea, 0x95, 0x44, 0x22,
|
||||
0xa1, 0x44, 0x84, 0xb4, 0x29, 0x91, 0x14, 0x48, 0xda, 0xf2, 0x80, 0xd6, 0xd4, 0xd4, 0xb8, 0xf3,
|
||||
0x25, 0x22, 0x5a, 0x6b, 0x44, 0xa4, 0xf6, 0x9f, 0xc5, 0xc5, 0x7b, 0xc9, 0x64, 0x52, 0x0d, 0x5e,
|
||||
0xbd, 0xca, 0x3e, 0xaf, 0xd7, 0x58, 0x4c, 0x10, 0xc9, 0xc3, 0xc8, 0xc4, 0x7a, 0x25, 0x12, 0x59,
|
||||
0x51, 0x4a, 0xcd, 0xce, 0xcc, 0xcc, 0x84, 0x3a, 0x3a, 0x3a, 0x4e, 0x6b, 0xad, 0x9f, 0x6e, 0xca,
|
||||
0x48, 0x89, 0xa0, 0x45, 0x38, 0x70, 0xe0, 0x00, 0x7b, 0x2a, 0x2a, 0x52, 0x8c, 0x94, 0x42, 0x36,
|
||||
0x63, 0x64, 0xf2, 0x53, 0xe9, 0x00, 0xb0, 0x0d, 0xd8, 0xbf, 0xcf, 0xeb, 0x8d, 0x00, 0x0e, 0x5b,
|
||||
0x46, 0xcf, 0x96, 0x96, 0xee, 0x69, 0xad, 0xd5, 0x83, 0xfb, 0xf7, 0xa9, 0xa8, 0xac, 0xe4, 0xce,
|
||||
0x9d, 0x3b, 0xb8, 0x9c, 0x4e, 0x94, 0x52, 0x26, 0x02, 0xb2, 0x51, 0x33, 0x2b, 0x48, 0x66, 0xc4,
|
||||
0x62, 0xb1, 0xf5, 0x40, 0x20, 0x70, 0xc3, 0xe5, 0x72, 0xad, 0xf4, 0xf4, 0xf4, 0x7c, 0x35, 0x35,
|
||||
0x35, 0x75, 0xcb, 0xc2, 0x48, 0x4c, 0xf2, 0x28, 0x11, 0xe2, 0xb1, 0x18, 0x75, 0x75, 0x75, 0x68,
|
||||
0xad, 0x73, 0x99, 0xd9, 0xd5, 0x2c, 0x05, 0xee, 0x6c, 0x38, 0x7a, 0xf4, 0x03, 0x87, 0xc3, 0xc1,
|
||||
0xc8, 0xc8, 0xc8, 0x4d, 0x20, 0x17, 0x08, 0x11, 0x44, 0xa9, 0x94, 0x19, 0xd2, 0xa1, 0x75, 0xe6,
|
||||
0x39, 0x1b, 0x24, 0x33, 0x27, 0x57, 0x46, 0x6b, 0xd7, 0x02, 0x19, 0x5d, 0xc4, 0xc4, 0x4a, 0x19,
|
||||
0x41, 0xca, 0x00, 0x55, 0x06, 0x68, 0xda, 0x6e, 0xdf, 0xbe, 0xcd, 0x99, 0x33, 0x67, 0xe8, 0xea,
|
||||
0xea, 0xb2, 0xbc, 0x77, 0x64, 0xf9, 0x9b, 0x36, 0x83, 0x98, 0x75, 0xdf, 0x84, 0x81, 0x32, 0xf9,
|
||||
0xdf, 0x5c, 0xba, 0xc4, 0xb5, 0x6b, 0xd7, 0x10, 0x11, 0x8e, 0x1c, 0x39, 0x42, 0x4b, 0x4b, 0x4b,
|
||||
0x0e, 0x03, 0x5b, 0x46, 0x66, 0xf9, 0xcc, 0xfb, 0x27, 0xcd, 0x46, 0x8c, 0x4c, 0x23, 0x91, 0x08,
|
||||
0xc3, 0xc3, 0xc3, 0xb8, 0xdd, 0x6e, 0xb4, 0xd6, 0x5c, 0xbf, 0x7e, 0x9d, 0x48, 0x24, 0xb2, 0x91,
|
||||
0x90, 0x11, 0x67, 0x2f, 0x5d, 0x96, 0xf6, 0x19, 0x06, 0x69, 0xe9, 0x0c, 0x7f, 0x70, 0x70, 0x90,
|
||||
0x68, 0x34, 0x4a, 0x6b, 0x6b, 0x2b, 0x1e, 0x8f, 0x07, 0x9f, 0xcf, 0x47, 0x30, 0x18, 0xb4, 0x28,
|
||||
0x92, 0xbf, 0x46, 0x66, 0xe9, 0xd2, 0x35, 0x32, 0x4b, 0x67, 0x00, 0xf6, 0xf7, 0xf7, 0xe3, 0x70,
|
||||
0x38, 0xa8, 0xaf, 0xaf, 0xa7, 0xb1, 0xb1, 0x91, 0xd9, 0xd9, 0x59, 0x26, 0x26, 0x26, 0x30, 0xb6,
|
||||
0x89, 0xc5, 0x6c, 0xa5, 0x23, 0x0b, 0x28, 0xcd, 0x26, 0x5d, 0xb3, 0xb9, 0xb9, 0x39, 0xc6, 0xc7,
|
||||
0xc7, 0x29, 0x2a, 0x2a, 0x62, 0x60, 0x60, 0x80, 0x87, 0x0f, 0x1f, 0x02, 0x30, 0x3a, 0x3a, 0xca,
|
||||
0xc2, 0xc2, 0x82, 0x2d, 0x88, 0xa5, 0x19, 0x36, 0x6b, 0x4d, 0x73, 0x17, 0x8a, 0x08, 0x03, 0x03,
|
||||
0x03, 0x24, 0x93, 0x49, 0xe2, 0xf1, 0x38, 0x3e, 0x9f, 0x2f, 0x13, 0x33, 0x3e, 0x3e, 0x4e, 0x30,
|
||||
0x18, 0xc4, 0xe3, 0xf1, 0xd8, 0x9e, 0x75, 0x2a, 0xf7, 0xf8, 0x12, 0x5b, 0xeb, 0xef, 0xef, 0x47,
|
||||
0x29, 0x45, 0x6f, 0x6f, 0x2f, 0xd3, 0xd3, 0xd3, 0xcc, 0xcc, 0xcc, 0xd0, 0xdc, 0xdc, 0x4c, 0x28,
|
||||
0x14, 0x62, 0x6c, 0x6c, 0x8c, 0x78, 0x3c, 0x6e, 0xcb, 0xca, 0x69, 0xb9, 0x0a, 0xb2, 0x5b, 0xd4,
|
||||
0x04, 0x1c, 0x8d, 0x46, 0x39, 0x75, 0xea, 0x14, 0x4d, 0x4d, 0x4d, 0x78, 0xbd, 0x5e, 0x2a, 0x2b,
|
||||
0x2b, 0x11, 0x11, 0xba, 0xbb, 0xbb, 0xa9, 0xae, 0xae, 0x66, 0xfb, 0xf6, 0xed, 0x84, 0x42, 0x21,
|
||||
0x4a, 0x4b, 0x4b, 0x11, 0x11, 0x5c, 0x5b, 0xb6, 0xd8, 0x4b, 0x97, 0xbe, 0x6d, 0x2d, 0xd2, 0x19,
|
||||
0x7e, 0x61, 0x61, 0x21, 0x17, 0x2e, 0x5c, 0xb0, 0x7c, 0x9b, 0x9c, 0xe8, 0xe3, 0xca, 0x77, 0x1f,
|
||||
0x03, 0xf0, 0xc7, 0xdf, 0xf0, 0xe5, 0xd4, 0xa7, 0x96, 0xc5, 0xb7, 0x3a, 0x77, 0xef, 0x37, 0xf2,
|
||||
0xd5, 0x19, 0xa0, 0xbb, 0x93, 0x93, 0x8f, 0x4b, 0x4b, 0x4b, 0xb7, 0xc6, 0xe3, 0xf1, 0x9d, 0x99,
|
||||
0xd3, 0x37, 0xab, 0x39, 0xcc, 0xf2, 0xce, 0x3e, 0xf6, 0xf3, 0xc3, 0x95, 0x4e, 0xda, 0x3b, 0x87,
|
||||
0x28, 0x73, 0x1f, 0x62, 0x6d, 0x0d, 0x9e, 0x3f, 0x87, 0xb5, 0xb5, 0x94, 0xdd, 0xba, 0x71, 0x1a,
|
||||
0xcf, 0x1e, 0xcf, 0xa1, 0x9e, 0x9e, 0x9e, 0xdd, 0x9d, 0x9d, 0x9d, 0x41, 0xa7, 0xc1, 0xe4, 0x17,
|
||||
0x60, 0x2f, 0x80, 0xdf, 0xef, 0x0f, 0x00, 0xaf, 0x99, 0xa5, 0xcb, 0x06, 0x0b, 0x2f, 0xfd, 0xc5,
|
||||
0xe5, 0xaf, 0x3f, 0xe2, 0xdd, 0xf7, 0x3e, 0xe7, 0xd5, 0x8a, 0x0f, 0x59, 0x5d, 0x05, 0x0d, 0x24,
|
||||
0x92, 0xb0, 0x9e, 0x48, 0x99, 0xd6, 0x05, 0x28, 0x71, 0x14, 0x14, 0x14, 0x14, 0xa8, 0x1c, 0xe9,
|
||||
0x00, 0x02, 0x81, 0xc0, 0xb3, 0xaa, 0xaa, 0x2a, 0x77, 0x34, 0x1a, 0x75, 0xdd, 0x7c, 0x7a, 0xd3,
|
||||
0xd9, 0xf4, 0x63, 0x93, 0x35, 0x40, 0xc3, 0xc9, 0xdf, 0xa0, 0xa1, 0xfc, 0x18, 0x6f, 0xd5, 0x7f,
|
||||
0xc6, 0xf2, 0x32, 0xac, 0xae, 0xa6, 0x58, 0xac, 0xae, 0x6e, 0x58, 0x22, 0x91, 0xa7, 0xbd, 0x01,
|
||||
0xda, 0xda, 0xda, 0x1a, 0x01, 0xce, 0x9d, 0x3b, 0xd7, 0x7d, 0xb6, 0xe1, 0xec, 0x27, 0xc7, 0xca,
|
||||
0x8e, 0xb1, 0xbe, 0xbe, 0x6e, 0x9d, 0xb4, 0xf3, 0x09, 0x73, 0x7f, 0xfe, 0xca, 0xfc, 0xfc, 0x3c,
|
||||
0x4a, 0xed, 0xb2, 0x00, 0xa4, 0x41, 0xb3, 0xa6, 0xe4, 0x02, 0x69, 0xad, 0xe7, 0x00, 0xce, 0x9f,
|
||||
0x3f, 0x1f, 0xa9, 0xdd, 0x51, 0xab, 0x2f, 0x96, 0x5f, 0x24, 0x1c, 0x0e, 0x5b, 0x8a, 0xa4, 0xdf,
|
||||
0xd4, 0x4c, 0xf8, 0xbe, 0x60, 0xe8, 0xfb, 0x36, 0xde, 0x39, 0xf1, 0x13, 0x6b, 0x6b, 0x8e, 0x17,
|
||||
0x32, 0x12, 0xbb, 0xff, 0x3a, 0x11, 0xa9, 0x04, 0x5e, 0x2e, 0x29, 0x29, 0x71, 0xba, 0x5c, 0xae,
|
||||
0x9c, 0xad, 0x5e, 0xfd, 0xba, 0xa7, 0xec, 0xf0, 0xc1, 0xa7, 0x7d, 0xbb, 0xca, 0x8f, 0xbf, 0xb4,
|
||||
0xad, 0xf8, 0x20, 0xb1, 0x18, 0xc4, 0xe3, 0x1b, 0x16, 0x5e, 0xfc, 0x96, 0x5d, 0xbb, 0x0f, 0xff,
|
||||
0xbc, 0xc3, 0xfd, 0xf6, 0xc9, 0xf6, 0xf6, 0xf6, 0x27, 0x4e, 0xbb, 0x9d, 0xac, 0xb5, 0x7e, 0x04,
|
||||
0x3c, 0xb2, 0xfd, 0xab, 0x11, 0x91, 0x13, 0x8d, 0xc7, 0xdf, 0x5f, 0x0e, 0xff, 0x7e, 0x79, 0x39,
|
||||
0xfc, 0xa0, 0x30, 0xfb, 0xfb, 0xb6, 0xe2, 0x62, 0x5c, 0x85, 0x3b, 0x23, 0xe9, 0xe7, 0x7f, 0x01,
|
||||
0x5e, 0x8e, 0x7c, 0x3f, 0xe6, 0x47, 0xe7, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
|
||||
0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x03, 0xdc, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x95, 0x5f, 0x48, 0x53,
|
||||
0x71, 0x14, 0xc7, 0x67, 0x10, 0x1a, 0x91, 0x88, 0x28, 0x2a, 0x42, 0x3d, 0x24, 0x05, 0xd5, 0x4b,
|
||||
0x20, 0x91, 0x25, 0xa6, 0x64, 0x86, 0x60, 0x96, 0x49, 0x51, 0x04, 0x29, 0x29, 0xe5, 0x83, 0xbd,
|
||||
0x86, 0x10, 0xfd, 0xc1, 0xa7, 0xa2, 0x94, 0x7a, 0xa8, 0x27, 0x8d, 0x92, 0x82, 0xc8, 0x2c, 0x45,
|
||||
0xc9, 0x68, 0xc3, 0x36, 0x32, 0x44, 0xb3, 0x48, 0x66, 0xba, 0x29, 0x25, 0x73, 0x7f, 0x9c, 0x9b,
|
||||
0xfb, 0x73, 0x9d, 0x73, 0xba, 0xe9, 0x4e, 0xbf, 0x73, 0xb6, 0xdf, 0xf5, 0xde, 0x9b, 0xe9, 0x2a,
|
||||
0xfa, 0xc1, 0x97, 0xdd, 0xed, 0xde, 0x9d, 0xcf, 0xf9, 0x7d, 0x7f, 0xe7, 0x9c, 0xab, 0x8a, 0x8f,
|
||||
0x8f, 0xcf, 0xca, 0xce, 0xce, 0x3e, 0xfe, 0x3f, 0xc5, 0x18, 0xdb, 0x55, 0x79, 0x79, 0x79, 0x17,
|
||||
0x3c, 0x5e, 0x2f, 0xd8, 0xa7, 0x1d, 0x7f, 0xad, 0x69, 0x87, 0x93, 0xe4, 0x70, 0xfe, 0x2a, 0x41,
|
||||
0x98, 0x85, 0x82, 0x82, 0x82, 0xf3, 0x04, 0xc2, 0x87, 0x4c, 0x93, 0xe6, 0x98, 0x35, 0x69, 0xb6,
|
||||
0x80, 0xd9, 0x82, 0xb2, 0x82, 0xc5, 0x6a, 0x03, 0xab, 0x0d, 0x35, 0x45, 0xb2, 0x4d, 0xc9, 0xe5,
|
||||
0x76, 0xbb, 0xff, 0x1c, 0x14, 0x01, 0xf0, 0xe0, 0x18, 0xc8, 0x0e, 0x53, 0x76, 0xd4, 0x34, 0xdb,
|
||||
0x19, 0x17, 0xee, 0x70, 0x45, 0x1e, 0xaf, 0x10, 0x3b, 0x08, 0xb3, 0xb7, 0x58, 0xad, 0xb2, 0xe0,
|
||||
0x18, 0x14, 0x03, 0x71, 0x8b, 0x9c, 0x33, 0x33, 0xab, 0x4a, 0x98, 0x8d, 0xc1, 0x3a, 0xdc, 0x81,
|
||||
0x1c, 0xb0, 0x12, 0x9c, 0x07, 0x9a, 0x71, 0xb9, 0x48, 0x2e, 0x66, 0x91, 0x54, 0xee, 0xe8, 0xa7,
|
||||
0xcf, 0xe7, 0x5b, 0x1b, 0xc4, 0x2d, 0x42, 0x9f, 0x95, 0x00, 0x69, 0x60, 0xb7, 0xc7, 0x43, 0xc2,
|
||||
0x82, 0xe2, 0xf2, 0x4a, 0x34, 0xe7, 0xf7, 0x47, 0x40, 0x87, 0x0b, 0x72, 0xab, 0x7b, 0xdb, 0x2b,
|
||||
0xe1, 0xed, 0xa3, 0xfd, 0x12, 0xe5, 0x80, 0xfa, 0xe9, 0x11, 0xf8, 0x31, 0xf6, 0x91, 0x3c, 0x57,
|
||||
0x02, 0x28, 0x70, 0x34, 0xb8, 0x57, 0x10, 0x58, 0x65, 0x09, 0x64, 0x11, 0x6a, 0x56, 0xa1, 0xf9,
|
||||
0xf9, 0xf9, 0x08, 0xe8, 0xd2, 0xb9, 0x9d, 0x37, 0x5f, 0xdc, 0x52, 0xc1, 0xdb, 0xa6, 0xdd, 0xf0,
|
||||
0xfe, 0xd9, 0x21, 0x51, 0xed, 0xf7, 0x53, 0xa0, 0xf3, 0xc1, 0x36, 0xb0, 0x59, 0x8c, 0x72, 0x40,
|
||||
0x34, 0x53, 0x1e, 0xbc, 0xf6, 0xf2, 0x65, 0x50, 0xa9, 0x54, 0xa0, 0xd5, 0xe9, 0xc0, 0x37, 0x37,
|
||||
0x07, 0x73, 0x0a, 0x05, 0x02, 0x01, 0x39, 0xc8, 0x32, 0xf6, 0x1a, 0xa4, 0xcb, 0x63, 0xff, 0x02,
|
||||
0x6d, 0x0d, 0x9b, 0xe1, 0xdd, 0x93, 0x1c, 0x70, 0x3a, 0xed, 0xb4, 0x03, 0x0e, 0xc0, 0x4c, 0xd1,
|
||||
0x7b, 0x04, 0x65, 0x64, 0x64, 0x40, 0x56, 0x56, 0x16, 0xd4, 0xd6, 0xd6, 0x52, 0xf6, 0x4a, 0x2d,
|
||||
0x2e, 0x2e, 0xae, 0x0d, 0xc2, 0x65, 0x1d, 0x6b, 0x87, 0xd6, 0xdb, 0x1b, 0xa0, 0xf7, 0xf5, 0xd9,
|
||||
0x88, 0x45, 0x68, 0x07, 0x03, 0x50, 0xe6, 0xcc, 0xfb, 0xee, 0xee, 0x6e, 0x48, 0x4e, 0x4e, 0x86,
|
||||
0x8e, 0x8e, 0x0e, 0x48, 0x4b, 0x4b, 0xa3, 0xc0, 0x0b, 0x0b, 0x0b, 0x32, 0x05, 0x83, 0xc1, 0xf5,
|
||||
0x41, 0xb8, 0x0c, 0xfd, 0x77, 0x00, 0xef, 0x7f, 0xd5, 0xde, 0x10, 0x01, 0x7e, 0xcc, 0x96, 0x59,
|
||||
0x52, 0x59, 0x59, 0x09, 0x55, 0x55, 0x55, 0x04, 0x48, 0x4d, 0x4d, 0x25, 0x30, 0x06, 0x96, 0x6a,
|
||||
0x69, 0x69, 0x29, 0x36, 0x10, 0xae, 0x4f, 0x6f, 0xaa, 0xd8, 0xce, 0xe2, 0xc0, 0x3c, 0xae, 0xa1,
|
||||
0xa0, 0xe8, 0x3b, 0x5a, 0x98, 0x94, 0x94, 0x04, 0x6a, 0xb5, 0x9a, 0x02, 0xd6, 0xd4, 0xd4, 0x40,
|
||||
0x45, 0x45, 0x05, 0x84, 0x42, 0x21, 0x99, 0xfe, 0x18, 0x44, 0xcf, 0x7c, 0xd7, 0x90, 0x1d, 0xe8,
|
||||
0x7b, 0x6b, 0x6b, 0x2b, 0x9d, 0x0f, 0x5e, 0x63, 0xc0, 0x9e, 0x9e, 0x1e, 0x48, 0x4c, 0x4c, 0xa4,
|
||||
0x02, 0xc0, 0xe0, 0x5c, 0xcb, 0xcb, 0xcb, 0xb1, 0x81, 0x46, 0xfb, 0x6e, 0x45, 0xac, 0x7b, 0x7f,
|
||||
0x55, 0x84, 0xe0, 0x0e, 0xca, 0xcb, 0xcb, 0x09, 0x54, 0x5a, 0x5a, 0x4a, 0x2a, 0x29, 0x29, 0xa1,
|
||||
0xea, 0xc3, 0x04, 0x30, 0x38, 0x57, 0x38, 0x1c, 0x5e, 0x1f, 0x64, 0x36, 0xbc, 0x64, 0x90, 0x38,
|
||||
0xf8, 0xf8, 0xea, 0x94, 0x0c, 0xe2, 0x62, 0xe5, 0x9e, 0x90, 0x90, 0x00, 0x75, 0x75, 0x75, 0xd0,
|
||||
0xd0, 0xd0, 0x00, 0x8d, 0x8d, 0x8d, 0xa4, 0xa2, 0xa2, 0x22, 0x28, 0x2b, 0x2b, 0xa3, 0xe0, 0x52,
|
||||
0xad, 0x09, 0x72, 0xd9, 0x06, 0xa0, 0xed, 0xee, 0x26, 0x50, 0x3f, 0xde, 0xc7, 0xec, 0xf0, 0x8a,
|
||||
0x10, 0xb4, 0xa9, 0xb9, 0xb9, 0x19, 0x32, 0x33, 0x33, 0xe9, 0x5a, 0x9a, 0xb9, 0x56, 0xab, 0x05,
|
||||
0xf6, 0xee, 0xa1, 0x56, 0xf8, 0x2d, 0xe8, 0x97, 0x86, 0xbd, 0x97, 0x0c, 0x9d, 0x0f, 0xb7, 0x82,
|
||||
0xd7, 0x65, 0x12, 0xcb, 0x94, 0x1f, 0x70, 0x61, 0x61, 0x21, 0xf5, 0x0d, 0x07, 0x70, 0xe1, 0xf7,
|
||||
0xf4, 0xf4, 0x74, 0x68, 0x6a, 0x6a, 0x12, 0xef, 0xe1, 0x12, 0x47, 0x50, 0x5f, 0xe7, 0x05, 0x50,
|
||||
0x3f, 0x39, 0x48, 0xd2, 0xb4, 0xe4, 0x92, 0xb4, 0xcf, 0x8f, 0x82, 0xc3, 0xf2, 0x59, 0x66, 0x19,
|
||||
0xaf, 0x22, 0x7e, 0xc8, 0x1c, 0x80, 0x0b, 0x3f, 0xf1, 0x3e, 0x56, 0x24, 0x36, 0x34, 0x36, 0x37,
|
||||
0x7e, 0x06, 0xd8, 0xff, 0xc5, 0xa1, 0x8a, 0x8d, 0x88, 0xd3, 0x16, 0xc7, 0x8b, 0x10, 0xed, 0x7a,
|
||||
0x3f, 0xeb, 0x17, 0xfc, 0x93, 0x72, 0x37, 0x1c, 0x22, 0xcd, 0x18, 0xaf, 0xf1, 0xb9, 0x19, 0x36,
|
||||
0x0f, 0x4d, 0x26, 0x13, 0x8c, 0x8f, 0x8f, 0x83, 0xd1, 0x68, 0x04, 0x83, 0xc1, 0x00, 0x43, 0xfa,
|
||||
0xe1, 0xd0, 0x8e, 0x1d, 0xbb, 0x8a, 0x57, 0x40, 0xd1, 0x11, 0x43, 0xe3, 0x85, 0x95, 0xa8, 0x3f,
|
||||
0xda, 0x2f, 0xeb, 0xed, 0x06, 0x85, 0xcf, 0xd8, 0xd9, 0x3b, 0x6a, 0x70, 0x70, 0x10, 0x06, 0x06,
|
||||
0x06, 0x60, 0x68, 0x68, 0x08, 0x26, 0x26, 0x26, 0xe0, 0xdb, 0xc8, 0x68, 0xf8, 0xe4, 0xe9, 0x53,
|
||||
0xd7, 0x58, 0x2e, 0x2a, 0x39, 0x28, 0x3a, 0xc7, 0xb0, 0x17, 0xa8, 0x31, 0x57, 0xb1, 0x4d, 0xb9,
|
||||
0x1b, 0xfc, 0x0d, 0xdd, 0xc0, 0x5d, 0x74, 0x75, 0x75, 0xd1, 0xef, 0xc1, 0xe0, 0x22, 0xe8, 0x87,
|
||||
0xf5, 0xe1, 0xe2, 0x63, 0x25, 0x35, 0x08, 0x11, 0x41, 0xb3, 0x52, 0x10, 0xb3, 0x8d, 0x83, 0xf8,
|
||||
0xf9, 0xac, 0x65, 0x1b, 0x26, 0x31, 0xc5, 0xde, 0x59, 0x7a, 0xbd, 0x1e, 0x34, 0x1a, 0x6c, 0xe8,
|
||||
0x00, 0xe8, 0x3e, 0xe8, 0x96, 0x4b, 0xcb, 0x4f, 0x9c, 0xe1, 0x90, 0x98, 0x40, 0xab, 0x9d, 0x8f,
|
||||
0xb4, 0x08, 0xf0, 0xbe, 0x95, 0xbd, 0x85, 0xd1, 0xae, 0x7e, 0x66, 0xdb, 0xa3, 0x96, 0x16, 0x5f,
|
||||
0x7e, 0xfe, 0x81, 0x3d, 0x52, 0x88, 0x08, 0xc2, 0xc0, 0x02, 0x87, 0xb0, 0x22, 0x98, 0x57, 0x9c,
|
||||
0x8f, 0x72, 0xa4, 0x28, 0xad, 0x73, 0xb0, 0x37, 0xb4, 0xae, 0xb7, 0x37, 0x7c, 0xbd, 0xbe, 0x7e,
|
||||
0x24, 0x25, 0x25, 0x65, 0x8b, 0x12, 0x42, 0x20, 0x36, 0x75, 0xf7, 0xb2, 0x81, 0x78, 0xe5, 0x5f,
|
||||
0x54, 0x5d, 0x7d, 0xf1, 0x4a, 0x61, 0x51, 0x71, 0x35, 0x1b, 0x41, 0x1b, 0x57, 0x83, 0xa0, 0x7e,
|
||||
0x02, 0x31, 0x50, 0x72, 0x61, 0x7e, 0x5f, 0xf1, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e,
|
||||
0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_hierar_pin_xpm[1] = {{ png, sizeof( png ), "add_hierar_pin_xpm" }};
|
||||
|
||||
@@ -8,83 +8,73 @@
|
||||
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, 0xaa, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xad, 0x96, 0x6d, 0x4c, 0x5b,
|
||||
0x65, 0x14, 0x80, 0x0b, 0xc8, 0x9a, 0x31, 0x60, 0x60, 0x16, 0x51, 0xa2, 0x7f, 0x9a, 0xf8, 0x91,
|
||||
0x00, 0xc9, 0xfe, 0x10, 0x93, 0x25, 0xa2, 0x21, 0xfb, 0x07, 0x68, 0x02, 0x24, 0x6a, 0x22, 0x41,
|
||||
0xf6, 0xc7, 0x18, 0x22, 0x41, 0x02, 0x31, 0xa2, 0x15, 0x17, 0x70, 0x38, 0x87, 0x13, 0x13, 0x08,
|
||||
0xe3, 0x82, 0x40, 0x57, 0x50, 0xda, 0x0e, 0x56, 0x3e, 0x12, 0xbe, 0x34, 0x45, 0xa0, 0x4c, 0x11,
|
||||
0x5d, 0x5c, 0x5c, 0x08, 0x5b, 0x10, 0xc9, 0xc6, 0x58, 0xbf, 0x3f, 0x69, 0x0b, 0xbd, 0xed, 0xf1,
|
||||
0x3d, 0x07, 0x6e, 0xb9, 0x17, 0xd6, 0x66, 0x26, 0xde, 0xe4, 0x49, 0xef, 0x6d, 0xdf, 0x7b, 0x9e,
|
||||
0xf7, 0x9c, 0xf3, 0xde, 0xf7, 0x56, 0x26, 0x93, 0xc9, 0x9e, 0x64, 0x9c, 0xfe, 0x1f, 0x91, 0x03,
|
||||
0x80, 0xec, 0x30, 0x78, 0x9c, 0xb1, 0x58, 0x2c, 0x7e, 0x9b, 0xcd, 0x1e, 0xb2, 0xdb, 0x19, 0x0e,
|
||||
0x47, 0xc8, 0xe1, 0x74, 0x86, 0x9c, 0x88, 0xcb, 0x15, 0x72, 0x09, 0xb8, 0xdd, 0x21, 0x37, 0xe2,
|
||||
0xf1, 0x84, 0x3c, 0x51, 0x58, 0x5a, 0x5a, 0xda, 0x60, 0xf1, 0x9e, 0x8e, 0x2a, 0x72, 0x38, 0x1c,
|
||||
0xbc, 0xd9, 0x62, 0x01, 0x8b, 0xd5, 0x0a, 0x56, 0x9b, 0x0d, 0x6c, 0x76, 0x3b, 0x30, 0x21, 0x30,
|
||||
0x21, 0x38, 0x11, 0x97, 0x0b, 0x98, 0x08, 0xdc, 0x88, 0xc7, 0x03, 0x1e, 0x01, 0xaf, 0x57, 0xc2,
|
||||
0xca, 0xca, 0x8a, 0x29, 0xa6, 0x88, 0x05, 0xe3, 0x51, 0xd2, 0xd3, 0xd3, 0x03, 0x06, 0x83, 0x01,
|
||||
0x7e, 0x9e, 0x9b, 0x83, 0x39, 0x64, 0x7e, 0x1e, 0xe6, 0xa3, 0xb1, 0xb0, 0x00, 0x0b, 0x88, 0xd1,
|
||||
0xb8, 0x07, 0x3b, 0x67, 0xf7, 0x06, 0x27, 0x26, 0x26, 0x56, 0x27, 0x27, 0x27, 0xff, 0x2a, 0x29,
|
||||
0x29, 0xb9, 0x7c, 0x44, 0xc4, 0x4a, 0xc3, 0x63, 0x16, 0x1a, 0x8d, 0x86, 0xb2, 0x32, 0x99, 0xcd,
|
||||
0xd2, 0xec, 0xc4, 0x19, 0x62, 0x76, 0xe2, 0x0c, 0xf7, 0xb3, 0x3c, 0x4c, 0x53, 0x53, 0x93, 0xf6,
|
||||
0xa8, 0xc8, 0xed, 0xe6, 0x31, 0x90, 0x56, 0xab, 0x05, 0x1b, 0x0b, 0xfe, 0x60, 0x6b, 0x8b, 0xa4,
|
||||
0x7a, 0xbd, 0x1e, 0xf4, 0x23, 0x23, 0x30, 0x82, 0x8c, 0x8e, 0xc2, 0xe8, 0x3e, 0x63, 0x63, 0x63,
|
||||
0x30, 0x36, 0x3e, 0x0e, 0xe3, 0x31, 0xa8, 0xae, 0xae, 0xfe, 0xa3, 0xac, 0xac, 0xec, 0x03, 0x44,
|
||||
0x2e, 0x97, 0xbf, 0x48, 0x22, 0x36, 0x2b, 0x1e, 0x67, 0xaa, 0xd5, 0xe9, 0x68, 0xe6, 0xf7, 0x37,
|
||||
0x37, 0xa9, 0x1c, 0x16, 0x6b, 0x8c, 0x7e, 0xed, 0xcf, 0x1c, 0x7b, 0xe3, 0x8d, 0x41, 0x60, 0x67,
|
||||
0x07, 0x32, 0x33, 0x33, 0x5f, 0x27, 0x11, 0x6b, 0x2c, 0x8f, 0x37, 0xeb, 0x98, 0xe8, 0xa1, 0xc9,
|
||||
0x04, 0x7f, 0xaf, 0xaf, 0x53, 0x1f, 0x4c, 0xe6, 0x28, 0x0b, 0x44, 0x5c, 0x3e, 0x41, 0x18, 0x45,
|
||||
0xea, 0x0f, 0x04, 0x0e, 0x44, 0xec, 0x0b, 0x1e, 0x07, 0xab, 0xd5, 0x6a, 0x48, 0x4c, 0x4c, 0xc4,
|
||||
0x82, 0x42, 0x7c, 0x7c, 0x3c, 0xdc, 0xb9, 0x7b, 0x97, 0x4a, 0x29, 0x08, 0xba, 0x3f, 0x93, 0x43,
|
||||
0x67, 0xbd, 0x2c, 0x26, 0x83, 0x5f, 0xbf, 0xc0, 0x04, 0x6e, 0xf0, 0xf9, 0x7c, 0xc4, 0x8e, 0x38,
|
||||
0x23, 0xef, 0xf6, 0x36, 0x8f, 0xf6, 0xba, 0xba, 0x3a, 0x92, 0x08, 0x74, 0x72, 0x9c, 0x24, 0x8b,
|
||||
0xc7, 0x11, 0x21, 0x37, 0xe7, 0x2e, 0x43, 0x80, 0x65, 0x82, 0xec, 0x06, 0x83, 0x07, 0xa2, 0x6d,
|
||||
0x26, 0x62, 0x40, 0x7e, 0x7e, 0xbe, 0x44, 0x54, 0x5a, 0x5a, 0x4a, 0x7d, 0xc1, 0x32, 0x61, 0xc6,
|
||||
0x82, 0xa8, 0xb7, 0x4b, 0x0d, 0x6a, 0xd5, 0x10, 0xf4, 0x5f, 0x1d, 0x8e, 0x30, 0xa0, 0xbe, 0x0e,
|
||||
0xaa, 0x8e, 0x8f, 0xe9, 0xf7, 0xee, 0x86, 0x93, 0xe0, 0x71, 0x99, 0x60, 0x77, 0x77, 0x17, 0x78,
|
||||
0x9e, 0x17, 0x89, 0x7c, 0x3e, 0x12, 0xa5, 0xa5, 0xa5, 0x91, 0x20, 0x2f, 0x2f, 0x8f, 0x3e, 0xd3,
|
||||
0xd3, 0xd3, 0x29, 0x23, 0x94, 0x60, 0xc6, 0x82, 0x48, 0xfb, 0xc3, 0x10, 0xcd, 0x16, 0xcb, 0x82,
|
||||
0xc1, 0x04, 0x82, 0x6c, 0xf6, 0x23, 0xdc, 0x6b, 0x34, 0xc6, 0x30, 0xf4, 0x3e, 0x5d, 0x4b, 0x44,
|
||||
0xac, 0x96, 0xfc, 0xe2, 0xe2, 0x62, 0x24, 0x13, 0xf6, 0xd0, 0x41, 0x42, 0x42, 0x02, 0x9d, 0x4f,
|
||||
0xcf, 0xcc, 0x90, 0x04, 0x27, 0x22, 0x88, 0x74, 0x83, 0xc3, 0x92, 0xe0, 0x62, 0x4c, 0xf7, 0x7e,
|
||||
0x07, 0xee, 0x93, 0x78, 0x46, 0x02, 0x58, 0x1f, 0xde, 0x3e, 0x2a, 0x52, 0x2a, 0x95, 0x14, 0x98,
|
||||
0x7d, 0x09, 0x56, 0xb6, 0xd2, 0x72, 0x72, 0x72, 0xe8, 0xba, 0xb6, 0xb6, 0x96, 0x24, 0x3e, 0xbf,
|
||||
0x3f, 0x22, 0xba, 0xa6, 0xb9, 0x2e, 0x09, 0x8e, 0xc1, 0xc4, 0x18, 0xae, 0x9d, 0xa3, 0x71, 0xd5,
|
||||
0x9f, 0x27, 0x43, 0xea, 0x37, 0x2f, 0x81, 0xfc, 0x92, 0x62, 0x77, 0x4f, 0xe4, 0xf7, 0xf3, 0xb9,
|
||||
0xb9, 0xb9, 0x14, 0xb8, 0xbc, 0xbc, 0x9c, 0x56, 0x5a, 0x45, 0x45, 0x05, 0x5d, 0x67, 0x67, 0x67,
|
||||
0x93, 0x04, 0x4b, 0x75, 0x58, 0x24, 0x0e, 0x1e, 0x0a, 0x85, 0x22, 0x78, 0x5d, 0x0f, 0xe0, 0xca,
|
||||
0xfe, 0xd8, 0xd3, 0xcd, 0xcf, 0x80, 0xbc, 0x45, 0x41, 0x5b, 0xc3, 0x99, 0x8d, 0x8d, 0x0d, 0x3e,
|
||||
0x2e, 0x2e, 0x8e, 0x02, 0x0f, 0x0c, 0x0c, 0xd0, 0x96, 0xd3, 0xde, 0xde, 0x1e, 0x29, 0xe5, 0xda,
|
||||
0xda, 0x1a, 0xf5, 0x43, 0x2c, 0x7a, 0x94, 0x20, 0x1c, 0x0e, 0x13, 0x01, 0xbf, 0x13, 0xae, 0x9c,
|
||||
0x4f, 0xa1, 0xb1, 0x2f, 0x5f, 0xc8, 0x38, 0x10, 0x71, 0x1c, 0x17, 0x12, 0x82, 0x4e, 0x4d, 0x4d,
|
||||
0xd1, 0xa6, 0x8a, 0x1b, 0xac, 0x20, 0x6f, 0x6b, 0x6b, 0xa3, 0x7e, 0x08, 0xa2, 0x21, 0xad, 0x5e,
|
||||
0x22, 0x11, 0x04, 0x08, 0x1e, 0xbf, 0x4c, 0xd4, 0xd1, 0xb8, 0x8f, 0x1a, 0x8e, 0xc3, 0x89, 0x96,
|
||||
0xe7, 0x41, 0xfe, 0x95, 0x22, 0x48, 0xa2, 0xe2, 0xe2, 0xe2, 0xb0, 0x78, 0x59, 0x1f, 0xa6, 0xa0,
|
||||
0xa0, 0xe0, 0x88, 0xe8, 0xb0, 0x04, 0x0f, 0xbc, 0xb6, 0x9b, 0x57, 0xa1, 0x4b, 0x79, 0x8c, 0x16,
|
||||
0xc4, 0xa0, 0xea, 0x5b, 0xb8, 0xb1, 0xf8, 0x2b, 0xae, 0xde, 0xf7, 0x50, 0xf4, 0x4a, 0x6a, 0x6a,
|
||||
0x2a, 0xc4, 0x12, 0x25, 0x25, 0x25, 0x49, 0x96, 0xf7, 0xb0, 0x6e, 0x24, 0x22, 0xc1, 0x03, 0x3f,
|
||||
0xb1, 0x67, 0x38, 0x66, 0xac, 0xa7, 0x60, 0x6f, 0x32, 0x9d, 0x6f, 0x80, 0x4e, 0x33, 0x0a, 0x0e,
|
||||
0xf6, 0x0c, 0x0a, 0xab, 0xae, 0x52, 0x08, 0x58, 0x54, 0x54, 0x04, 0x2d, 0x2d, 0x2d, 0xd0, 0xdc,
|
||||
0xdc, 0x0c, 0x35, 0x35, 0x35, 0xb8, 0x03, 0x47, 0x64, 0xb8, 0x23, 0x8b, 0x45, 0xe2, 0x72, 0xa1,
|
||||
0x04, 0xfb, 0x7a, 0xf3, 0xc6, 0x20, 0xfd, 0xde, 0xa5, 0x3c, 0x0e, 0x5f, 0x36, 0x9e, 0x87, 0xe9,
|
||||
0xe9, 0x1f, 0xa1, 0x5f, 0xa3, 0xb9, 0xc7, 0xee, 0x7f, 0x16, 0x45, 0x1c, 0x06, 0x62, 0xfd, 0xe0,
|
||||
0xab, 0xaa, 0xaa, 0x7e, 0xc3, 0xa6, 0xe3, 0x6e, 0xb0, 0xbc, 0xbc, 0x4c, 0xef, 0x9a, 0xe4, 0xe4,
|
||||
0x64, 0x12, 0x55, 0x56, 0x56, 0x46, 0x44, 0x5d, 0x0d, 0xe9, 0x70, 0x95, 0x35, 0x59, 0x40, 0xf5,
|
||||
0xc5, 0x53, 0xd0, 0xdb, 0x78, 0x0a, 0xb8, 0x4f, 0xf7, 0x7e, 0x9f, 0xd2, 0x7c, 0x08, 0x86, 0x9f,
|
||||
0x8c, 0xd0, 0xdd, 0xd7, 0x67, 0x4a, 0x49, 0x49, 0x39, 0x25, 0xbc, 0x8f, 0x6e, 0xef, 0xcf, 0x7a,
|
||||
0xa1, 0xbe, 0xbe, 0xbe, 0x43, 0x2c, 0xc2, 0x25, 0x5d, 0x58, 0x58, 0x48, 0x22, 0x85, 0x42, 0xf1,
|
||||
0x58, 0x7b, 0x5d, 0xff, 0xc5, 0xe7, 0xa0, 0xef, 0xbb, 0x7e, 0xb8, 0x70, 0xf1, 0xd2, 0xfd, 0x8c,
|
||||
0x8c, 0x8c, 0x13, 0xe2, 0x17, 0xdf, 0x49, 0x46, 0x1a, 0x23, 0x89, 0x2d, 0x8a, 0x46, 0xa3, 0xd1,
|
||||
0xb8, 0x36, 0x3b, 0x3b, 0xfb, 0x0f, 0xdb, 0x29, 0x82, 0x28, 0xc5, 0xac, 0xd8, 0x9f, 0x17, 0x7a,
|
||||
0x88, 0x3d, 0xce, 0x4d, 0xb0, 0x5b, 0x36, 0x40, 0xdd, 0xdb, 0x0b, 0xdf, 0xab, 0x54, 0x84, 0xaa,
|
||||
0xbb, 0x1b, 0xda, 0x5b, 0x5b, 0x59, 0xa9, 0x1a, 0xa1, 0x95, 0x95, 0x9d, 0xeb, 0xe0, 0xe0, 0xed,
|
||||
0x77, 0xce, 0xdd, 0xc9, 0xca, 0xca, 0x3a, 0x26, 0x79, 0xc3, 0x46, 0xf9, 0x23, 0x91, 0xc4, 0x84,
|
||||
0xeb, 0xc2, 0x5e, 0x26, 0x7e, 0x38, 0xc5, 0x2b, 0x0d, 0xcf, 0x71, 0xd7, 0x60, 0xcf, 0x21, 0xeb,
|
||||
0xc7, 0x34, 0xfc, 0x79, 0xeb, 0x56, 0xb8, 0xe4, 0xcd, 0xb7, 0xba, 0xd8, 0xfd, 0x71, 0x47, 0x62,
|
||||
0x46, 0x13, 0xcd, 0xcc, 0xcc, 0xac, 0x32, 0x49, 0x98, 0x49, 0x08, 0x26, 0x21, 0x58, 0x70, 0x09,
|
||||
0x81, 0xc0, 0x4e, 0x78, 0xcb, 0x64, 0x0e, 0xeb, 0xf4, 0xa3, 0xde, 0x57, 0xcf, 0x9e, 0x7d, 0xf7,
|
||||
0x51, 0xf1, 0x62, 0x89, 0x9e, 0xc0, 0xe7, 0xeb, 0x3f, 0xa2, 0x88, 0x26, 0x41, 0xfe, 0x05, 0xd8,
|
||||
0x59, 0x10, 0x8c, 0xd8, 0x02, 0xbb, 0x25, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
|
||||
0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x04, 0x16, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x95, 0x5d, 0x48, 0x9b,
|
||||
0x57, 0x18, 0xc7, 0x03, 0x1a, 0xdc, 0xcd, 0x56, 0x06, 0x0a, 0x1b, 0x78, 0x21, 0x64, 0xe6, 0x62,
|
||||
0x14, 0xac, 0x22, 0x13, 0x66, 0xcc, 0x2a, 0x8c, 0x82, 0x76, 0x6d, 0x47, 0xc7, 0xc6, 0xae, 0x76,
|
||||
0x31, 0x64, 0x78, 0xb3, 0x5e, 0x96, 0x15, 0x69, 0x61, 0x51, 0x30, 0xb6, 0xae, 0x2b, 0xad, 0xc5,
|
||||
0x5d, 0x14, 0xb7, 0xd9, 0x8e, 0x41, 0x27, 0x2b, 0x8c, 0x8c, 0x42, 0x75, 0x1f, 0xa1, 0x0e, 0x5c,
|
||||
0xe6, 0xa8, 0x26, 0xad, 0x1f, 0x95, 0x21, 0x9a, 0x2f, 0xa3, 0xf1, 0x4d, 0xde, 0x7c, 0x9a, 0xc4,
|
||||
0xbc, 0xff, 0x9d, 0xe7, 0xe8, 0x79, 0x3f, 0x62, 0x74, 0x6e, 0x65, 0x07, 0xfe, 0x44, 0x5e, 0xde,
|
||||
0xf7, 0xf9, 0x9d, 0xff, 0xff, 0x79, 0xce, 0xd1, 0x54, 0x55, 0x55, 0xf5, 0x4a, 0x73, 0x73, 0xf3,
|
||||
0x99, 0xff, 0x53, 0x8c, 0x61, 0x31, 0xd9, 0xed, 0xf6, 0x0f, 0x63, 0xf1, 0x38, 0xd6, 0x22, 0xeb,
|
||||
0xff, 0x59, 0x91, 0xf5, 0x0d, 0xae, 0xf5, 0x8d, 0xbd, 0x92, 0xe5, 0x04, 0xda, 0xdb, 0xdb, 0x3f,
|
||||
0xe0, 0x20, 0x7a, 0x69, 0x65, 0xd5, 0x7f, 0x68, 0xad, 0xfa, 0x03, 0xf0, 0x07, 0x48, 0x41, 0x04,
|
||||
0x82, 0x21, 0x04, 0x43, 0xa4, 0x30, 0x57, 0x28, 0x6c, 0x94, 0x24, 0x49, 0xff, 0x1e, 0xb4, 0x03,
|
||||
0x10, 0xc5, 0xa9, 0xd0, 0x1a, 0xc2, 0x6b, 0xa4, 0x08, 0x73, 0x26, 0x44, 0x0e, 0x35, 0xc5, 0xe2,
|
||||
0xf2, 0xe1, 0x41, 0xb4, 0xfb, 0x40, 0x30, 0x68, 0x28, 0x4e, 0x45, 0xa9, 0x90, 0x88, 0x68, 0x23,
|
||||
0x1a, 0x2d, 0x2b, 0x39, 0x71, 0x88, 0xe8, 0xc8, 0x81, 0x11, 0xa0, 0x15, 0x17, 0x85, 0xa2, 0x9b,
|
||||
0x9b, 0x5c, 0x9b, 0x2c, 0x22, 0xbd, 0xa4, 0xdd, 0xdf, 0x64, 0x32, 0x79, 0x30, 0x48, 0x44, 0x44,
|
||||
0x39, 0x97, 0x02, 0xf4, 0x85, 0xa5, 0x58, 0x8c, 0x8b, 0x06, 0x4a, 0x28, 0xae, 0x53, 0x2a, 0x9d,
|
||||
0x2e, 0x0f, 0x12, 0x7d, 0x20, 0x17, 0x3b, 0x11, 0x69, 0x80, 0xc5, 0x99, 0xbb, 0x18, 0xff, 0xba,
|
||||
0xd5, 0xa8, 0x51, 0x1b, 0xbc, 0x0f, 0x9d, 0x3c, 0x22, 0x52, 0xa2, 0x44, 0x99, 0x4c, 0x66, 0x2f,
|
||||
0x48, 0x44, 0x65, 0xb3, 0xb5, 0xc1, 0x6c, 0x36, 0x63, 0x71, 0x71, 0xd1, 0xe0, 0x80, 0x0a, 0xdf,
|
||||
0xfb, 0xfc, 0x08, 0x7e, 0xf9, 0xe6, 0x0d, 0x55, 0xe3, 0x5f, 0x36, 0xe1, 0xae, 0xd3, 0x84, 0x79,
|
||||
0xcf, 0x4d, 0x24, 0x53, 0x29, 0xa4, 0x4a, 0x94, 0xcd, 0x66, 0x8d, 0x20, 0x01, 0x79, 0x34, 0x33,
|
||||
0x83, 0xca, 0xca, 0x4a, 0xd4, 0xd5, 0xd5, 0xe1, 0xb3, 0xab, 0x57, 0x55, 0x48, 0x8c, 0xc5, 0x43,
|
||||
0x20, 0x2a, 0x6e, 0x5c, 0x0a, 0x7e, 0xfb, 0xfe, 0x2c, 0xc6, 0xae, 0x98, 0xb1, 0xfa, 0xf4, 0x3e,
|
||||
0x77, 0xa0, 0x57, 0x2e, 0x97, 0xd3, 0x40, 0x14, 0x0d, 0x41, 0xa8, 0x1f, 0x0e, 0x47, 0x2f, 0x5a,
|
||||
0x5a, 0x5a, 0xf0, 0xa9, 0xc3, 0x81, 0xd6, 0xd6, 0x56, 0x35, 0xff, 0xb8, 0x2c, 0x63, 0x82, 0xc5,
|
||||
0xb4, 0x17, 0x04, 0x6c, 0xe7, 0xd3, 0x18, 0xff, 0xaa, 0x09, 0xf7, 0xae, 0xbd, 0x88, 0x68, 0xd8,
|
||||
0x8b, 0xad, 0xad, 0x2d, 0x55, 0xf9, 0x7c, 0x5e, 0x03, 0x51, 0x3c, 0x3b, 0x3d, 0x89, 0xa0, 0xb1,
|
||||
0xa9, 0x09, 0xfd, 0x4e, 0x27, 0xbc, 0x5e, 0x2f, 0x2a, 0x2a, 0x2a, 0x30, 0x37, 0x3f, 0xcf, 0x4e,
|
||||
0xb7, 0xcc, 0xf3, 0xde, 0x0f, 0x44, 0x2b, 0x93, 0x08, 0xe0, 0x87, 0x1b, 0x2f, 0xe3, 0xc7, 0x2f,
|
||||
0x2c, 0x48, 0xc9, 0x61, 0x0e, 0x20, 0x6d, 0x6f, 0x6f, 0x6b, 0x20, 0x8a, 0x87, 0x1a, 0xff, 0xbb,
|
||||
0xc7, 0xa3, 0x16, 0x27, 0x27, 0xaf, 0x31, 0x67, 0x7d, 0x7d, 0x7d, 0x48, 0xb0, 0x11, 0xa5, 0xfc,
|
||||
0x7f, 0xba, 0xdd, 0xb6, 0x2f, 0x88, 0x96, 0x14, 0xfe, 0x03, 0x63, 0x83, 0xcf, 0xe1, 0xf2, 0x8d,
|
||||
0x6a, 0xd8, 0xbf, 0xb5, 0x73, 0x0d, 0x3f, 0x1a, 0xd6, 0x40, 0xd4, 0x03, 0x3a, 0x80, 0x9f, 0x5c,
|
||||
0xb8, 0xc0, 0x06, 0xc1, 0xa6, 0xc6, 0x35, 0x30, 0x30, 0x80, 0x63, 0x8d, 0x8d, 0xbc, 0xa9, 0x69,
|
||||
0x36, 0xa6, 0xff, 0x04, 0xda, 0x0c, 0x79, 0x38, 0x68, 0xf0, 0xba, 0x06, 0xba, 0xe5, 0xbd, 0xa5,
|
||||
0x81, 0x24, 0x29, 0xc6, 0x47, 0xd8, 0x6a, 0xb5, 0xc2, 0x62, 0xb1, 0xa0, 0xb3, 0xb3, 0x13, 0x9d,
|
||||
0x27, 0x4f, 0x72, 0xa8, 0xc9, 0x64, 0xc2, 0x0c, 0x1b, 0x90, 0x0c, 0x9b, 0x9e, 0x83, 0x40, 0x69,
|
||||
0x79, 0x95, 0x45, 0xf7, 0x12, 0x5c, 0xc3, 0x75, 0xc8, 0x24, 0xc3, 0x28, 0x16, 0x8b, 0x5c, 0x8a,
|
||||
0xa2, 0xe8, 0x40, 0xb1, 0x38, 0x7e, 0x75, 0xbb, 0x79, 0x6c, 0xbd, 0xbd, 0xbd, 0xe8, 0xef, 0xef,
|
||||
0xe7, 0x7d, 0x72, 0x32, 0x47, 0x0d, 0x0d, 0x0d, 0xe8, 0xe9, 0xe9, 0xe1, 0x8d, 0xfd, 0xf9, 0x8e,
|
||||
0xbd, 0x2c, 0xa8, 0x90, 0x4b, 0xe2, 0xc1, 0x48, 0x03, 0x1b, 0xfd, 0x17, 0x10, 0x8b, 0x78, 0x79,
|
||||
0x71, 0xbd, 0x54, 0x10, 0x4d, 0xd4, 0xc7, 0xe7, 0xce, 0xc1, 0xd6, 0xd6, 0xc6, 0x23, 0xe3, 0xcd,
|
||||
0x67, 0x7d, 0xa1, 0xc8, 0x86, 0x86, 0x86, 0x50, 0x5f, 0x5f, 0xcf, 0xc7, 0xb4, 0x1c, 0x48, 0x51,
|
||||
0x8a, 0x98, 0x1c, 0x3b, 0x85, 0xef, 0x06, 0x2a, 0x10, 0xfa, 0xeb, 0xfe, 0x1e, 0x88, 0x11, 0xc4,
|
||||
0x8a, 0xd7, 0xd6, 0xd6, 0xe2, 0xca, 0xe0, 0x20, 0x1f, 0x63, 0x9a, 0xb0, 0xe4, 0x6e, 0x5f, 0xfc,
|
||||
0x7e, 0x3f, 0x77, 0x3a, 0x35, 0x35, 0xc5, 0x41, 0xa5, 0x07, 0xf6, 0xc1, 0xc8, 0x31, 0x7e, 0x60,
|
||||
0x97, 0xfe, 0xbc, 0xa9, 0x83, 0x2b, 0x6a, 0x6c, 0xb4, 0x54, 0x10, 0x39, 0xe0, 0x87, 0xb2, 0xc4,
|
||||
0x0d, 0x1d, 0x38, 0x8a, 0x8c, 0xdc, 0xd0, 0xa8, 0x06, 0x9e, 0xba, 0x38, 0x4c, 0x38, 0x13, 0x5a,
|
||||
0x98, 0xba, 0xcc, 0x8b, 0x16, 0x0a, 0x05, 0x7e, 0x13, 0xd0, 0x46, 0x69, 0xf3, 0xf4, 0x9b, 0x65,
|
||||
0xdf, 0x6b, 0x20, 0xf6, 0x40, 0x12, 0x20, 0x72, 0xc3, 0x40, 0xe4, 0x86, 0x3e, 0x12, 0x87, 0x8e,
|
||||
0x8a, 0x90, 0xe8, 0x5c, 0xe8, 0x1b, 0x4d, 0x8b, 0xfe, 0xa6, 0xf7, 0xa2, 0xec, 0x3c, 0xae, 0xac,
|
||||
0xac, 0x60, 0x69, 0x69, 0x89, 0x5f, 0x5f, 0x0b, 0x0b, 0x0b, 0x98, 0xf5, 0x3d, 0x2e, 0x58, 0xad,
|
||||
0xaf, 0x76, 0x68, 0x20, 0x36, 0xd2, 0x62, 0x17, 0x3c, 0x36, 0xe6, 0x86, 0x40, 0xc2, 0x8d, 0x80,
|
||||
0x08, 0x90, 0xbe, 0x07, 0xf4, 0xce, 0x1a, 0x3b, 0x87, 0xd3, 0xd3, 0xd3, 0xf0, 0xb0, 0xb3, 0x38,
|
||||
0x3b, 0x3b, 0x8b, 0xe5, 0xe5, 0x65, 0x3c, 0x99, 0x9b, 0x57, 0xce, 0xbe, 0xf7, 0xee, 0x45, 0xb6,
|
||||
0x17, 0x93, 0x11, 0xb4, 0xdb, 0x1f, 0x11, 0x5b, 0x56, 0x17, 0xdb, 0x7e, 0x6e, 0xe8, 0x19, 0xa5,
|
||||
0x41, 0x2e, 0x5c, 0x2e, 0x17, 0x7f, 0x9e, 0xcf, 0xe7, 0xe0, 0x7b, 0xec, 0x53, 0x3a, 0x4e, 0xbd,
|
||||
0xd5, 0x4d, 0x10, 0x15, 0x94, 0xd0, 0x83, 0xca, 0xf4, 0xe7, 0xa0, 0xd8, 0x68, 0x13, 0x61, 0x76,
|
||||
0x47, 0xfa, 0x7c, 0x3e, 0x4c, 0x4c, 0x4c, 0xb0, 0x6f, 0xb2, 0x70, 0x3f, 0x74, 0x17, 0x4f, 0xbf,
|
||||
0xf3, 0xf6, 0xfb, 0x02, 0x72, 0x28, 0x50, 0xb9, 0xfe, 0x88, 0xc8, 0x04, 0x28, 0xc8, 0x2e, 0x64,
|
||||
0x8a, 0x8b, 0xae, 0xb0, 0x91, 0xd1, 0xd1, 0xe4, 0xf1, 0xe3, 0xaf, 0x1f, 0xd5, 0x43, 0x54, 0x10,
|
||||
0x15, 0x56, 0xa7, 0x8d, 0x0d, 0x41, 0xa6, 0xa4, 0x3f, 0xa2, 0x37, 0xfb, 0x45, 0xb7, 0xce, 0xfe,
|
||||
0xcd, 0xb8, 0x27, 0x27, 0x95, 0x4b, 0x0e, 0xc7, 0x5c, 0x75, 0x75, 0xf5, 0xf3, 0xa5, 0x10, 0x0e,
|
||||
0xaa, 0xa9, 0xa9, 0x69, 0xec, 0xee, 0xee, 0x3e, 0xff, 0x2c, 0xea, 0xea, 0xfa, 0xe8, 0xfc, 0x9b,
|
||||
0x27, 0x3a, 0xba, 0xd8, 0x75, 0x65, 0x2e, 0x07, 0x21, 0xfd, 0x0d, 0x5a, 0x2f, 0x58, 0xe8, 0xa4,
|
||||
0x51, 0x14, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_hierarchical_label_xpm[1] = {{ png, sizeof( png ), "add_hierarchical_label_xpm" }};
|
||||
|
||||
@@ -8,34 +8,18 @@
|
||||
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, 0xa3, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0xd6, 0x3f, 0x6b, 0x93,
|
||||
0x51, 0x14, 0xc7, 0xf1, 0x4f, 0x93, 0x68, 0xb1, 0xad, 0x0a, 0x2a, 0x82, 0x50, 0x8b, 0x08, 0x0e,
|
||||
0x82, 0x83, 0x55, 0x42, 0x03, 0x15, 0xa9, 0xed, 0x93, 0x22, 0xb4, 0xda, 0x5a, 0x70, 0x11, 0x1b,
|
||||
0x33, 0x39, 0xb4, 0xd1, 0xc5, 0x46, 0xa7, 0x8a, 0xa0, 0x2f, 0x40, 0x7c, 0x01, 0xba, 0xf8, 0x0a,
|
||||
0x1c, 0x74, 0x76, 0x12, 0xc1, 0x97, 0xa2, 0xa3, 0xf4, 0x1f, 0x7d, 0xae, 0x83, 0x4f, 0x4a, 0x12,
|
||||
0x7d, 0xe2, 0x93, 0xc6, 0x8a, 0x43, 0x87, 0xdf, 0x76, 0xee, 0xfd, 0x72, 0xce, 0xf9, 0x9d, 0x7b,
|
||||
0xae, 0x10, 0x82, 0x5e, 0x84, 0xbe, 0x86, 0x3a, 0xc6, 0xf5, 0x04, 0x59, 0x15, 0x76, 0xc4, 0x31,
|
||||
0x14, 0xfe, 0x05, 0xa8, 0x8a, 0xe3, 0x69, 0x99, 0xfd, 0x4d, 0x50, 0x0d, 0x27, 0xf7, 0x41, 0x9d,
|
||||
0x01, 0x65, 0xe7, 0x44, 0x5e, 0x59, 0x10, 0x5c, 0x17, 0xdc, 0x12, 0x14, 0x7d, 0x74, 0xc1, 0x04,
|
||||
0x0e, 0xf4, 0x0c, 0xf2, 0x4c, 0xce, 0x94, 0x27, 0xca, 0xd6, 0x2c, 0xda, 0xb6, 0x24, 0x78, 0x24,
|
||||
0x58, 0x12, 0xdc, 0x15, 0x8b, 0x6c, 0x1a, 0xf7, 0xd2, 0x09, 0x87, 0xdb, 0x33, 0xeb, 0x0e, 0x34,
|
||||
0xad, 0x6e, 0xd6, 0x77, 0x2b, 0x4d, 0x25, 0x6b, 0xd6, 0x8a, 0x60, 0xc6, 0xba, 0x31, 0x6f, 0x70,
|
||||
0xb4, 0x19, 0x96, 0x1d, 0x12, 0x39, 0xaf, 0x6c, 0x4d, 0x3d, 0x05, 0xd2, 0xd0, 0x63, 0x41, 0x64,
|
||||
0xd3, 0x19, 0x55, 0x0c, 0xfc, 0x02, 0x42, 0x01, 0xfd, 0xa9, 0x8a, 0xbc, 0xb6, 0x28, 0xee, 0x08,
|
||||
0x69, 0xe8, 0x9e, 0x58, 0xc9, 0x27, 0x8c, 0x20, 0xbf, 0x03, 0xca, 0x74, 0x78, 0x5e, 0x50, 0xcb,
|
||||
0x10, 0xb7, 0x2a, 0x78, 0x28, 0x98, 0xf4, 0x15, 0x25, 0xf4, 0x77, 0x07, 0x9a, 0x16, 0xfe, 0x58,
|
||||
0xb6, 0xd6, 0xf2, 0x6d, 0xe3, 0x26, 0x06, 0xbb, 0x03, 0xcd, 0x75, 0x9d, 0xd1, 0x37, 0xdc, 0x68,
|
||||
0x05, 0xfd, 0xec, 0xcf, 0x08, 0x2e, 0xa1, 0xf8, 0x5b, 0x5d, 0xf5, 0x4e, 0x25, 0x63, 0x8f, 0xaa,
|
||||
0x62, 0x25, 0x5f, 0x30, 0xd6, 0x52, 0xba, 0x04, 0x96, 0xc7, 0xc1, 0x54, 0x5d, 0x71, 0x59, 0xd9,
|
||||
0x7a, 0x46, 0xd7, 0x6d, 0x39, 0xe5, 0x39, 0x4e, 0xb7, 0x98, 0x21, 0xb3, 0xc5, 0xa7, 0x3c, 0x35,
|
||||
0xd3, 0xc1, 0xe2, 0x75, 0xc1, 0xac, 0x0d, 0xa3, 0x3e, 0x24, 0x46, 0x38, 0xb4, 0xbb, 0x81, 0xbd,
|
||||
0x2d, 0x6f, 0xd2, 0x0b, 0x65, 0x1b, 0x2a, 0x62, 0xb5, 0xe4, 0xf2, 0x9a, 0xa0, 0x22, 0x16, 0xd9,
|
||||
0x32, 0xea, 0xbd, 0x82, 0x6b, 0x38, 0xb2, 0xab, 0x81, 0x6d, 0xd9, 0xa8, 0xe3, 0x2e, 0x9a, 0xf0,
|
||||
0xd6, 0x7c, 0xe2, 0xc6, 0x39, 0x41, 0xd1, 0x67, 0xc3, 0x6a, 0x38, 0x8b, 0x81, 0x9e, 0x9e, 0xa0,
|
||||
0x36, 0x60, 0xae, 0xed, 0xf5, 0x7e, 0x80, 0xe1, 0xb4, 0x2d, 0xbb, 0xbf, 0x8f, 0xfe, 0x0b, 0xd0,
|
||||
0xf2, 0xde, 0x81, 0x18, 0xc2, 0x02, 0xee, 0xe3, 0x4e, 0xf2, 0xe5, 0xda, 0x13, 0x50, 0x1f, 0x06,
|
||||
0x93, 0x99, 0x19, 0x42, 0x2e, 0x2d, 0xf6, 0x07, 0x38, 0xc8, 0x81, 0xcd, 0xab, 0xde, 0xd2, 0xd3,
|
||||
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x00, 0x9a, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0x3d, 0x30, 0x45, 0x9a, 0xfd, 0xfc, 0xfc, 0x3c, 0x7c, 0x7d, 0x7d, 0x13, 0x40, 0x34, 0x4d,
|
||||
0x2d, 0x82, 0x5a, 0xd2, 0x00, 0xa2, 0x47, 0x2d, 0x1a, 0xb5, 0x88, 0xf6, 0x16, 0x31, 0x34, 0x30,
|
||||
0x08, 0x28, 0x67, 0x28, 0x4f, 0x90, 0xcd, 0x93, 0xdd, 0x09, 0xa2, 0x41, 0x7c, 0xaa, 0x5b, 0xc4,
|
||||
0xd0, 0xcc, 0xe0, 0xc3, 0xd0, 0xc4, 0xf0, 0x02, 0x88, 0xff, 0x23, 0xe1, 0x17, 0x20, 0x71, 0xaa,
|
||||
0x59, 0x04, 0x34, 0x50, 0x17, 0x88, 0x7f, 0xa2, 0x59, 0x02, 0xc3, 0x20, 0x71, 0x5d, 0x9c, 0x16,
|
||||
0x79, 0x79, 0x79, 0x49, 0x04, 0x04, 0x04, 0x28, 0x10, 0x83, 0x59, 0x1a, 0x58, 0x76, 0xe1, 0xb0,
|
||||
0x04, 0x86, 0x37, 0xe0, 0xb4, 0x08, 0x16, 0xa9, 0xc4, 0x60, 0x96, 0x7a, 0x96, 0xcf, 0x04, 0x2c,
|
||||
0x7a, 0x36, 0xf0, 0x16, 0xd1, 0x2d, 0xe8, 0xe8, 0x96, 0x18, 0x06, 0x65, 0xf2, 0xa6, 0x6b, 0x86,
|
||||
0x1d, 0x2d, 0x54, 0x47, 0x2d, 0x1a, 0x38, 0x8b, 0xe8, 0xd6, 0xdc, 0x22, 0x05, 0x03, 0x00, 0x5f,
|
||||
0x00, 0xcf, 0xb1, 0x61, 0x8e, 0x75, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
|
||||
0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_junction_xpm[1] = {{ png, sizeof( png ), "add_junction_xpm" }};
|
||||
|
||||
@@ -8,72 +8,29 @@
|
||||
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, 0x0b, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0xd6, 0x5f, 0x4c, 0x53,
|
||||
0x57, 0x1c, 0x07, 0xf0, 0x5b, 0x4a, 0x59, 0x41, 0x18, 0xcc, 0x44, 0xd4, 0x42, 0x81, 0xd2, 0xd6,
|
||||
0x21, 0xd3, 0x0d, 0xc7, 0xc0, 0xc4, 0xd0, 0x0c, 0x1a, 0x61, 0xe8, 0x58, 0x04, 0x16, 0x15, 0x87,
|
||||
0x32, 0x08, 0x43, 0x83, 0xcc, 0x4c, 0x37, 0x56, 0xa0, 0x02, 0x86, 0xe0, 0xa4, 0x30, 0x81, 0xc1,
|
||||
0x1c, 0x6a, 0x41, 0xf9, 0x53, 0x6a, 0xe5, 0x6f, 0x0b, 0x88, 0x80, 0xe0, 0xda, 0x52, 0xda, 0x42,
|
||||
0xf4, 0x61, 0xcf, 0x4b, 0x7c, 0x59, 0x32, 0x93, 0xbd, 0x2c, 0xf1, 0xdf, 0x93, 0x8c, 0xef, 0x7a,
|
||||
0x6f, 0xd3, 0xd3, 0x15, 0xda, 0x72, 0xb7, 0x87, 0x3d, 0x7c, 0xdb, 0xdb, 0x7b, 0xcf, 0xf9, 0x7d,
|
||||
0xee, 0x39, 0x3d, 0xf7, 0x0f, 0x05, 0x80, 0xfa, 0x3f, 0xc2, 0x7c, 0xc4, 0xbe, 0x1d, 0xf4, 0x4b,
|
||||
0x94, 0x24, 0xe0, 0x35, 0x9d, 0xb4, 0x0c, 0xce, 0x6a, 0xe1, 0x29, 0xce, 0x5a, 0x45, 0x05, 0xb5,
|
||||
0x76, 0xfe, 0x3c, 0x85, 0xa2, 0x62, 0xce, 0x5a, 0xd6, 0x61, 0xce, 0x5f, 0xd1, 0x52, 0xe7, 0xf1,
|
||||
0xff, 0x90, 0x17, 0x04, 0x12, 0xef, 0x09, 0x7d, 0xd2, 0xa0, 0x56, 0xe1, 0x72, 0x6b, 0x2a, 0x6a,
|
||||
0xaa, 0x29, 0xaf, 0x69, 0xb8, 0x22, 0x85, 0xfa, 0x7e, 0x3f, 0x7a, 0x8d, 0x73, 0xac, 0x73, 0x7d,
|
||||
0x7a, 0x0c, 0x51, 0x52, 0xee, 0x6b, 0x0f, 0xe8, 0x92, 0x6a, 0x3d, 0xc2, 0xc1, 0xc5, 0xda, 0x10,
|
||||
0x8f, 0x7d, 0x8d, 0xcd, 0x89, 0xd0, 0x2d, 0x5b, 0x70, 0x77, 0xc5, 0xca, 0x2a, 0x34, 0xe6, 0x01,
|
||||
0xa5, 0x65, 0xf0, 0x9f, 0xba, 0x8a, 0x29, 0x6b, 0xb8, 0x68, 0xef, 0x2d, 0xc2, 0x80, 0x71, 0xd4,
|
||||
0xd1, 0x78, 0x09, 0x3d, 0xd3, 0xd7, 0x50, 0xdf, 0x10, 0x49, 0x30, 0x65, 0xf7, 0x51, 0xd4, 0x4c,
|
||||
0xb4, 0x42, 0x61, 0x68, 0xc1, 0x80, 0xed, 0xe7, 0x7f, 0x07, 0xe5, 0x1d, 0xe3, 0xfd, 0xe9, 0x2a,
|
||||
0xa4, 0xea, 0x90, 0x6d, 0xe8, 0xd0, 0x35, 0x5c, 0x43, 0xa0, 0xfc, 0x2a, 0x0a, 0x5c, 0x85, 0x33,
|
||||
0x1f, 0xb4, 0x1d, 0x80, 0x76, 0x79, 0x91, 0x3d, 0x54, 0x52, 0xca, 0x7d, 0xe5, 0x2a, 0x74, 0xd3,
|
||||
0xd0, 0xb4, 0xa1, 0xc3, 0x1d, 0xc7, 0x99, 0x2b, 0x95, 0x3c, 0xe6, 0xf8, 0x99, 0x6a, 0x37, 0x44,
|
||||
0x47, 0xf6, 0x63, 0x16, 0x74, 0x8e, 0x91, 0xb3, 0x82, 0x0a, 0x0a, 0x03, 0x9f, 0xb9, 0xa0, 0x1f,
|
||||
0xfa, 0x4a, 0x36, 0x74, 0x18, 0x5c, 0x9c, 0x22, 0x23, 0x3a, 0xb9, 0x0e, 0xa2, 0x93, 0x7d, 0x33,
|
||||
0x9f, 0x1d, 0x74, 0xf0, 0xd0, 0x1b, 0x7f, 0xd4, 0x56, 0x52, 0x68, 0xfa, 0x82, 0x83, 0xba, 0x4b,
|
||||
0x6f, 0x41, 0x63, 0x9e, 0x20, 0x8d, 0x75, 0x76, 0x13, 0x5a, 0xba, 0xb2, 0x09, 0x54, 0xd6, 0x24,
|
||||
0xc5, 0xc7, 0xea, 0x63, 0x4c, 0xc2, 0x6b, 0xc3, 0x09, 0xf6, 0xe9, 0xed, 0xe2, 0xcd, 0x21, 0xc9,
|
||||
0xde, 0xd0, 0x27, 0x5a, 0xf9, 0x56, 0x98, 0xb7, 0x71, 0x61, 0xd8, 0xcb, 0x45, 0xc7, 0x09, 0x2e,
|
||||
0x9a, 0x3b, 0xe5, 0x68, 0xeb, 0x39, 0x8e, 0xba, 0xfa, 0x70, 0xf7, 0x42, 0x70, 0x4c, 0x5f, 0xdf,
|
||||
0x82, 0x96, 0x14, 0xba, 0x7a, 0xa7, 0x15, 0x29, 0xc5, 0x7c, 0x82, 0x15, 0x0d, 0x9e, 0xf3, 0x0f,
|
||||
0xe5, 0x8a, 0x42, 0x7e, 0xb7, 0x08, 0x22, 0x61, 0x8e, 0x0c, 0x62, 0x30, 0x3a, 0x33, 0x62, 0x2e,
|
||||
0x5a, 0x4a, 0x38, 0x1e, 0xcb, 0xbb, 0x53, 0x53, 0xce, 0x14, 0x98, 0xe8, 0xbe, 0x01, 0x53, 0xce,
|
||||
0x61, 0x2c, 0x8b, 0xe2, 0x60, 0x16, 0xee, 0x40, 0xe1, 0x47, 0x3c, 0x06, 0x0a, 0x54, 0x70, 0x50,
|
||||
0x3e, 0xa4, 0xf4, 0x0d, 0xc9, 0xa4, 0x21, 0xbf, 0x8d, 0xe6, 0xe5, 0xc0, 0x26, 0x15, 0xc3, 0xb2,
|
||||
0x63, 0x0b, 0xc1, 0x4c, 0x91, 0x5c, 0xdc, 0xca, 0x0a, 0x40, 0x7d, 0x7d, 0x04, 0x6e, 0x8c, 0x37,
|
||||
0x62, 0xb2, 0xb3, 0x1d, 0x66, 0x79, 0x3a, 0x03, 0xd0, 0x59, 0x4c, 0xff, 0x10, 0xe3, 0x43, 0x5a,
|
||||
0x5c, 0x18, 0x6b, 0x44, 0x60, 0x55, 0x00, 0x83, 0xf1, 0x1c, 0xdf, 0x95, 0xfa, 0x2b, 0xde, 0x21,
|
||||
0xfa, 0x82, 0x6d, 0x1e, 0x54, 0x63, 0x78, 0x61, 0x0e, 0x33, 0xca, 0x2a, 0x2c, 0xbd, 0x93, 0x00,
|
||||
0xab, 0x70, 0x3b, 0xac, 0xd1, 0xdb, 0x60, 0x8b, 0x11, 0xc0, 0x94, 0x99, 0x81, 0x87, 0xc7, 0x8f,
|
||||
0x12, 0xc0, 0x2e, 0x11, 0x63, 0x56, 0xf1, 0x0d, 0x86, 0x6c, 0xee, 0xa5, 0x7d, 0xfa, 0xae, 0x82,
|
||||
0x4c, 0x21, 0xbf, 0x9a, 0x87, 0xba, 0xa9, 0x0e, 0xdf, 0x90, 0xab, 0xd3, 0xc8, 0x83, 0xfb, 0xee,
|
||||
0xc2, 0x31, 0x42, 0x3c, 0x0a, 0x0b, 0x73, 0x24, 0x14, 0xcb, 0xb1, 0x31, 0x58, 0x7a, 0x7f, 0x1f,
|
||||
0xc6, 0x47, 0x74, 0x5e, 0x57, 0xd9, 0x89, 0xfe, 0x33, 0x04, 0xdb, 0xa2, 0x0c, 0x46, 0xbd, 0xa1,
|
||||
0xd3, 0x3f, 0xe4, 0xca, 0x6c, 0xe5, 0xd7, 0x0c, 0xf2, 0x98, 0xcf, 0x67, 0xf2, 0x28, 0x22, 0x02,
|
||||
0xfa, 0x81, 0x5e, 0xbf, 0x77, 0x83, 0x4f, 0xba, 0x0b, 0x08, 0xf6, 0xe6, 0xc5, 0x30, 0x6c, 0x4f,
|
||||
0x0e, 0x58, 0xf5, 0x0b, 0xdd, 0x53, 0x7d, 0x07, 0xbb, 0x54, 0x82, 0x95, 0xe8, 0x28, 0x3c, 0x0e,
|
||||
0x09, 0x61, 0xb2, 0x22, 0x8c, 0x86, 0xf9, 0xa0, 0x1c, 0x43, 0x56, 0xb3, 0x4f, 0x88, 0xbe, 0x78,
|
||||
0xd3, 0x7f, 0x3a, 0x44, 0xb0, 0xa0, 0x2f, 0x69, 0xc2, 0x07, 0x34, 0x79, 0xad, 0xc3, 0x31, 0x6d,
|
||||
0x22, 0xf7, 0x7f, 0xe2, 0x00, 0xed, 0x12, 0x09, 0xf9, 0x3d, 0x5f, 0x56, 0xea, 0x77, 0x54, 0xf4,
|
||||
0x6d, 0x29, 0xa5, 0x3d, 0xcd, 0x89, 0x55, 0xfa, 0x80, 0xe8, 0xf9, 0xb7, 0xed, 0x4e, 0x20, 0x45,
|
||||
0x6d, 0x89, 0xbb, 0x31, 0xae, 0xd3, 0x40, 0xaf, 0xed, 0x67, 0xb6, 0x5d, 0xfb, 0xa7, 0xda, 0xbe,
|
||||
0xf7, 0x8b, 0x69, 0x6c, 0x46, 0x24, 0xaa, 0xde, 0x05, 0xf7, 0x5b, 0x2f, 0x10, 0xbd, 0xea, 0x96,
|
||||
0x52, 0x53, 0x48, 0x31, 0x3a, 0xf7, 0xae, 0x36, 0x93, 0xce, 0x7a, 0x4d, 0x1f, 0x39, 0x09, 0x6b,
|
||||
0xd2, 0x7b, 0x18, 0x36, 0x2d, 0xf8, 0xc5, 0xba, 0xe6, 0xf5, 0xe0, 0x9f, 0xe6, 0xac, 0x6d, 0x80,
|
||||
0x16, 0x8a, 0x8b, 0x3c, 0x10, 0x63, 0xee, 0x91, 0x0d, 0x9d, 0x0d, 0xbd, 0x3d, 0xb0, 0xc7, 0x3b,
|
||||
0xa7, 0x75, 0xee, 0xdc, 0xd9, 0x4d, 0x1f, 0x13, 0x3b, 0xf7, 0xac, 0x5b, 0x75, 0xd7, 0x2f, 0xd7,
|
||||
0x7a, 0xfc, 0x2f, 0xf4, 0x99, 0x8f, 0x4e, 0x4f, 0x7a, 0x2d, 0xf0, 0xa0, 0xa2, 0x9c, 0x5c, 0x4f,
|
||||
0x63, 0x86, 0x51, 0xf6, 0x8f, 0x09, 0xa9, 0x03, 0x9a, 0x4b, 0x4e, 0xf2, 0x18, 0xcd, 0x4c, 0xb5,
|
||||
0xc2, 0x67, 0x81, 0xa1, 0x45, 0x23, 0x2c, 0xfb, 0x53, 0x9d, 0xa3, 0xce, 0x3b, 0xc2, 0x1e, 0xca,
|
||||
0x8f, 0x0b, 0x7e, 0x6a, 0x89, 0x12, 0xfc, 0x63, 0x01, 0x24, 0x62, 0xd8, 0x38, 0xef, 0x77, 0x5a,
|
||||
0x0c, 0xb7, 0xd4, 0xa4, 0xbd, 0xbe, 0xff, 0x36, 0x3b, 0x88, 0x9e, 0xba, 0x81, 0xb3, 0xa5, 0xb0,
|
||||
0x8b, 0xe3, 0x99, 0x8e, 0xb3, 0x17, 0xbe, 0x62, 0xf5, 0x4e, 0xb0, 0xf0, 0xf9, 0x29, 0xa6, 0xfd,
|
||||
0xc3, 0xcf, 0x0a, 0xd8, 0x41, 0xa2, 0xc4, 0xe0, 0x5f, 0x93, 0x64, 0xb1, 0x2f, 0x4f, 0xa6, 0xc4,
|
||||
0xbe, 0x1c, 0xd9, 0x1a, 0xba, 0x2a, 0x4f, 0xdf, 0xf5, 0x7c, 0x7f, 0x66, 0xc2, 0xb3, 0xcd, 0x92,
|
||||
0x2d, 0x93, 0xbc, 0xa0, 0xdb, 0x97, 0xed, 0x13, 0xbe, 0xf2, 0x76, 0x3c, 0x55, 0xbe, 0xeb, 0x39,
|
||||
0xfd, 0xca, 0x45, 0x20, 0x81, 0x98, 0x3a, 0xb0, 0x53, 0x4c, 0x65, 0xd3, 0x49, 0x8e, 0xa3, 0x72,
|
||||
0x5d, 0xdb, 0x6c, 0x22, 0x8d, 0xa7, 0x72, 0xfc, 0x1d, 0x17, 0x88, 0xa8, 0x4c, 0xda, 0xf8, 0x1b,
|
||||
0x60, 0x76, 0x60, 0xa1, 0x4e, 0x22, 0xae, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
|
||||
0xce, 0x00, 0x00, 0x01, 0x5b, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xcd, 0x96, 0x31, 0x6e, 0xc2,
|
||||
0x30, 0x14, 0x86, 0x0d, 0x2c, 0x28, 0xf6, 0x05, 0x98, 0x7a, 0x11, 0x24, 0x7a, 0x8d, 0x74, 0x67,
|
||||
0x66, 0x40, 0x62, 0x86, 0x99, 0x81, 0xb5, 0x67, 0xe8, 0xc6, 0xc0, 0xd2, 0xa5, 0x07, 0x48, 0x07,
|
||||
0x12, 0xa4, 0x5e, 0xa1, 0xc7, 0x80, 0xf7, 0x9b, 0xa4, 0x3c, 0x1b, 0xc7, 0x38, 0xa9, 0x03, 0x20,
|
||||
0x3d, 0x62, 0x39, 0xb6, 0x3f, 0xbd, 0xcf, 0x2f, 0x71, 0x84, 0x58, 0x8a, 0xe3, 0x5d, 0x02, 0x7f,
|
||||
0xf4, 0xc3, 0x75, 0x4c, 0xf1, 0x5b, 0x5e, 0x63, 0xb7, 0xcf, 0xa0, 0x8e, 0x21, 0x63, 0x0e, 0xca,
|
||||
0xd0, 0x51, 0x66, 0xe6, 0x6e, 0xaf, 0xc4, 0xbc, 0x4d, 0xdb, 0x00, 0x31, 0x75, 0x19, 0xda, 0xb1,
|
||||
0xc2, 0xab, 0xce, 0x35, 0xe1, 0x67, 0x38, 0x7c, 0x29, 0x92, 0x64, 0x9a, 0x4b, 0xb9, 0xce, 0x95,
|
||||
0xda, 0xea, 0xa0, 0x36, 0xfa, 0x70, 0xef, 0x06, 0xc4, 0x50, 0xe7, 0x86, 0x08, 0xd1, 0x2f, 0xa4,
|
||||
0x7c, 0xdb, 0x4b, 0xf9, 0x49, 0xd7, 0x2f, 0x57, 0xe0, 0x1e, 0x41, 0x53, 0x8c, 0x35, 0x40, 0x2e,
|
||||
0x75, 0xac, 0x23, 0xe3, 0x10, 0x5a, 0x60, 0x53, 0x07, 0xb0, 0x03, 0x63, 0xaf, 0x60, 0x21, 0xea,
|
||||
0x90, 0x89, 0xb1, 0x98, 0x52, 0xef, 0x14, 0x93, 0xef, 0x24, 0x19, 0x21, 0x0e, 0x4a, 0xbd, 0x52,
|
||||
0xff, 0xce, 0x82, 0xa5, 0x8d, 0xd4, 0xc1, 0x3b, 0xd7, 0x45, 0x0b, 0xcc, 0x3e, 0x84, 0x18, 0xb0,
|
||||
0x6c, 0x7b, 0xd4, 0xbf, 0x70, 0x69, 0xac, 0xf6, 0xcc, 0xaf, 0x8e, 0x6e, 0xea, 0x6c, 0x68, 0x93,
|
||||
0x79, 0x26, 0x01, 0x90, 0x4b, 0x66, 0x34, 0x37, 0x58, 0x9d, 0xae, 0xa8, 0x0b, 0x68, 0x72, 0x03,
|
||||
0xb2, 0x28, 0x35, 0x56, 0xd9, 0xaf, 0x83, 0xd5, 0xa1, 0x7c, 0xab, 0x89, 0xd8, 0x0f, 0x1f, 0x04,
|
||||
0xfd, 0x18, 0xf3, 0x07, 0xa2, 0xb9, 0xc1, 0xea, 0xae, 0x40, 0x1e, 0x08, 0xc6, 0xbb, 0x40, 0x8d,
|
||||
0xd5, 0x95, 0x5a, 0x6a, 0x21, 0x7a, 0x4f, 0x49, 0x6f, 0x2b, 0x75, 0x46, 0x31, 0x58, 0x25, 0x6c,
|
||||
0x43, 0x50, 0x28, 0xba, 0xf4, 0xad, 0x62, 0x08, 0x52, 0x67, 0x97, 0xb7, 0x0f, 0x82, 0xd2, 0x77,
|
||||
0x95, 0x77, 0xfb, 0x07, 0x96, 0x32, 0x83, 0xc6, 0xea, 0x81, 0xd5, 0xba, 0x78, 0x26, 0x6d, 0x1e,
|
||||
0xd8, 0x18, 0xaf, 0xa0, 0x20, 0x75, 0x31, 0x5e, 0xaa, 0x4f, 0x7a, 0x4c, 0xfc, 0xe7, 0xd0, 0xe3,
|
||||
0xa7, 0x6d, 0x9d, 0xba, 0xd8, 0xed, 0x87, 0x7c, 0x9c, 0x74, 0x06, 0xb1, 0xd5, 0x75, 0x1e, 0x27,
|
||||
0x81, 0x0d, 0x43, 0x7e, 0x87, 0x6e, 0x2b, 0x40, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
|
||||
0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
|
||||
@@ -8,26 +8,21 @@
|
||||
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, 0x1c, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0xd6, 0xbb, 0x4a, 0xc3,
|
||||
0x50, 0x00, 0x80, 0xe1, 0xaf, 0xa9, 0x31, 0xf5, 0x42, 0xad, 0xe0, 0x05, 0xa4, 0x82, 0xe8, 0x26,
|
||||
0x08, 0x0a, 0x82, 0x6b, 0xf1, 0x01, 0x74, 0x72, 0x53, 0xb4, 0xa0, 0x5d, 0xd4, 0x82, 0x7b, 0x0b,
|
||||
0x3e, 0xac, 0x83, 0xab, 0x9b, 0x94, 0xd6, 0x38, 0x18, 0x24, 0xd2, 0x0a, 0x49, 0x8c, 0x1d, 0xc4,
|
||||
0xe1, 0xdf, 0x0e, 0x7c, 0x9c, 0xc3, 0xb9, 0x89, 0xe3, 0xd8, 0x34, 0xf2, 0x0f, 0x95, 0x02, 0xa1,
|
||||
0x82, 0xc0, 0x99, 0xaa, 0x96, 0x19, 0x1d, 0xa1, 0x8e, 0xd0, 0x99, 0x59, 0x5d, 0x91, 0xae, 0xc8,
|
||||
0x95, 0x1a, 0x2a, 0x85, 0x20, 0x7d, 0x4f, 0xfa, 0xe2, 0xcc, 0xb1, 0x84, 0xb0, 0x08, 0xf4, 0x9c,
|
||||
0x13, 0x3a, 0xc6, 0x2a, 0x82, 0xdf, 0x86, 0xae, 0xb1, 0x85, 0xea, 0xef, 0x42, 0x81, 0x5b, 0x6c,
|
||||
0xe7, 0x87, 0x1e, 0xd5, 0x9d, 0x5a, 0xb7, 0xe2, 0x44, 0xc3, 0x85, 0x7a, 0xd2, 0x82, 0x73, 0x4d,
|
||||
0x37, 0x13, 0xa0, 0xbb, 0x42, 0x50, 0xb2, 0xe3, 0x02, 0x2c, 0x27, 0x6b, 0xbf, 0xf6, 0xd9, 0x9e,
|
||||
0xed, 0x52, 0xa1, 0xd4, 0xf6, 0xfe, 0xda, 0xad, 0xc5, 0x31, 0x28, 0xfc, 0x21, 0x34, 0x71, 0xc0,
|
||||
0x83, 0xb9, 0x09, 0xd0, 0x7d, 0xf9, 0xd0, 0xbd, 0xe8, 0x1b, 0x68, 0xa7, 0x5c, 0xa8, 0x23, 0x1c,
|
||||
0x83, 0x22, 0xdd, 0xf2, 0xa1, 0x47, 0xc1, 0x54, 0xa0, 0xe4, 0x9c, 0x4d, 0x0d, 0x7a, 0xcb, 0x75,
|
||||
0xa0, 0xd3, 0xb5, 0x35, 0xf2, 0x40, 0xc3, 0xc2, 0xd0, 0xa6, 0x0d, 0x04, 0x59, 0xa1, 0x41, 0x61,
|
||||
0x88, 0x23, 0x44, 0x59, 0xa1, 0x17, 0x7d, 0xaf, 0x7a, 0x06, 0x7a, 0x86, 0xa9, 0x46, 0x7a, 0x46,
|
||||
0xfa, 0x46, 0xc9, 0xf2, 0xa6, 0x8b, 0xf5, 0x0c, 0xd1, 0x42, 0x2d, 0xfb, 0x7b, 0xc2, 0x0c, 0x76,
|
||||
0x71, 0x89, 0x4e, 0xc6, 0xda, 0xb9, 0x66, 0x94, 0xba, 0x0b, 0x57, 0xb1, 0x8f, 0xc3, 0x8c, 0x1d,
|
||||
0xa0, 0x89, 0x6a, 0xbe, 0xe7, 0xf8, 0x63, 0x56, 0xf3, 0x39, 0x0b, 0x51, 0xf9, 0x7b, 0xbf, 0xa0,
|
||||
0x77, 0x8b, 0xee, 0xb5, 0x1a, 0xc3, 0xc3, 0xe7, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e,
|
||||
0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x00, 0xc8, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0xd6, 0x39, 0x0a, 0xc2,
|
||||
0x60, 0x14, 0x45, 0xe1, 0xf3, 0x62, 0x9c, 0x10, 0xb1, 0x71, 0x0f, 0x6e, 0xc5, 0x4e, 0x0b, 0x37,
|
||||
0x22, 0x29, 0x5c, 0x43, 0x0a, 0x71, 0x27, 0x62, 0xe9, 0x8e, 0x6c, 0x6c, 0xc4, 0x22, 0x71, 0x20,
|
||||
0xcf, 0x42, 0x10, 0xc4, 0x29, 0xff, 0xf0, 0xbc, 0x1b, 0xf8, 0xb8, 0xdd, 0x11, 0x55, 0xc5, 0x6a,
|
||||
0xb2, 0x94, 0x21, 0x57, 0x2e, 0xba, 0xd0, 0x83, 0x58, 0x41, 0xb2, 0x92, 0x31, 0x15, 0x6b, 0xa0,
|
||||
0xa4, 0xc5, 0x28, 0x35, 0x44, 0x36, 0x40, 0x1b, 0xa8, 0x28, 0x28, 0x53, 0x63, 0xe4, 0x44, 0xc2,
|
||||
0x4c, 0x33, 0x3d, 0x26, 0xc6, 0xc8, 0x54, 0xe7, 0xba, 0x05, 0x48, 0xfe, 0x81, 0x44, 0x83, 0x7e,
|
||||
0x21, 0x51, 0xa0, 0x3a, 0x48, 0x30, 0x54, 0x17, 0x09, 0x82, 0x5c, 0x10, 0x6f, 0xc8, 0x15, 0xf1,
|
||||
0x82, 0x7c, 0x10, 0x67, 0xc8, 0x17, 0x71, 0x82, 0x42, 0x90, 0xda, 0x50, 0x28, 0x52, 0x0b, 0x8a,
|
||||
0x81, 0xfc, 0x84, 0x62, 0x21, 0x5f, 0xa1, 0x98, 0xc8, 0x47, 0x28, 0x36, 0xf2, 0x16, 0xb2, 0x40,
|
||||
0x5e, 0x20, 0x2b, 0xe4, 0x09, 0xb2, 0x44, 0x1e, 0x90, 0x35, 0x02, 0x20, 0xe4, 0xf4, 0x69, 0xb0,
|
||||
0x03, 0x7a, 0x56, 0xc8, 0xfd, 0x51, 0x97, 0x0e, 0x70, 0x06, 0x0a, 0x60, 0x62, 0x81, 0x00, 0x88,
|
||||
0xaa, 0x22, 0xb9, 0x0c, 0x48, 0x69, 0x6a, 0xa6, 0x7b, 0xab, 0x98, 0xbc, 0x01, 0x94, 0x80, 0xb4,
|
||||
0x07, 0xac, 0x24, 0x12, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
|
||||
0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_line_xpm[1] = {{ png, sizeof( png ), "add_line_xpm" }};
|
||||
|
||||
@@ -8,54 +8,23 @@
|
||||
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, 0xe6, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xdd, 0xd6, 0x5f, 0x68, 0xd6,
|
||||
0x55, 0x1c, 0xc7, 0xf1, 0xd7, 0xe6, 0xfe, 0xe9, 0xf6, 0xac, 0x3d, 0x7b, 0x36, 0x33, 0x2c, 0xad,
|
||||
0xdc, 0x9a, 0xfd, 0xc7, 0xa1, 0x2c, 0xb4, 0xed, 0x69, 0x7b, 0xb2, 0xc8, 0x36, 0xd8, 0x9f, 0xb6,
|
||||
0x1c, 0x14, 0x95, 0x59, 0x82, 0xa8, 0xc8, 0x12, 0xf7, 0xef, 0xf9, 0xc5, 0xee, 0xa2, 0xc0, 0xd5,
|
||||
0x45, 0x8d, 0x02, 0xbd, 0x89, 0x84, 0xba, 0x69, 0xdd, 0x08, 0x51, 0x5d, 0x94, 0x34, 0x36, 0x23,
|
||||
0xb0, 0x91, 0x46, 0x44, 0x11, 0x41, 0xb7, 0x11, 0x19, 0x52, 0xd8, 0xc5, 0xaf, 0x9b, 0xb3, 0x61,
|
||||
0xd3, 0xfd, 0xb6, 0x56, 0x74, 0xd1, 0xc5, 0xfb, 0xe6, 0x07, 0xe7, 0xbc, 0xcf, 0xf7, 0x9c, 0xcf,
|
||||
0xef, 0x7b, 0x8e, 0x38, 0x8e, 0xfd, 0x17, 0xf8, 0xff, 0x8a, 0x6a, 0x6a, 0xa6, 0xb3, 0x99, 0xcc,
|
||||
0x54, 0x57, 0x75, 0xf5, 0xe9, 0x9e, 0xea, 0xea, 0x4f, 0x7a, 0x32, 0x99, 0xc9, 0x06, 0xac, 0x42,
|
||||
0xc1, 0x15, 0x83, 0x46, 0x6d, 0x37, 0xa2, 0xcb, 0x90, 0x1e, 0x83, 0x09, 0xec, 0x51, 0x3b, 0x37,
|
||||
0xc7, 0xfc, 0xe0, 0x4c, 0x66, 0x66, 0x26, 0x93, 0x99, 0x89, 0xe7, 0xa8, 0xaa, 0x7a, 0x6f, 0x0c,
|
||||
0x35, 0x28, 0x5e, 0x20, 0x39, 0x2c, 0xef, 0x53, 0x91, 0x78, 0x49, 0xfa, 0x75, 0x20, 0x8d, 0xa2,
|
||||
0xcb, 0x44, 0xd3, 0x67, 0x2e, 0x17, 0x55, 0x56, 0x4e, 0x4c, 0x60, 0x0b, 0x2a, 0xe6, 0x25, 0x79,
|
||||
0x43, 0x22, 0xb1, 0x61, 0x9f, 0x2d, 0x4b, 0xd4, 0x6a, 0x3f, 0x36, 0x63, 0xf5, 0xa2, 0xa2, 0x54,
|
||||
0xea, 0x95, 0xe3, 0xd8, 0x8e, 0xca, 0x20, 0x19, 0x0b, 0x13, 0xfc, 0xe1, 0x29, 0xc7, 0xec, 0xf6,
|
||||
0xa2, 0x47, 0xbd, 0xa4, 0xd7, 0x31, 0xbd, 0xc6, 0xaf, 0xca, 0x46, 0xdd, 0xb8, 0x0d, 0x6b, 0x12,
|
||||
0x44, 0x2f, 0x9f, 0x98, 0x13, 0xc9, 0x7b, 0x21, 0x48, 0x2e, 0xe9, 0x35, 0x84, 0x1c, 0xb6, 0x85,
|
||||
0xd5, 0xde, 0x92, 0xc0, 0x26, 0xac, 0x45, 0xf1, 0xd2, 0xa2, 0x41, 0x13, 0x22, 0xb1, 0xbc, 0xdf,
|
||||
0x75, 0x19, 0x08, 0x92, 0x2d, 0xa8, 0xc5, 0x1a, 0x94, 0x25, 0x50, 0x8a, 0xe2, 0x05, 0x61, 0x58,
|
||||
0x28, 0x1a, 0x3f, 0xe1, 0x80, 0x77, 0x43, 0x25, 0x17, 0x3d, 0xec, 0x20, 0x72, 0x5a, 0xf5, 0x18,
|
||||
0x76, 0x4a, 0xe4, 0x97, 0x25, 0x79, 0x46, 0x16, 0xab, 0x51, 0xb8, 0xa8, 0xa8, 0xa4, 0xa3, 0xe5,
|
||||
0x4c, 0xa8, 0xe4, 0x57, 0x3b, 0xed, 0x43, 0xce, 0x83, 0xfa, 0xe4, 0xfd, 0x64, 0xd4, 0xd4, 0xb2,
|
||||
0xc2, 0xf0, 0x80, 0xa7, 0xc3, 0xf6, 0x95, 0x2e, 0x2a, 0x2a, 0xee, 0x6b, 0x9c, 0x35, 0xe2, 0x82,
|
||||
0x16, 0xcf, 0xa2, 0xcd, 0x2e, 0xfd, 0x22, 0x3f, 0x8b, 0xc4, 0x06, 0x9c, 0x72, 0xc4, 0x59, 0xcf,
|
||||
0x99, 0x35, 0xe0, 0xcb, 0x45, 0xd9, 0x66, 0x2f, 0xee, 0x48, 0x0c, 0x43, 0x49, 0x7b, 0x76, 0x46,
|
||||
0x93, 0x7d, 0xc8, 0xea, 0xf4, 0xb8, 0xbc, 0x0b, 0x22, 0xb1, 0xc3, 0x26, 0x15, 0xc9, 0xe1, 0x5e,
|
||||
0x34, 0xe1, 0x9e, 0x04, 0xb6, 0xe2, 0xa6, 0xc4, 0x8a, 0x52, 0xa9, 0xf1, 0x13, 0x68, 0xd3, 0xe3,
|
||||
0x09, 0x91, 0x8b, 0x22, 0xb1, 0x43, 0xde, 0xc1, 0xfd, 0x21, 0x8d, 0x1b, 0x51, 0x85, 0xca, 0x04,
|
||||
0x52, 0x21, 0x14, 0x85, 0xc9, 0xa9, 0x6b, 0x37, 0x20, 0xf2, 0x9b, 0x48, 0xec, 0x80, 0x37, 0x91,
|
||||
0x53, 0xa6, 0xd9, 0x21, 0x63, 0x86, 0xbd, 0x66, 0xc4, 0xab, 0x89, 0xec, 0xd1, 0xb0, 0x64, 0xea,
|
||||
0xca, 0x9a, 0xfa, 0xdf, 0x17, 0xb9, 0x24, 0x12, 0xdb, 0xef, 0x38, 0x72, 0x2a, 0x34, 0x1b, 0xf4,
|
||||
0x81, 0x51, 0xd3, 0xcb, 0x0a, 0x43, 0xa7, 0x3e, 0x5c, 0x87, 0x92, 0x45, 0x45, 0x45, 0xfd, 0x77,
|
||||
0x9d, 0x13, 0x89, 0xed, 0xf5, 0x3a, 0x72, 0xaa, 0xb4, 0x18, 0xf2, 0x71, 0x68, 0x41, 0x9f, 0x2f,
|
||||
0x4b, 0x94, 0x75, 0x10, 0xb7, 0x27, 0x86, 0xa1, 0x68, 0xf7, 0xdd, 0xe7, 0x3c, 0xe6, 0x0d, 0xb4,
|
||||
0xa9, 0xd5, 0x62, 0x38, 0x34, 0xd2, 0x51, 0x3f, 0x6a, 0xf6, 0xa4, 0x7a, 0xdd, 0xea, 0x75, 0xab,
|
||||
0xd3, 0xab, 0x4e, 0xdf, 0x55, 0x29, 0x93, 0x43, 0x43, 0x62, 0xaf, 0x2b, 0xbf, 0xf1, 0xe8, 0xdb,
|
||||
0xd8, 0xe9, 0x06, 0xcd, 0xf3, 0x4d, 0x74, 0xd4, 0x0f, 0xee, 0xd4, 0x8b, 0xd6, 0xb0, 0xd2, 0xf5,
|
||||
0x58, 0x97, 0xc0, 0xda, 0x10, 0x8a, 0x55, 0xc9, 0x61, 0xb8, 0xde, 0x2e, 0x23, 0xce, 0x8a, 0xc4,
|
||||
0x46, 0x7c, 0xeb, 0x56, 0xdd, 0x41, 0xb2, 0x39, 0x4c, 0x50, 0x14, 0xee, 0x9b, 0x24, 0x0a, 0x13,
|
||||
0xc3, 0x50, 0xbe, 0xfe, 0xf9, 0x93, 0x8e, 0xfa, 0x26, 0x9c, 0xc9, 0xd7, 0x36, 0xe9, 0xc4, 0x7d,
|
||||
0x61, 0x2b, 0x52, 0x28, 0x5c, 0xd1, 0x0d, 0x7b, 0x45, 0x67, 0x78, 0x64, 0xeb, 0x17, 0x22, 0xb1,
|
||||
0x21, 0xe7, 0x6d, 0xd0, 0x81, 0x2c, 0xea, 0x51, 0xf1, 0x77, 0x25, 0xc9, 0xa2, 0xbe, 0xc6, 0x59,
|
||||
0x47, 0x9c, 0x77, 0xad, 0x0e, 0xb4, 0xa0, 0x6e, 0xa5, 0x92, 0x05, 0xa2, 0xa9, 0xb7, 0xaa, 0xab,
|
||||
0x4f, 0x7f, 0x95, 0x4e, 0x7f, 0xf4, 0x5d, 0x3a, 0xfd, 0xe1, 0xf7, 0xa5, 0xcd, 0x0f, 0x4d, 0x4a,
|
||||
0x6b, 0xc7, 0x0e, 0xdc, 0x8c, 0xf2, 0x95, 0x4a, 0xfe, 0x22, 0x0a, 0x7f, 0xf0, 0xba, 0xd0, 0x9f,
|
||||
0x76, 0x04, 0x1a, 0xb1, 0x21, 0xdc, 0x3b, 0x05, 0xff, 0xca, 0x2b, 0x08, 0x05, 0x28, 0x09, 0x07,
|
||||
0x7d, 0x4d, 0x20, 0x15, 0xbe, 0x15, 0xfc, 0xd3, 0xe7, 0xd6, 0x9f, 0x1e, 0x7d, 0x26, 0xf7, 0xe9,
|
||||
0x43, 0xf5, 0xec, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x00, 0xf3, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0xb5, 0xb1, 0x9f, 0x9f, 0x5f, 0x03, 0x32, 0x06, 0x89, 0x31, 0xd0, 0xd5, 0x22, 0x5f, 0x5f,
|
||||
0xdf, 0x04, 0x62, 0xb0, 0x51, 0x8a, 0x51, 0x35, 0x67, 0x1b, 0xe7, 0x46, 0x86, 0x6e, 0x86, 0x40,
|
||||
0xb2, 0x2c, 0x42, 0x97, 0xc0, 0x85, 0x85, 0x6b, 0x85, 0xcf, 0x31, 0xf4, 0x30, 0xfc, 0x87, 0xe2,
|
||||
0xb9, 0x0c, 0x53, 0x19, 0x78, 0x68, 0xe2, 0x23, 0xad, 0x2c, 0xad, 0x76, 0xc6, 0x1e, 0xc6, 0x8f,
|
||||
0x48, 0x96, 0xdd, 0x02, 0x62, 0x53, 0x9a, 0xc4, 0x11, 0x43, 0x27, 0x83, 0x0c, 0xd0, 0xf0, 0xfd,
|
||||
0x48, 0x96, 0xfd, 0x02, 0x06, 0x65, 0x25, 0x43, 0x03, 0x03, 0x13, 0xd5, 0x13, 0x03, 0xc8, 0x50,
|
||||
0xb0, 0xe1, 0x20, 0x4b, 0x10, 0x16, 0xee, 0x07, 0x39, 0x82, 0x26, 0xa9, 0x0e, 0x14, 0x6c, 0xd0,
|
||||
0xe0, 0x83, 0x59, 0xf6, 0x0e, 0x88, 0x43, 0x68, 0x92, 0xbc, 0x41, 0x09, 0x02, 0x9c, 0x30, 0x10,
|
||||
0x96, 0xfd, 0x07, 0x25, 0x1a, 0xb7, 0x10, 0xb7, 0x36, 0x9a, 0xe4, 0x23, 0x90, 0x4f, 0xa0, 0x3e,
|
||||
0x02, 0x5b, 0xc6, 0xd6, 0xc6, 0xf6, 0xd6, 0x38, 0xd9, 0x78, 0x16, 0x4d, 0xf2, 0x11, 0x7a, 0x42,
|
||||
0x61, 0xec, 0x62, 0xfc, 0xed, 0x16, 0xea, 0xd6, 0x4e, 0x93, 0x7c, 0x04, 0x4a, 0x28, 0xd2, 0x65,
|
||||
0xd2, 0x7b, 0x18, 0xbb, 0x19, 0xff, 0x32, 0x77, 0x32, 0x7f, 0x71, 0x0e, 0x77, 0xee, 0xa4, 0x69,
|
||||
0x3e, 0x02, 0xf9, 0x04, 0x64, 0xc9, 0x68, 0x3e, 0x1a, 0xcd, 0x47, 0xd8, 0xf3, 0x11, 0xd5, 0x2c,
|
||||
0x23, 0x94, 0x8f, 0xa8, 0x6a, 0x19, 0xbe, 0x7c, 0x44, 0x8b, 0xaa, 0x9c, 0xe2, 0x7c, 0x34, 0x34,
|
||||
0x1a, 0x27, 0xa3, 0x16, 0x91, 0x63, 0x11, 0x00, 0x40, 0x75, 0x3d, 0xbf, 0x04, 0x40, 0x34, 0xca,
|
||||
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_line2bus_xpm[1] = {{ png, sizeof( png ), "add_line2bus_xpm" }};
|
||||
|
||||
@@ -8,37 +8,25 @@
|
||||
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, 0xc8, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0x3d, 0x30, 0xc3, 0xc8, 0xb5, 0x08, 0x08, 0x4a, 0x80, 0xf8, 0x03, 0x14, 0x5f, 0x01, 0x62,
|
||||
0x46, 0x5a, 0x59, 0x74, 0x03, 0x88, 0xff, 0xc3, 0x70, 0x44, 0x44, 0xc4, 0xe4, 0x19, 0x33, 0x66,
|
||||
0xa8, 0x52, 0xd5, 0x22, 0x20, 0xb0, 0x40, 0xb6, 0x04, 0x84, 0xf5, 0xf4, 0xf4, 0x1e, 0xcd, 0x9a,
|
||||
0x35, 0xab, 0x88, 0xda, 0x16, 0x4d, 0x87, 0x59, 0x20, 0x25, 0x25, 0xf5, 0x0e, 0x44, 0xb3, 0xb1,
|
||||
0xb1, 0xfd, 0x9e, 0x3c, 0x79, 0xf2, 0xba, 0x55, 0xab, 0x56, 0x71, 0x52, 0xc5, 0x22, 0x20, 0x60,
|
||||
0x07, 0x62, 0xb0, 0xe1, 0xfc, 0xfc, 0xfc, 0x9f, 0xd3, 0xd3, 0xd3, 0x8f, 0xc1, 0x2c, 0x0d, 0x0b,
|
||||
0x0b, 0x3b, 0x0b, 0xf4, 0x95, 0x0b, 0xb5, 0x2c, 0x0a, 0x85, 0x19, 0xec, 0xe8, 0xe8, 0x78, 0x63,
|
||||
0xfa, 0xf4, 0xe9, 0x9b, 0x99, 0x99, 0x99, 0xbf, 0x80, 0xf8, 0x8a, 0x8a, 0x8a, 0xaf, 0x80, 0x16,
|
||||
0xb5, 0x51, 0xcb, 0xa2, 0x2d, 0x50, 0x8b, 0xfe, 0x35, 0x34, 0x34, 0xec, 0x01, 0x1a, 0xbc, 0x11,
|
||||
0x18, 0x6c, 0xab, 0x41, 0x62, 0x8c, 0x8c, 0x8c, 0xff, 0xda, 0xda, 0xda, 0x76, 0xce, 0x9e, 0x3d,
|
||||
0x5b, 0x9c, 0x22, 0x8b, 0x80, 0x40, 0x1c, 0x88, 0x7f, 0x83, 0x0c, 0xe5, 0xe3, 0xe3, 0xfb, 0x1a,
|
||||
0x1b, 0x1b, 0x7b, 0x2a, 0x30, 0x30, 0x70, 0x15, 0x90, 0x3f, 0x19, 0xe6, 0x4b, 0x57, 0x57, 0xd7,
|
||||
0x6b, 0x40, 0xcb, 0x23, 0x28, 0xb5, 0xa8, 0x18, 0x3d, 0xb5, 0xa1, 0x63, 0x61, 0x61, 0xe1, 0x4f,
|
||||
0x73, 0xe6, 0xcc, 0x99, 0x45, 0xa9, 0x45, 0x97, 0x60, 0x06, 0x02, 0xe3, 0xe5, 0x2f, 0x32, 0x06,
|
||||
0x05, 0x1b, 0x4c, 0xae, 0xb0, 0xb0, 0xf0, 0x10, 0xd0, 0x57, 0xda, 0x64, 0x59, 0x04, 0x04, 0x86,
|
||||
0x30, 0x83, 0xa4, 0xa5, 0xa5, 0xdf, 0x02, 0xe3, 0x61, 0x13, 0x32, 0x06, 0xa5, 0x38, 0x98, 0xbc,
|
||||
0xa9, 0xa9, 0xe9, 0x3d, 0xa0, 0x45, 0xb9, 0xe4, 0x5a, 0x34, 0x01, 0x66, 0x90, 0xa7, 0xa7, 0xe7,
|
||||
0x15, 0x90, 0xe1, 0x40, 0xc3, 0xa2, 0xe7, 0xcd, 0x9b, 0x67, 0x04, 0xc2, 0x95, 0x95, 0x95, 0xb6,
|
||||
0x40, 0x5f, 0xfd, 0x04, 0xc9, 0x73, 0x70, 0x70, 0xfc, 0x9c, 0x36, 0x6d, 0x1a, 0x30, 0x4b, 0xad,
|
||||
0x62, 0x23, 0xc7, 0x22, 0x63, 0x16, 0x16, 0x16, 0xc7, 0xd4, 0xd4, 0xd4, 0x9d, 0xfd, 0xfd, 0xfd,
|
||||
0xdb, 0x80, 0x16, 0xad, 0x9b, 0x39, 0x73, 0x26, 0x17, 0x9a, 0x1a, 0x13, 0x60, 0x51, 0x34, 0x25,
|
||||
0x33, 0x33, 0xf3, 0xe8, 0xc4, 0x89, 0x13, 0xb7, 0x02, 0x1d, 0x62, 0x4f, 0x56, 0x1c, 0x01, 0x5d,
|
||||
0x2e, 0x0a, 0xd4, 0x9c, 0x0a, 0xc2, 0x73, 0xe7, 0xce, 0xf5, 0xc3, 0xa6, 0x06, 0x54, 0xde, 0xc1,
|
||||
0xd4, 0x00, 0x1d, 0xe3, 0x30, 0x82, 0xea, 0x23, 0x60, 0x71, 0x29, 0xc6, 0x30, 0x1b, 0x58, 0xc7,
|
||||
0xd0, 0x10, 0x43, 0x2c, 0x9a, 0xcf, 0x20, 0x01, 0xe4, 0xfc, 0xa7, 0x25, 0x86, 0x58, 0xd4, 0xc0,
|
||||
0xc0, 0xa5, 0x3a, 0x4b, 0xb5, 0xd3, 0x73, 0xb6, 0xe7, 0x31, 0x20, 0x3e, 0x4e, 0x0b, 0x0c, 0x4d,
|
||||
0xa1, 0x0c, 0x8c, 0xc0, 0x14, 0x65, 0x02, 0x2c, 0x46, 0xa6, 0x02, 0xf1, 0x34, 0x5a, 0x60, 0xe4,
|
||||
0xc4, 0xc0, 0x08, 0x2c, 0x99, 0x99, 0x68, 0x85, 0x87, 0x67, 0xf2, 0x06, 0x00, 0x75, 0xbd, 0x72,
|
||||
0xd6, 0xf6, 0x6e, 0x17, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
|
||||
0x82,
|
||||
0xce, 0x00, 0x00, 0x01, 0x09, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0x3d, 0x30, 0xc3, 0xc8, 0xb6, 0x08, 0x08, 0xcc, 0x81, 0xf8, 0x3f, 0x14, 0xdb, 0xd3, 0xd2,
|
||||
0xa2, 0xe9, 0x48, 0x16, 0xcd, 0xa3, 0x89, 0x45, 0x40, 0xc0, 0x0e, 0xc4, 0xef, 0x80, 0xf8, 0x18,
|
||||
0x10, 0x1f, 0x05, 0xe2, 0x4f, 0x40, 0xcc, 0x45, 0x0b, 0x8b, 0xc2, 0xa0, 0x3e, 0xc9, 0x02, 0xe2,
|
||||
0x0c, 0x28, 0x3b, 0x86, 0x16, 0x16, 0x6d, 0x05, 0xe2, 0x5f, 0x40, 0x2c, 0x02, 0xc4, 0x42, 0x40,
|
||||
0xfc, 0x13, 0x88, 0x77, 0x51, 0xd5, 0x22, 0x20, 0x90, 0x00, 0xe2, 0x3f, 0x40, 0xbc, 0x19, 0x49,
|
||||
0x6c, 0x1d, 0x10, 0xff, 0x05, 0x62, 0x19, 0x6a, 0x5a, 0x54, 0x02, 0x0d, 0xaa, 0x70, 0x24, 0xb1,
|
||||
0x40, 0xa8, 0x58, 0x05, 0x35, 0x2d, 0xba, 0x0c, 0x8d, 0x7c, 0x4e, 0x24, 0x31, 0x36, 0x68, 0xe2,
|
||||
0xb8, 0x4e, 0x15, 0x8b, 0x80, 0xc0, 0x18, 0xea, 0xf2, 0x2d, 0x40, 0xac, 0x81, 0x86, 0xd7, 0x41,
|
||||
0xe5, 0xcc, 0xa8, 0x61, 0xd1, 0x24, 0xa4, 0xbc, 0x83, 0x0b, 0x4f, 0xa5, 0xc8, 0x22, 0x20, 0x60,
|
||||
0x05, 0xe2, 0x37, 0x40, 0xfc, 0x0c, 0x9a, 0xa4, 0xb1, 0xe1, 0x47, 0x40, 0xfc, 0x16, 0x14, 0x94,
|
||||
0x94, 0x58, 0x04, 0x8b, 0xf0, 0x3e, 0x3c, 0x6a, 0xda, 0xa0, 0x6a, 0x82, 0x28, 0xb1, 0x68, 0x03,
|
||||
0xd4, 0x10, 0x53, 0x3c, 0x6a, 0x74, 0xa1, 0x6a, 0x36, 0x92, 0x65, 0x11, 0x10, 0x88, 0x42, 0x33,
|
||||
0xe8, 0x1d, 0x22, 0xe2, 0xf1, 0x0a, 0x54, 0xad, 0xe8, 0x68, 0x7d, 0x44, 0x1b, 0x8b, 0x18, 0x7a,
|
||||
0x18, 0x4c, 0x81, 0x78, 0x23, 0x43, 0x37, 0xc3, 0x01, 0xaa, 0xe2, 0x1e, 0x86, 0x5d, 0x40, 0x5a,
|
||||
0x0f, 0x61, 0x51, 0x37, 0xc3, 0x62, 0xa0, 0xe0, 0x7f, 0x9a, 0x60, 0xa0, 0xd9, 0xc8, 0x16, 0xe9,
|
||||
0x41, 0x6d, 0xa7, 0xb6, 0x8f, 0x36, 0x82, 0x42, 0x6b, 0x34, 0xd5, 0x51, 0x84, 0x01, 0x28, 0xc3,
|
||||
0x8e, 0x2f, 0xd0, 0x17, 0xb9, 0x79, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
|
||||
0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_line_label_xpm[1] = {{ png, sizeof( png ), "add_line_label_xpm" }};
|
||||
|
||||
@@ -8,78 +8,38 @@
|
||||
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, 0x67, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xad, 0x96, 0x4d, 0x68, 0x5d,
|
||||
0x55, 0x10, 0xc7, 0x7f, 0x73, 0xee, 0x7d, 0xdf, 0xf9, 0x78, 0xf9, 0x6e, 0xda, 0x5a, 0x35, 0x90,
|
||||
0x04, 0x63, 0x89, 0x9a, 0x48, 0x5a, 0x28, 0x55, 0xba, 0x2d, 0x6d, 0x57, 0x4a, 0x15, 0x51, 0x50,
|
||||
0x74, 0x21, 0x8a, 0x1b, 0x57, 0x5a, 0x37, 0x29, 0xe8, 0x4a, 0x71, 0xd3, 0x9d, 0x5b, 0x41, 0xa8,
|
||||
0x2b, 0xb1, 0x48, 0x03, 0x82, 0x08, 0x15, 0xac, 0x35, 0x31, 0xd1, 0x86, 0xd6, 0x14, 0xf5, 0xa5,
|
||||
0x69, 0x6d, 0x9b, 0x26, 0x69, 0x92, 0x9b, 0xbc, 0xf7, 0xee, 0xd7, 0x19, 0x17, 0xb9, 0x69, 0x5f,
|
||||
0x4a, 0xec, 0xa2, 0xc9, 0xc0, 0x81, 0x0b, 0xe7, 0x9c, 0xf9, 0xcf, 0xcc, 0x9d, 0xf9, 0xff, 0x8f,
|
||||
0xa8, 0x2a, 0xc3, 0xc3, 0xc3, 0x66, 0x64, 0x64, 0x24, 0x13, 0x04, 0x81, 0x90, 0x58, 0xb5, 0x5a,
|
||||
0x8d, 0x26, 0x27, 0x27, 0x23, 0xc0, 0xaa, 0x2a, 0x5b, 0x35, 0x51, 0x55, 0xf6, 0x1d, 0xdc, 0xf7,
|
||||
0xbd, 0x46, 0xda, 0x81, 0x22, 0xf7, 0x76, 0xf0, 0xa7, 0x2e, 0x4d, 0xbd, 0xb0, 0xb4, 0xb4, 0x34,
|
||||
0x03, 0x44, 0x5b, 0x05, 0x73, 0x01, 0x88, 0x68, 0x5d, 0x3e, 0xe1, 0x14, 0x10, 0x9c, 0xf5, 0x8d,
|
||||
0xc2, 0x27, 0x41, 0x36, 0x8a, 0xa2, 0x83, 0xc0, 0x59, 0x60, 0x0e, 0xb0, 0xb5, 0x17, 0x87, 0x86,
|
||||
0x86, 0x8e, 0x01, 0xcd, 0x70, 0x2f, 0xb8, 0x38, 0x8e, 0xa7, 0xc7, 0xc6, 0xc6, 0xce, 0x01, 0xa1,
|
||||
0xde, 0x17, 0x99, 0x7b, 0xf7, 0xcb, 0x62, 0x54, 0xd4, 0x38, 0x95, 0xae, 0x0e, 0x24, 0xb2, 0x42,
|
||||
0x18, 0x76, 0x74, 0x7c, 0x74, 0x1c, 0x1e, 0x79, 0x5c, 0x24, 0x7f, 0xa9, 0xab, 0x6b, 0xb4, 0xe4,
|
||||
0x79, 0x3f, 0xce, 0xcc, 0xcd, 0xbd, 0xbf, 0xdc, 0xdf, 0xdf, 0xdf, 0x9e, 0xa9, 0xcf, 0x9e, 0x0c,
|
||||
0x06, 0x48, 0xa9, 0xaa, 0x01, 0x44, 0x22, 0x70, 0xc7, 0x45, 0x81, 0xe3, 0xc0, 0x65, 0x20, 0xd8,
|
||||
0x1c, 0x28, 0x89, 0x4c, 0xac, 0xeb, 0x42, 0x5a, 0x44, 0x24, 0x53, 0x28, 0x1c, 0x3a, 0xac, 0x5a,
|
||||
0x3c, 0x7c, 0x37, 0xcb, 0xc2, 0x20, 0x3b, 0x76, 0xbc, 0x57, 0xb6, 0xf6, 0xea, 0xbc, 0x75, 0x3e,
|
||||
0x6c, 0x0a, 0x9e, 0x0f, 0x50, 0x09, 0xad, 0x3a, 0x65, 0x9f, 0x70, 0xd5, 0xcf, 0x8f, 0x45, 0x21,
|
||||
0xd0, 0x03, 0xfc, 0xfd, 0x20, 0xa0, 0xb5, 0xf4, 0x73, 0xa5, 0x5b, 0x68, 0xca, 0xb5, 0x6a, 0xf0,
|
||||
0xbc, 0x33, 0x17, 0x8c, 0xe9, 0xce, 0xbb, 0x6e, 0x73, 0x93, 0x31, 0xc5, 0x66, 0xc7, 0x69, 0x68,
|
||||
0x12, 0xc9, 0x14, 0x8c, 0x69, 0xc8, 0x0b, 0x75, 0x48, 0x18, 0x25, 0xd1, 0x35, 0xc6, 0xb1, 0xf9,
|
||||
0xeb, 0x66, 0x12, 0x6c, 0xba, 0xb6, 0x9c, 0x1b, 0x80, 0xd4, 0xe5, 0x76, 0xdd, 0xc9, 0xb0, 0x08,
|
||||
0xa0, 0x1a, 0x46, 0x40, 0x84, 0xc1, 0xbf, 0x7e, 0xfd, 0x8d, 0x6f, 0xc3, 0x30, 0x9c, 0x4b, 0x2e,
|
||||
0x1a, 0x80, 0x54, 0x6a, 0x57, 0xa6, 0xa5, 0xe5, 0xd9, 0xae, 0x9d, 0x8d, 0x4b, 0x6f, 0xda, 0x4c,
|
||||
0x26, 0x27, 0x71, 0x3e, 0x2d, 0x51, 0x43, 0xc1, 0x44, 0x8d, 0x79, 0x98, 0x5d, 0x7a, 0x60, 0x33,
|
||||
0x5c, 0x38, 0xf7, 0xcb, 0x51, 0x60, 0x10, 0x68, 0x5b, 0x77, 0x98, 0xd8, 0x0a, 0x30, 0x01, 0x94,
|
||||
0x01, 0x07, 0xc8, 0x84, 0xe1, 0xf5, 0x1c, 0xc4, 0x25, 0xd1, 0xdd, 0x2f, 0x3a, 0xd3, 0xe5, 0x18,
|
||||
0x5d, 0x34, 0x4e, 0x90, 0xcf, 0x6a, 0xd8, 0x54, 0x07, 0xb3, 0xcb, 0x0f, 0xee, 0x3a, 0xf0, 0x81,
|
||||
0xd1, 0xc4, 0x59, 0x6d, 0xda, 0x16, 0xa8, 0xd6, 0x74, 0x9c, 0x01, 0xa4, 0x58, 0x2c, 0xce, 0x23,
|
||||
0xf2, 0x93, 0x39, 0x5d, 0xed, 0x55, 0xab, 0x29, 0x31, 0xa8, 0x6b, 0x7a, 0x76, 0x57, 0x83, 0xf0,
|
||||
0x26, 0xfc, 0xb6, 0x39, 0x92, 0xaa, 0x3e, 0xd4, 0x02, 0x32, 0x40, 0x1f, 0x30, 0x54, 0x5f, 0x7f,
|
||||
0xe4, 0xd8, 0xde, 0xbd, 0x51, 0xd0, 0xdb, 0x3b, 0x7d, 0x19, 0x78, 0x19, 0x68, 0x5d, 0x9f, 0xd1,
|
||||
0xf5, 0x65, 0xb6, 0x30, 0x83, 0x01, 0x70, 0x05, 0x98, 0xf0, 0xbc, 0x33, 0x3f, 0x44, 0xd1, 0xcd,
|
||||
0x91, 0x54, 0x6a, 0x4f, 0x6f, 0x73, 0xf3, 0xdb, 0xdd, 0xc0, 0x6e, 0x20, 0x55, 0x7b, 0xf8, 0xa1,
|
||||
0x81, 0x74, 0xcd, 0x42, 0x55, 0xf5, 0x81, 0x95, 0x6a, 0xf5, 0xca, 0x67, 0x00, 0x2d, 0x2d, 0xef,
|
||||
0x1c, 0x01, 0x1e, 0x03, 0xf2, 0x22, 0x22, 0x5b, 0x06, 0xba, 0x1f, 0xb4, 0x54, 0x3a, 0xf4, 0x73,
|
||||
0x1c, 0x2f, 0x8c, 0xa7, 0xd3, 0x7d, 0x83, 0x0d, 0x0d, 0x87, 0x1f, 0x05, 0x76, 0xd6, 0x8e, 0xcf,
|
||||
0xb6, 0x00, 0xad, 0x97, 0x32, 0x0c, 0xaf, 0x9e, 0x12, 0x11, 0xd3, 0xda, 0x7a, 0xe2, 0x28, 0xd0,
|
||||
0x05, 0x64, 0xd7, 0x93, 0x72, 0xb7, 0x11, 0xc8, 0xe6, 0xf3, 0x6f, 0x4d, 0xa9, 0x7e, 0xba, 0x50,
|
||||
0x57, 0x97, 0x79, 0x6e, 0xcf, 0x9e, 0xa7, 0x27, 0xb2, 0xd9, 0x72, 0x53, 0x2e, 0x97, 0xbb, 0x28,
|
||||
0x22, 0x7f, 0xc8, 0x76, 0x48, 0x00, 0xc0, 0xfe, 0xfd, 0xfb, 0x3b, 0xd4, 0xd1, 0xb3, 0x41, 0x67,
|
||||
0x7b, 0x87, 0xd8, 0xce, 0x4e, 0x2b, 0x37, 0x16, 0x90, 0x1b, 0xb7, 0xdd, 0x6b, 0xd8, 0xd1, 0xf3,
|
||||
0xa3, 0xc7, 0xb6, 0x2d, 0x23, 0xd7, 0x75, 0x9d, 0x20, 0x13, 0x86, 0x95, 0xd7, 0x17, 0x22, 0xc7,
|
||||
0x6b, 0x52, 0xa4, 0xd8, 0x18, 0x65, 0xe6, 0x2a, 0x75, 0x1f, 0x07, 0x11, 0xf0, 0xd4, 0x96, 0xff,
|
||||
0x91, 0xac, 0x99, 0x53, 0x2e, 0x17, 0xf3, 0x6a, 0xf3, 0x05, 0x09, 0x1b, 0x0a, 0x2a, 0x71, 0x8c,
|
||||
0x3a, 0x8e, 0x09, 0x8b, 0xf9, 0xa4, 0x0f, 0x32, 0x2e, 0xc0, 0x81, 0x03, 0x07, 0xda, 0xab, 0xd5,
|
||||
0x6a, 0x8b, 0xb5, 0xb6, 0x96, 0x15, 0xca, 0xe3, 0xe3, 0xe3, 0xd7, 0x6a, 0x45, 0x2f, 0x69, 0x57,
|
||||
0xa7, 0xbd, 0x7d, 0x38, 0xdb, 0xd4, 0xf4, 0x5a, 0xbf, 0x48, 0xe3, 0x40, 0x5f, 0x9f, 0x37, 0x28,
|
||||
0xe2, 0x0e, 0xc4, 0xb1, 0xf7, 0x84, 0x63, 0x3f, 0x48, 0x99, 0x6a, 0xb4, 0xd6, 0x87, 0xa6, 0x1a,
|
||||
0x80, 0x31, 0x1b, 0x28, 0x28, 0x96, 0xf8, 0x1b, 0x69, 0x73, 0x53, 0x0e, 0x2a, 0xeb, 0x14, 0x64,
|
||||
0x16, 0x49, 0xb7, 0xb5, 0xb5, 0xbd, 0xea, 0xfb, 0x2f, 0x5d, 0xed, 0xe9, 0x29, 0x3d, 0xe9, 0xba,
|
||||
0xc5, 0x81, 0xbe, 0x3e, 0x6f, 0x40, 0xc4, 0x1d, 0x10, 0xc9, 0xf4, 0x82, 0xb8, 0x49, 0x6b, 0x5b,
|
||||
0x6b, 0x17, 0x66, 0xa2, 0x68, 0xe2, 0xd7, 0x54, 0x74, 0xad, 0x5b, 0xfe, 0xad, 0x58, 0xc4, 0x0f,
|
||||
0x05, 0xdd, 0x20, 0x95, 0x6b, 0x87, 0x63, 0xcd, 0xad, 0xbc, 0x6b, 0x1a, 0x10, 0x71, 0x89, 0xb3,
|
||||
0x69, 0x89, 0x73, 0xe9, 0xc2, 0xe7, 0x59, 0xa7, 0xbd, 0xfd, 0xcb, 0x33, 0x22, 0xdd, 0x1d, 0x20,
|
||||
0xeb, 0xca, 0xab, 0xd6, 0x2e, 0xdf, 0xf2, 0xfd, 0xbf, 0x2e, 0xf8, 0xfe, 0xa5, 0xe9, 0x72, 0xf9,
|
||||
0x5c, 0x69, 0x79, 0xf9, 0xab, 0x52, 0x18, 0xce, 0xae, 0xa4, 0xd3, 0x69, 0xd3, 0x5d, 0xd7, 0xf3,
|
||||
0x8a, 0x9c, 0x96, 0x86, 0x5a, 0xbe, 0x5c, 0x8d, 0xc2, 0x59, 0x20, 0xd8, 0xa0, 0xb0, 0x12, 0xd7,
|
||||
0x17, 0x8c, 0xdf, 0xd9, 0xbc, 0x56, 0x26, 0x17, 0x91, 0xb4, 0xfa, 0xfe, 0x95, 0x89, 0x20, 0xf8,
|
||||
0xb3, 0x54, 0xa9, 0x9c, 0x2f, 0x2d, 0x2d, 0x7d, 0xfd, 0x8f, 0xef, 0x4f, 0x2d, 0x02, 0x31, 0xa0,
|
||||
0x09, 0xab, 0xdf, 0x01, 0xe6, 0x83, 0x20, 0x58, 0x9c, 0x1c, 0xbd, 0xf8, 0x1d, 0xb0, 0x0b, 0x28,
|
||||
0xd4, 0xcc, 0xa8, 0x05, 0xbc, 0x0d, 0x5d, 0xa7, 0x26, 0x8c, 0x6d, 0x6a, 0xc1, 0x53, 0x53, 0x09,
|
||||
0x62, 0xeb, 0xad, 0x4e, 0x4f, 0xf7, 0x9f, 0xf2, 0x3c, 0xef, 0x06, 0x10, 0x25, 0x0c, 0xbf, 0x08,
|
||||
0xcc, 0x27, 0xce, 0x57, 0x12, 0xbe, 0x8b, 0x6b, 0x96, 0x02, 0xde, 0x26, 0x44, 0x60, 0xef, 0x51,
|
||||
0xc4, 0xbc, 0xa2, 0xac, 0xfa, 0xb0, 0xba, 0xf6, 0xe6, 0xb2, 0xa1, 0x15, 0x11, 0x1f, 0x98, 0x04,
|
||||
0x66, 0x12, 0xb9, 0xa8, 0x75, 0x6a, 0x75, 0xf3, 0x21, 0x0c, 0xfe, 0x57, 0x8f, 0x34, 0xcd, 0x78,
|
||||
0xf6, 0x8b, 0xf0, 0x19, 0x55, 0xbd, 0xcb, 0xb8, 0xb1, 0xb5, 0xe5, 0x4a, 0xa5, 0x72, 0x07, 0x98,
|
||||
0x05, 0xee, 0xa8, 0x6a, 0xbc, 0xe5, 0x77, 0x9d, 0x88, 0xa4, 0x13, 0x6d, 0x69, 0x4d, 0xc4, 0x8f,
|
||||
0xa4, 0x0c, 0xab, 0xc0, 0xef, 0xc0, 0x8a, 0x6e, 0x91, 0x42, 0xfe, 0x03, 0x32, 0x72, 0x40, 0xa4,
|
||||
0x9e, 0xff, 0x23, 0x79, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x01, 0xe5, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0x3d, 0x30, 0x98, 0x68, 0x68, 0x68, 0x60, 0x49, 0xc9, 0x4c, 0xc9, 0x4e, 0xce, 0x49, 0x79,
|
||||
0x08, 0xc2, 0x20, 0x36, 0x48, 0x8c, 0xea, 0x16, 0x81, 0x0c, 0x8e, 0xaa, 0x8c, 0xfb, 0x6a, 0xb1,
|
||||
0xd6, 0xed, 0x3f, 0x08, 0x83, 0xd8, 0x20, 0x31, 0x62, 0x0c, 0xc8, 0xcc, 0xcc, 0x54, 0x4a, 0x4f,
|
||||
0x4f, 0xcf, 0x05, 0xd1, 0x04, 0x2d, 0x02, 0xf9, 0x02, 0x64, 0x81, 0xd6, 0x21, 0x1b, 0x30, 0x06,
|
||||
0x5b, 0x96, 0x94, 0xf3, 0x9d, 0x81, 0xe1, 0xf8, 0x02, 0x06, 0x86, 0x13, 0xcd, 0x0c, 0x0c, 0x27,
|
||||
0xd3, 0x81, 0xb4, 0x17, 0x10, 0xeb, 0x31, 0x30, 0x1c, 0x16, 0x84, 0x69, 0x4e, 0xca, 0x4d, 0x9e,
|
||||
0x9f, 0x94, 0x9d, 0xf2, 0x35, 0xb0, 0x2d, 0xfc, 0x1b, 0x88, 0x06, 0xf1, 0x49, 0xb6, 0x28, 0x3c,
|
||||
0x3e, 0x1f, 0x28, 0x7b, 0x02, 0x17, 0xfe, 0x2a, 0x20, 0xb0, 0xf3, 0x6e, 0x7c, 0x46, 0xda, 0x1f,
|
||||
0x9d, 0xfd, 0xb6, 0x60, 0x3d, 0x20, 0x1a, 0x64, 0x19, 0x2e, 0x9f, 0x61, 0x0d, 0xba, 0xc8, 0x8a,
|
||||
0xb8, 0xef, 0xee, 0xde, 0x8d, 0xd3, 0xa0, 0x3e, 0x69, 0x86, 0xf8, 0xec, 0xf8, 0x1e, 0x20, 0xfb,
|
||||
0x26, 0xc8, 0x12, 0x90, 0x65, 0x3a, 0x3a, 0xf3, 0xfe, 0xfb, 0x35, 0xc6, 0xc0, 0x1d, 0x07, 0xc2,
|
||||
0x20, 0x9f, 0x81, 0x82, 0x91, 0x6a, 0x89, 0x81, 0x81, 0xe1, 0x98, 0x90, 0x81, 0xc1, 0x6c, 0xaf,
|
||||
0xc4, 0xac, 0xd4, 0x1f, 0x24, 0xf9, 0x88, 0x5c, 0x0c, 0x8b, 0x23, 0xbf, 0xa6, 0xa8, 0x7f, 0x71,
|
||||
0xe9, 0xe9, 0xff, 0x43, 0x62, 0x8b, 0x76, 0xe1, 0x8d, 0x23, 0x4a, 0x30, 0xc8, 0x07, 0xf6, 0xf6,
|
||||
0x3d, 0x9b, 0xf8, 0xf8, 0x76, 0x03, 0x4d, 0x3b, 0xb9, 0x84, 0x66, 0x16, 0x41, 0x82, 0xf2, 0xa8,
|
||||
0x3c, 0x30, 0xde, 0xfe, 0x01, 0xf1, 0x17, 0x06, 0x86, 0x8b, 0xdc, 0x34, 0xb3, 0x08, 0x62, 0xd9,
|
||||
0x89, 0x83, 0xd0, 0x14, 0x19, 0x43, 0x63, 0x8b, 0x8e, 0xa7, 0x42, 0x2d, 0xda, 0x41, 0x63, 0x8b,
|
||||
0xce, 0x0b, 0x00, 0xe3, 0xe8, 0x07, 0xd0, 0xa2, 0x3f, 0x0c, 0x0c, 0xa7, 0x24, 0x68, 0x66, 0x11,
|
||||
0x34, 0xf8, 0xd6, 0x40, 0x7d, 0x55, 0x40, 0x63, 0x8b, 0x4e, 0x06, 0x40, 0x2d, 0x3a, 0x4b, 0x53,
|
||||
0x8b, 0x8c, 0x8d, 0x37, 0x73, 0xe9, 0xe8, 0xcd, 0xfd, 0x02, 0x2a, 0xbe, 0x12, 0x32, 0xd3, 0x9e,
|
||||
0x21, 0x67, 0x7c, 0xaa, 0x5a, 0x04, 0x32, 0x38, 0xbc, 0x2c, 0xf1, 0x37, 0xb6, 0x5a, 0x80, 0x4a,
|
||||
0x41, 0xb6, 0x9f, 0x03, 0x98, 0xea, 0xac, 0x63, 0xd3, 0xb2, 0xde, 0xa1, 0x17, 0xce, 0xa0, 0x22,
|
||||
0x8d, 0x6c, 0x8b, 0xa0, 0x19, 0x34, 0x02, 0x88, 0x27, 0x02, 0x2d, 0x38, 0x05, 0xa4, 0x7f, 0x81,
|
||||
0xe2, 0x06, 0x14, 0x64, 0x78, 0x2d, 0xc2, 0x57, 0xa8, 0x02, 0x0b, 0x50, 0x4e, 0xa0, 0x21, 0x36,
|
||||
0xc0, 0x88, 0x2e, 0x05, 0x1a, 0xba, 0x0e, 0xc8, 0x7e, 0x86, 0xa5, 0xda, 0x00, 0x59, 0x74, 0xda,
|
||||
0xc2, 0x6a, 0xd2, 0x81, 0x88, 0xf2, 0xf8, 0x9f, 0x38, 0x83, 0x0e, 0xbd, 0x9a, 0x00, 0x2b, 0x06,
|
||||
0x6a, 0x02, 0x69, 0x86, 0xb9, 0x16, 0x0d, 0x3f, 0x07, 0xe2, 0xf5, 0x40, 0xcb, 0xcb, 0x80, 0xd8,
|
||||
0x16, 0xe4, 0x18, 0x82, 0x0e, 0x26, 0xa2, 0xe2, 0xfb, 0x05, 0xb1, 0xf0, 0xe4, 0x24, 0x20, 0x8e,
|
||||
0x04, 0xfa, 0x4a, 0x81, 0xec, 0x36, 0x03, 0x36, 0x8b, 0x62, 0x53, 0xb3, 0xde, 0x23, 0xbb, 0x76,
|
||||
0xc0, 0x1b, 0x27, 0x83, 0xb3, 0xb9, 0x45, 0x0f, 0x0c, 0x00, 0x12, 0x80, 0xd0, 0x42, 0xc9, 0x0d,
|
||||
0xfc, 0x38, 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" }};
|
||||
|
||||
@@ -8,48 +8,14 @@
|
||||
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, 0x83, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0x3d, 0x30, 0xf9, 0x1a, 0x19, 0x18, 0x18, 0x69, 0x66, 0xd1, 0x0d, 0x75, 0x75, 0xde, 0x4b,
|
||||
0x3a, 0x3a, 0x81, 0x17, 0xf5, 0xf4, 0x4a, 0x37, 0xa9, 0xab, 0x87, 0x1a, 0x08, 0x08, 0x08, 0x00,
|
||||
0x2d, 0x64, 0x21, 0xc6, 0x52, 0xe2, 0x2d, 0x31, 0x30, 0xb0, 0xbe, 0xa6, 0xa7, 0xf7, 0xf8, 0xba,
|
||||
0x9e, 0xde, 0x7f, 0x18, 0x3e, 0xaa, 0xa5, 0xf5, 0xc8, 0x5b, 0x40, 0x20, 0x11, 0x68, 0x11, 0x2f,
|
||||
0x55, 0x2c, 0x3a, 0x6f, 0x60, 0x20, 0x00, 0x34, 0xf8, 0xe9, 0x0d, 0x13, 0x93, 0xff, 0x0f, 0x2a,
|
||||
0xea, 0xff, 0xdf, 0x5b, 0xb4, 0xf5, 0xff, 0xb5, 0xa4, 0x7c, 0xb0, 0x65, 0xfb, 0x35, 0x34, 0xee,
|
||||
0xb2, 0x31, 0x30, 0xf8, 0x81, 0x7c, 0x46, 0xb1, 0x45, 0x40, 0x03, 0x23, 0x41, 0x86, 0x3e, 0xac,
|
||||
0x6b, 0xfd, 0xff, 0xe8, 0xd1, 0xff, 0xff, 0xd7, 0xae, 0xfd, 0xff, 0x7f, 0xea, 0xd4, 0xff, 0xff,
|
||||
0x17, 0xfd, 0xe3, 0xc0, 0x96, 0x79, 0xf0, 0xf1, 0x35, 0x01, 0x2d, 0x92, 0xc2, 0x17, 0x84, 0xc4,
|
||||
0x5a, 0x54, 0x05, 0x32, 0xf0, 0xde, 0xf2, 0xdd, 0x70, 0x4b, 0xf6, 0xef, 0xff, 0xff, 0xff, 0x68,
|
||||
0xfe, 0x14, 0xb0, 0x45, 0xd9, 0x62, 0x62, 0xd3, 0x81, 0xbe, 0xd2, 0x01, 0x5a, 0xc4, 0x44, 0x99,
|
||||
0x45, 0xfa, 0xfa, 0x3e, 0xe0, 0x78, 0x49, 0x2e, 0x00, 0x5b, 0xb2, 0x6f, 0xdf, 0xff, 0xff, 0x5b,
|
||||
0x36, 0xfd, 0xfd, 0x7f, 0xc1, 0xde, 0x1b, 0x6c, 0x91, 0x29, 0x17, 0x57, 0x0d, 0x3b, 0x03, 0x83,
|
||||
0x32, 0xc5, 0x3e, 0xda, 0xef, 0xe0, 0xc0, 0x72, 0x4d, 0x57, 0xf7, 0x14, 0xc8, 0xd0, 0xcb, 0x4e,
|
||||
0x5e, 0xff, 0x4f, 0x47, 0x15, 0xff, 0xbf, 0x6c, 0xe9, 0x08, 0xb6, 0x64, 0x95, 0xaa, 0xea, 0x49,
|
||||
0x56, 0x06, 0x06, 0x50, 0x82, 0xe0, 0xa6, 0x4a, 0xaa, 0xbb, 0x66, 0x6c, 0x2c, 0x79, 0x45, 0x4f,
|
||||
0x6f, 0x07, 0x2c, 0xc5, 0x01, 0x53, 0xe0, 0xff, 0x59, 0x8a, 0x8a, 0x97, 0x45, 0x59, 0x58, 0xca,
|
||||
0x80, 0xbe, 0x51, 0x23, 0x94, 0xc4, 0x49, 0xce, 0xa8, 0x40, 0x9f, 0x3d, 0x01, 0x59, 0xb4, 0x5e,
|
||||
0x4d, 0xed, 0x3e, 0xd0, 0x27, 0x0d, 0x40, 0x0b, 0xf4, 0x81, 0x98, 0x99, 0xea, 0x25, 0x03, 0xd0,
|
||||
0xa2, 0x87, 0x20, 0x8b, 0xb6, 0xa8, 0xab, 0x5f, 0x02, 0x5a, 0x14, 0x0f, 0xb4, 0x44, 0x9a, 0x26,
|
||||
0x45, 0x10, 0xcc, 0xa2, 0xad, 0xea, 0xea, 0x17, 0x81, 0x29, 0x2d, 0x06, 0x68, 0x91, 0xe4, 0xb0,
|
||||
0xb1, 0x08, 0x14, 0x74, 0x71, 0xa0, 0x8c, 0x4a, 0x91, 0x45, 0x57, 0xb5, 0xb5, 0xd9, 0xae, 0xeb,
|
||||
0xea, 0xa6, 0x02, 0x0d, 0xcd, 0xbc, 0xa4, 0xab, 0x9b, 0x7d, 0x51, 0x57, 0x37, 0x07, 0x84, 0x81,
|
||||
0xfc, 0x77, 0xd0, 0x72, 0xee, 0xf1, 0x04, 0x79, 0xf9, 0xb9, 0x3b, 0x35, 0x34, 0x2a, 0x61, 0x72,
|
||||
0x67, 0x75, 0x74, 0x62, 0x70, 0x15, 0x45, 0xf8, 0x0b, 0x52, 0x7d, 0xfd, 0x0c, 0xe4, 0x42, 0x14,
|
||||
0x1f, 0xbe, 0xaa, 0xa7, 0xf7, 0x3b, 0x55, 0x44, 0xa4, 0x0b, 0xe8, 0x4b, 0x0b, 0xb2, 0x82, 0x0e,
|
||||
0x68, 0x40, 0x0b, 0xc8, 0xa0, 0x07, 0x89, 0x49, 0xff, 0x5f, 0x9e, 0xbd, 0xfb, 0xff, 0xf6, 0xc1,
|
||||
0xfb, 0xff, 0xcf, 0x6e, 0xbe, 0xff, 0x7f, 0xff, 0xd2, 0xfb, 0xff, 0xb7, 0x4c, 0xbc, 0xf2, 0xff,
|
||||
0xbc, 0x8d, 0x27, 0x28, 0x4f, 0xfd, 0x2b, 0x97, 0x90, 0x98, 0xc7, 0x0c, 0x29, 0x5c, 0x39, 0xc8,
|
||||
0x8e, 0xa3, 0xab, 0xba, 0xba, 0xf3, 0x40, 0x96, 0xdd, 0xaf, 0x69, 0xf9, 0x7f, 0xe7, 0xce, 0xff,
|
||||
0xff, 0xa7, 0x4f, 0xff, 0xff, 0xbf, 0x67, 0xdb, 0x8f, 0xff, 0x67, 0xfc, 0x92, 0xc1, 0xbe, 0xe9,
|
||||
0x96, 0x93, 0x5b, 0x0b, 0x4c, 0x18, 0x51, 0x40, 0x4b, 0xf8, 0x28, 0x2f, 0x82, 0xf4, 0xf4, 0xb6,
|
||||
0x81, 0x0c, 0xbd, 0x59, 0xdb, 0xfb, 0xff, 0xf4, 0x89, 0xdf, 0xff, 0xcf, 0x87, 0x67, 0x83, 0x2d,
|
||||
0x99, 0xa7, 0xa4, 0xb4, 0x07, 0x18, 0x5c, 0xc9, 0xa0, 0xd4, 0x47, 0x71, 0xa1, 0x0a, 0xc2, 0xc0,
|
||||
0x5a, 0x95, 0xfb, 0x2a, 0xb4, 0xbc, 0xbb, 0xea, 0xee, 0x0f, 0xb6, 0x64, 0xad, 0x8a, 0xca, 0x69,
|
||||
0x60, 0xf1, 0x93, 0x09, 0x2d, 0x82, 0x98, 0xa8, 0x96, 0xbc, 0x6f, 0x1a, 0x1b, 0x8b, 0x00, 0x2d,
|
||||
0xbb, 0x03, 0xb2, 0x64, 0x97, 0x86, 0xc6, 0x75, 0x3e, 0x26, 0xa6, 0x3c, 0xa0, 0x6f, 0x4c, 0x09,
|
||||
0x55, 0x7a, 0x64, 0xe5, 0xa3, 0x2b, 0x3a, 0x3a, 0xca, 0x17, 0x74, 0x75, 0xf7, 0xc8, 0xb2, 0xb2,
|
||||
0xa6, 0x03, 0x1b, 0x0b, 0xae, 0x40, 0x4b, 0xd8, 0x68, 0xd6, 0x0a, 0x02, 0x05, 0x13, 0xb4, 0x46,
|
||||
0xe5, 0x18, 0xda, 0xcd, 0x2d, 0x4a, 0x30, 0x00, 0x99, 0x7c, 0xe0, 0xd2, 0x3b, 0x9b, 0xa5, 0xed,
|
||||
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x00, 0x65, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0x3d, 0x30, 0xc3, 0xa8, 0x45, 0x0d, 0x0c, 0x0c, 0x5b, 0x80, 0x78, 0x2d, 0x3d, 0x2c, 0xfa,
|
||||
0xdf, 0x00, 0xd6, 0x36, 0x6a, 0xd1, 0xa8, 0x45, 0xa3, 0x16, 0x0d, 0xb8, 0x45, 0xa0, 0x5c, 0x0f,
|
||||
0x33, 0x8c, 0x02, 0xbc, 0x85, 0x18, 0x8b, 0xb6, 0x50, 0xc1, 0xa2, 0xb5, 0x23, 0xbc, 0xf4, 0x26,
|
||||
0x31, 0xbe, 0xb6, 0x50, 0x62, 0xd1, 0x16, 0x4a, 0xe2, 0x65, 0xb4, 0x86, 0x05, 0xe3, 0x26, 0x06,
|
||||
0x06, 0x5b, 0x60, 0xf0, 0x7c, 0x40, 0x0a, 0xaa, 0xef, 0x20, 0x31, 0x5a, 0x59, 0xf4, 0x1d, 0xc9,
|
||||
0xa2, 0xf7, 0x34, 0xb1, 0x68, 0xb4, 0xb9, 0x85, 0x8e, 0x01, 0x19, 0x2c, 0x54, 0xf6, 0x22, 0xbe,
|
||||
0x84, 0xab, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_power_xpm[1] = {{ png, sizeof( png ), "add_power_xpm" }};
|
||||
|
||||
@@ -8,54 +8,18 @@
|
||||
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, 0xe6, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xdd, 0x96, 0xcd, 0x4f, 0x13,
|
||||
0x41, 0x18, 0xc6, 0xcb, 0xb6, 0xd5, 0x76, 0x01, 0xb5, 0xb4, 0x8d, 0x14, 0x95, 0x70, 0xa1, 0x92,
|
||||
0x6e, 0x5b, 0xf7, 0x63, 0x66, 0x96, 0xa5, 0x21, 0xc1, 0x9b, 0x8d, 0x31, 0x26, 0x2a, 0x17, 0x0d,
|
||||
0x54, 0xa0, 0x14, 0x83, 0x41, 0x0f, 0x1e, 0x3c, 0xab, 0x27, 0xff, 0x92, 0x1a, 0x35, 0x10, 0xbd,
|
||||
0x79, 0xd3, 0x84, 0x8b, 0x46, 0xa3, 0x18, 0x31, 0x5e, 0x3c, 0x14, 0xa8, 0xd4, 0x44, 0x63, 0x04,
|
||||
0xf4, 0xa0, 0xd0, 0xf5, 0x7d, 0x97, 0x9d, 0xd0, 0x36, 0x35, 0x6e, 0x09, 0x6a, 0xc2, 0xe1, 0x97,
|
||||
0xec, 0x76, 0x66, 0x9e, 0x67, 0x66, 0x76, 0xe6, 0x7d, 0xea, 0x32, 0x4d, 0xd3, 0xf5, 0x2f, 0xd8,
|
||||
0x7a, 0x70, 0xb9, 0x9a, 0x00, 0xa1, 0x86, 0xa6, 0x46, 0xc4, 0x06, 0x07, 0x07, 0xdd, 0x86, 0x61,
|
||||
0xf8, 0x2b, 0xd1, 0x34, 0xcd, 0x6b, 0x69, 0x63, 0x07, 0xd6, 0xaf, 0x3f, 0xa2, 0xbd, 0xf4, 0x35,
|
||||
0xd5, 0xe9, 0x1b, 0x0e, 0x31, 0xe8, 0x6c, 0x38, 0x1c, 0x8e, 0xa0, 0xa1, 0x53, 0x23, 0x96, 0xd2,
|
||||
0x9f, 0xd8, 0xe3, 0xe7, 0x39, 0xac, 0x97, 0x3d, 0x0f, 0x06, 0x83, 0x87, 0xac, 0x95, 0x30, 0xc6,
|
||||
0xe6, 0xa3, 0x33, 0xfa, 0x62, 0x74, 0x5a, 0x2f, 0x72, 0x14, 0xa6, 0x16, 0xbc, 0x5e, 0x6f, 0x16,
|
||||
0xda, 0x5b, 0xeb, 0xac, 0xb4, 0x1e, 0x6e, 0xd0, 0x79, 0x1b, 0x7d, 0x08, 0x3a, 0x0f, 0x40, 0xc3,
|
||||
0xc6, 0xd6, 0x19, 0x47, 0x23, 0xc1, 0xea, 0x00, 0x3f, 0xf6, 0xdc, 0x3b, 0xb9, 0x1a, 0xcb, 0x67,
|
||||
0x4c, 0x84, 0x18, 0x17, 0xcd, 0x78, 0x7c, 0x0d, 0x30, 0x1d, 0x43, 0xe9, 0x05, 0x93, 0x8f, 0xef,
|
||||
0xb9, 0x7b, 0xfa, 0x5b, 0xf7, 0x0c, 0x2b, 0xc9, 0x4c, 0x59, 0xf2, 0x78, 0x3c, 0xd7, 0xaa, 0x8c,
|
||||
0x62, 0xf9, 0xa1, 0xf2, 0x4e, 0x19, 0x21, 0xdd, 0xd3, 0xfa, 0x47, 0x30, 0x2a, 0xfe, 0xd6, 0xc8,
|
||||
0x9a, 0x09, 0xc5, 0x0e, 0x7b, 0x6e, 0xc1, 0x8e, 0xe4, 0x5c, 0x2e, 0xef, 0x18, 0x90, 0x75, 0xbb,
|
||||
0x7d, 0xe3, 0x9b, 0x88, 0x16, 0x82, 0xd0, 0x92, 0x03, 0x26, 0x04, 0x61, 0xff, 0x25, 0x44, 0x55,
|
||||
0x49, 0x11, 0x3e, 0x41, 0x29, 0x96, 0x1f, 0x2e, 0xd7, 0x35, 0xa2, 0x06, 0x7d, 0x86, 0x7b, 0x49,
|
||||
0x8c, 0xa1, 0x0d, 0x5c, 0x09, 0x9a, 0xc8, 0x9a, 0xbc, 0x00, 0x7b, 0x7b, 0x15, 0xda, 0xdb, 0x81,
|
||||
0x16, 0x07, 0xec, 0x83, 0x03, 0xf5, 0x42, 0x31, 0x94, 0x02, 0x49, 0x65, 0xca, 0x24, 0x05, 0x3a,
|
||||
0xbd, 0x6a, 0x51, 0x26, 0xf2, 0x22, 0xe8, 0x5c, 0xb1, 0x0e, 0x03, 0x9e, 0x2e, 0x78, 0x19, 0x89,
|
||||
0xc5, 0x3e, 0x7f, 0xc7, 0xed, 0x82, 0x19, 0xdc, 0x80, 0xf7, 0x29, 0x68, 0x3b, 0x05, 0xf8, 0x1d,
|
||||
0xdd, 0x13, 0xd0, 0x09, 0x04, 0x02, 0x47, 0x44, 0x51, 0xbc, 0x9c, 0x48, 0x7c, 0x5a, 0x4f, 0x24,
|
||||
0xbe, 0x98, 0x7e, 0x7f, 0xf8, 0xb6, 0xbd, 0x9a, 0x33, 0xbc, 0x13, 0x9e, 0x9a, 0x16, 0x49, 0xda,
|
||||
0x58, 0xc1, 0xbd, 0x86, 0x67, 0x3c, 0x25, 0x07, 0xd1, 0xa4, 0x91, 0xbb, 0x64, 0xeb, 0xb4, 0xc6,
|
||||
0xe3, 0xe5, 0x1f, 0xa8, 0x23, 0x08, 0xc1, 0x29, 0x7b, 0x47, 0xc4, 0xaa, 0x19, 0x49, 0x52, 0xf9,
|
||||
0xab, 0x6d, 0x34, 0x8a, 0xc6, 0xdb, 0xaa, 0x00, 0x60, 0x06, 0x46, 0x3f, 0x6d, 0xa3, 0x49, 0xae,
|
||||
0xf3, 0x97, 0x8c, 0xcc, 0x5d, 0x66, 0x24, 0x49, 0xe6, 0xfa, 0xee, 0x32, 0x02, 0x8d, 0x8d, 0xff,
|
||||
0x6b, 0x94, 0x4e, 0xa7, 0xf7, 0x76, 0x75, 0x75, 0x1d, 0x90, 0xa4, 0x95, 0x55, 0xbc, 0xb0, 0x70,
|
||||
0x59, 0x27, 0x23, 0x91, 0x48, 0xb8, 0xd1, 0x3c, 0x4a, 0x26, 0x93, 0xcd, 0x92, 0x24, 0xb5, 0xc3,
|
||||
0x65, 0x2d, 0xe3, 0x85, 0x15, 0xc5, 0xf6, 0xeb, 0xa1, 0x50, 0xc8, 0x8a, 0x1a, 0xab, 0x83, 0xde,
|
||||
0xa7, 0xcf, 0xd2, 0x14, 0x9b, 0x23, 0xc6, 0xb0, 0x55, 0x82, 0xb0, 0x1c, 0x41, 0x96, 0xbc, 0x6a,
|
||||
0x6b, 0x6b, 0x3b, 0xec, 0x34, 0x8f, 0x06, 0x06, 0x06, 0x7c, 0xac, 0x8f, 0x3d, 0x25, 0xfd, 0x64,
|
||||
0x0e, 0xcb, 0x0f, 0xa2, 0x18, 0xea, 0x02, 0xe8, 0xbc, 0xb4, 0x2f, 0xbf, 0x55, 0x54, 0xe7, 0x31,
|
||||
0x47, 0x78, 0x51, 0x8d, 0xce, 0xb0, 0x65, 0x30, 0xc3, 0x5a, 0x97, 0xc3, 0x1a, 0xe6, 0x24, 0x8f,
|
||||
0x3a, 0x3b, 0x3b, 0x03, 0xa4, 0x8f, 0xcd, 0x81, 0xce, 0x12, 0xaf, 0xde, 0x58, 0x60, 0x55, 0x55,
|
||||
0x2d, 0x42, 0xfb, 0xf9, 0x1d, 0x8c, 0x89, 0x35, 0x6b, 0x4c, 0x6d, 0x4c, 0x80, 0x51, 0x09, 0x3c,
|
||||
0x72, 0x3b, 0x18, 0x7c, 0xd5, 0x46, 0x3c, 0xf8, 0x6c, 0xa3, 0x89, 0x2d, 0x23, 0x88, 0xef, 0xee,
|
||||
0xfb, 0xac, 0xc4, 0xd9, 0xcc, 0x23, 0xcf, 0x4d, 0xbb, 0xc0, 0x8e, 0xfe, 0x09, 0x3c, 0x40, 0xf8,
|
||||
0x6d, 0x8f, 0xde, 0x61, 0xcb, 0xd1, 0x3c, 0x2b, 0x71, 0xaa, 0x8c, 0x48, 0x8a, 0x3e, 0x56, 0x88,
|
||||
0xb2, 0xa8, 0x68, 0xca, 0x07, 0x4e, 0x52, 0x3b, 0xf6, 0xde, 0xce, 0x11, 0x47, 0x79, 0xd4, 0xd1,
|
||||
0xd1, 0x11, 0xd2, 0x0c, 0x32, 0xab, 0x50, 0xa5, 0x20, 0x53, 0x79, 0x89, 0x93, 0xd4, 0x92, 0xef,
|
||||
0xa0, 0x7d, 0x8c, 0xff, 0xcd, 0x0a, 0x00, 0xe7, 0x80, 0x6c, 0x05, 0x38, 0xd3, 0x13, 0x8d, 0xe4,
|
||||
0x11, 0x10, 0x04, 0xce, 0x02, 0x23, 0x15, 0xab, 0xcd, 0x00, 0xc7, 0x2b, 0x73, 0x44, 0xac, 0x33,
|
||||
0x53, 0xdf, 0x36, 0xf2, 0xa8, 0x56, 0xa7, 0x19, 0x75, 0x7e, 0x01, 0xad, 0x3d, 0x96, 0x9f, 0x85,
|
||||
0x7b, 0x19, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x00, 0x9b, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0x3d, 0x30, 0x55, 0x0d, 0x6b, 0x68, 0x68, 0x60, 0x49, 0xc9, 0x4c, 0xc9, 0x4e, 0xce, 0x49,
|
||||
0x79, 0x08, 0xc2, 0x20, 0x36, 0x48, 0x8c, 0xea, 0x16, 0x81, 0x0c, 0x8e, 0xaa, 0x8c, 0xfb, 0x6a,
|
||||
0xb1, 0xd6, 0xed, 0x3f, 0x08, 0x83, 0xd8, 0x20, 0x31, 0x0c, 0x8b, 0x18, 0x18, 0x4e, 0x6c, 0x01,
|
||||
0xe2, 0xff, 0xe4, 0xe2, 0xf0, 0xf8, 0x7c, 0xb0, 0x05, 0x5a, 0x87, 0x6c, 0xc0, 0x18, 0xc4, 0x06,
|
||||
0xf9, 0x0c, 0x9b, 0x45, 0xff, 0xe9, 0x6a, 0x11, 0x3d, 0x82, 0x8e, 0x22, 0x8b, 0x60, 0x89, 0x01,
|
||||
0xe4, 0x33, 0x10, 0xc6, 0x99, 0x18, 0x28, 0xb5, 0x08, 0x9f, 0x39, 0xa3, 0x16, 0x8d, 0x5a, 0x34,
|
||||
0x6a, 0xd1, 0xa8, 0x45, 0x03, 0x6d, 0x11, 0xbe, 0xc2, 0x90, 0xaa, 0x16, 0xe1, 0x2b, 0xde, 0xa9,
|
||||
0x6a, 0x11, 0xa8, 0x72, 0x42, 0xaf, 0xb0, 0x40, 0x3e, 0xa3, 0xb4, 0x22, 0xa4, 0x97, 0x45, 0x5b,
|
||||
0x68, 0x1e, 0x74, 0x38, 0x9b, 0x5b, 0xf8, 0x9a, 0x49, 0x83, 0xb2, 0x5d, 0x87, 0x0f, 0x03, 0x00,
|
||||
0xfa, 0xfc, 0x08, 0x18, 0x25, 0x86, 0xfd, 0x19, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
|
||||
0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_rectangle_xpm[1] = {{ png, sizeof( png ), "add_rectangle_xpm" }};
|
||||
|
||||
@@ -8,37 +8,21 @@
|
||||
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, 0xcf, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xed, 0x95, 0x41, 0x4b, 0x02,
|
||||
0x51, 0x10, 0xc7, 0xd5, 0xd2, 0x54, 0x56, 0x74, 0x91, 0x34, 0x73, 0x5d, 0x15, 0x57, 0x25, 0x44,
|
||||
0x10, 0x44, 0x54, 0x52, 0x49, 0xbd, 0x14, 0x88, 0x68, 0x0a, 0xe2, 0x49, 0x44, 0x50, 0x49, 0x64,
|
||||
0xd5, 0x4b, 0xdf, 0xa1, 0x6b, 0x5d, 0x3a, 0x77, 0xe9, 0xd4, 0xa1, 0x53, 0xdf, 0x41, 0x2a, 0xb3,
|
||||
0x53, 0xc7, 0x2e, 0x1d, 0xba, 0x07, 0xbb, 0x87, 0x9a, 0xe6, 0x2d, 0x1d, 0xc4, 0x3a, 0xb4, 0xb0,
|
||||
0x1b, 0x04, 0x3e, 0xf8, 0xb3, 0xf3, 0x66, 0x97, 0xf7, 0x9b, 0x37, 0x6f, 0xde, 0xac, 0x06, 0x00,
|
||||
0x34, 0x7f, 0x21, 0xcd, 0x0a, 0xf4, 0x7f, 0x41, 0x99, 0x4c, 0xe6, 0xa8, 0x56, 0xab, 0x4d, 0x1b,
|
||||
0x8d, 0xc6, 0xb4, 0xd5, 0x6a, 0xdd, 0x76, 0xbb, 0xdd, 0xd9, 0x70, 0x38, 0x7c, 0x18, 0x8d, 0x46,
|
||||
0xf3, 0xf1, 0x78, 0x3c, 0x9f, 0x4c, 0x26, 0x8f, 0xc4, 0x26, 0xbe, 0x7e, 0xbf, 0x3f, 0x6b, 0xb7,
|
||||
0xdb, 0x77, 0xcd, 0x66, 0x73, 0x5a, 0x2a, 0x95, 0xae, 0x64, 0x81, 0x70, 0x9c, 0xe4, 0xf3, 0x79,
|
||||
0x28, 0x16, 0x8b, 0x10, 0x89, 0x44, 0x20, 0x10, 0x08, 0x80, 0xcf, 0xe7, 0x93, 0xec, 0x42, 0xa1,
|
||||
0x00, 0x89, 0x44, 0x02, 0x58, 0x96, 0x05, 0xaf, 0xd7, 0x2b, 0xbd, 0x8b, 0xc7, 0xe3, 0x90, 0xcb,
|
||||
0xe5, 0xc0, 0xe5, 0x72, 0x3d, 0xcb, 0x05, 0x9d, 0xa7, 0x52, 0x29, 0x30, 0x9b, 0xcd, 0x53, 0xb4,
|
||||
0x77, 0x51, 0x2c, 0x6a, 0xcb, 0x6e, 0xb7, 0x0b, 0xe9, 0x74, 0x1a, 0x82, 0xc1, 0x20, 0xf9, 0xe8,
|
||||
0x10, 0xb5, 0x8d, 0xda, 0x41, 0x9d, 0x86, 0x42, 0x21, 0x70, 0x38, 0x1c, 0xaf, 0xb2, 0x40, 0x3a,
|
||||
0x9d, 0xee, 0x12, 0xa3, 0x15, 0x71, 0x81, 0xcd, 0x45, 0xbf, 0xd5, 0x6a, 0x15, 0x62, 0xb1, 0x18,
|
||||
0xf8, 0xfd, 0x7e, 0x02, 0xda, 0x5b, 0x08, 0x6c, 0x03, 0xc7, 0x0b, 0x06, 0xf2, 0x26, 0x0b, 0x64,
|
||||
0x30, 0x18, 0x6e, 0x70, 0x37, 0xd7, 0xcb, 0x7e, 0x02, 0x0a, 0x87, 0xc3, 0x52, 0xca, 0x16, 0x41,
|
||||
0x5f, 0x30, 0x1e, 0x03, 0xfc, 0xc0, 0xa7, 0x56, 0x4e, 0xea, 0x68, 0x14, 0xb5, 0xec, 0xb7, 0x58,
|
||||
0x2c, 0x02, 0x39, 0x1b, 0x8f, 0xc7, 0xf3, 0x13, 0x68, 0x1d, 0xc5, 0x28, 0x52, 0xde, 0x64, 0x47,
|
||||
0x1c, 0xc7, 0x01, 0xc3, 0x30, 0xdf, 0x40, 0x8a, 0xde, 0x23, 0x4c, 0xa9, 0x80, 0x00, 0xc0, 0xa7,
|
||||
0xba, 0x20, 0x3c, 0x70, 0x01, 0xcf, 0x01, 0x8c, 0x46, 0xa3, 0xba, 0x20, 0x2c, 0x10, 0x11, 0x61,
|
||||
0x40, 0x51, 0x94, 0xba, 0x20, 0x2c, 0x06, 0x11, 0xcf, 0x09, 0xb0, 0x8c, 0xd5, 0x05, 0xd1, 0x34,
|
||||
0x2d, 0x92, 0x42, 0x70, 0xbb, 0xdd, 0xea, 0x81, 0x70, 0xac, 0x39, 0x9d, 0xce, 0x77, 0xd2, 0x86,
|
||||
0x48, 0x17, 0xc0, 0xf9, 0x81, 0x5a, 0x20, 0x8e, 0x5c, 0xd4, 0x6c, 0x36, 0x2b, 0xf5, 0x3a, 0x9c,
|
||||
0x1f, 0x2b, 0x09, 0xd2, 0x62, 0xba, 0xac, 0xb8, 0xe8, 0xbe, 0x5e, 0xaf, 0xbf, 0x20, 0xfd, 0xaf,
|
||||
0x52, 0xa9, 0x40, 0xb5, 0x5a, 0x05, 0x9b, 0xcd, 0x76, 0x8f, 0xfe, 0xaa, 0xc9, 0x64, 0x62, 0x14,
|
||||
0xd9, 0x51, 0x34, 0x1a, 0x3d, 0x2b, 0x97, 0xcb, 0xd0, 0xe9, 0x74, 0xa0, 0xd7, 0xeb, 0x01, 0xcf,
|
||||
0xf3, 0x30, 0x18, 0x0c, 0x24, 0xbb, 0x5e, 0xaf, 0x43, 0x32, 0x99, 0x7c, 0x5a, 0xfd, 0x61, 0x57,
|
||||
0xa0, 0x5f, 0xeb, 0x13, 0xd7, 0x31, 0xfe, 0x47, 0x26, 0xf6, 0xab, 0x21, 0x00, 0x00, 0x00, 0x00,
|
||||
0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x00, 0xc8, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0x3d, 0x30, 0xc3, 0xf0, 0xb7, 0x48, 0x43, 0x43, 0xa3, 0x1b, 0x88, 0xff, 0x53, 0x88, 0xbb,
|
||||
0x09, 0x5a, 0xa4, 0xae, 0xae, 0xbe, 0x88, 0x52, 0x8b, 0x40, 0x66, 0x10, 0xe3, 0xa3, 0x5d, 0x48,
|
||||
0x9a, 0xce, 0x00, 0x71, 0xaf, 0xa6, 0xa6, 0x66, 0x0b, 0x90, 0x6e, 0x00, 0xe2, 0x03, 0x48, 0x72,
|
||||
0x20, 0x76, 0x03, 0xd0, 0xd0, 0xa9, 0x40, 0x7a, 0x3f, 0x10, 0xbf, 0x42, 0x92, 0xdb, 0x45, 0x8c,
|
||||
0x45, 0x17, 0x41, 0x8a, 0x81, 0x86, 0x77, 0x61, 0x91, 0x6b, 0x40, 0x32, 0xac, 0x01, 0x8b, 0x7c,
|
||||
0x1b, 0x54, 0xee, 0x22, 0x31, 0x16, 0xbd, 0x00, 0xe2, 0x67, 0xc6, 0xc6, 0xc6, 0xac, 0xa4, 0x5a,
|
||||
0xe4, 0xe0, 0xe0, 0xc0, 0x02, 0x14, 0x7f, 0x0a, 0x32, 0x83, 0xa0, 0x45, 0x40, 0x9f, 0xd4, 0x02,
|
||||
0x15, 0xfa, 0x62, 0x4b, 0x39, 0x84, 0x2c, 0x82, 0xaa, 0xf1, 0x05, 0x99, 0x41, 0x51, 0xf2, 0x26,
|
||||
0xc6, 0x22, 0xaa, 0xe4, 0xa3, 0x51, 0x8b, 0x46, 0x2d, 0x1a, 0xb5, 0x88, 0x2a, 0x16, 0xb5, 0x21,
|
||||
0x59, 0xd4, 0x46, 0x4b, 0x8b, 0x36, 0x23, 0x59, 0xb4, 0x99, 0x96, 0x16, 0x3d, 0x43, 0xb2, 0xe8,
|
||||
0x19, 0xd5, 0x2d, 0x02, 0x1a, 0xaa, 0x06, 0xad, 0x77, 0xd0, 0x2b, 0xb9, 0x05, 0x5a, 0x5a, 0x5a,
|
||||
0xda, 0xd4, 0xb4, 0x08, 0x6f, 0x8d, 0x3a, 0xda, 0x0a, 0xa2, 0x29, 0x06, 0x00, 0x01, 0x9f, 0xea,
|
||||
0xc9, 0x17, 0x8c, 0x41, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
|
||||
0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_text_xpm[1] = {{ png, sizeof( png ), "add_text_xpm" }};
|
||||
|
||||
@@ -8,33 +8,23 @@
|
||||
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, 0x96, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xdd, 0xd6, 0x3d, 0x6b, 0xd4,
|
||||
0x70, 0x1c, 0x07, 0xf0, 0x8f, 0xf7, 0xe0, 0x59, 0x9f, 0xea, 0xb5, 0xd7, 0x8a, 0x52, 0x0a, 0x1d,
|
||||
0x44, 0x70, 0x13, 0x8a, 0x16, 0x41, 0xad, 0x22, 0x74, 0xaa, 0x82, 0x0e, 0x8a, 0x20, 0x1d, 0x44,
|
||||
0x1c, 0x44, 0x6d, 0xb4, 0xc5, 0xf4, 0x9a, 0x60, 0xc0, 0xcd, 0xcd, 0xc9, 0x57, 0xe0, 0x1b, 0xf0,
|
||||
0x05, 0x38, 0x76, 0x71, 0xec, 0x1b, 0x70, 0xf2, 0x0d, 0xb8, 0x54, 0x3d, 0x7b, 0x0e, 0x17, 0x82,
|
||||
0xa9, 0x0f, 0x77, 0x49, 0x0f, 0x87, 0x0e, 0xdf, 0x90, 0xed, 0x93, 0x5f, 0xc8, 0xf7, 0x97, 0xbf,
|
||||
0x6e, 0xb7, 0xeb, 0x7f, 0xc4, 0xde, 0x85, 0xb4, 0x1d, 0x97, 0x98, 0x94, 0x98, 0xb4, 0x66, 0x42,
|
||||
0xa2, 0x25, 0xd1, 0xb2, 0x66, 0x5c, 0x62, 0x4c, 0x62, 0x4c, 0xa8, 0x29, 0x71, 0xcc, 0x0b, 0xa3,
|
||||
0xa5, 0x20, 0x81, 0x11, 0xb1, 0x6e, 0xa1, 0x3c, 0x35, 0x85, 0x4a, 0x31, 0x68, 0xc5, 0xa1, 0xc2,
|
||||
0xd0, 0x2d, 0xeb, 0x98, 0x1e, 0x14, 0xeb, 0x5d, 0x12, 0x87, 0x0b, 0x43, 0xf7, 0x7c, 0xc0, 0x02,
|
||||
0xf6, 0x17, 0x81, 0x8e, 0x16, 0x86, 0x9e, 0xf8, 0x84, 0x25, 0x8c, 0x14, 0xfb, 0x18, 0xee, 0x9b,
|
||||
0x70, 0xd2, 0x75, 0x4d, 0xa1, 0xa6, 0xf5, 0xdf, 0x32, 0x2e, 0xd2, 0xb6, 0x95, 0x41, 0x91, 0x8e,
|
||||
0x86, 0x00, 0x2d, 0xec, 0x1b, 0x1c, 0xa2, 0x8a, 0xd3, 0xb8, 0x8a, 0x6b, 0x7f, 0x4c, 0xe0, 0x63,
|
||||
0x6e, 0xaa, 0xb3, 0xde, 0xe0, 0x0c, 0xaa, 0x85, 0x7a, 0x94, 0x62, 0xf5, 0xbf, 0x26, 0xf4, 0x32,
|
||||
0x07, 0xdd, 0xf4, 0x1e, 0x57, 0x50, 0x1f, 0x6a, 0x61, 0x45, 0xe6, 0x73, 0xd0, 0x43, 0x9b, 0xb8,
|
||||
0x83, 0xc6, 0x70, 0xa1, 0xc4, 0x01, 0xb1, 0xaf, 0x19, 0x14, 0xfa, 0x82, 0x47, 0x38, 0x32, 0xf4,
|
||||
0x15, 0x24, 0xb6, 0x91, 0x9b, 0x6a, 0xc6, 0x2b, 0xcc, 0xf4, 0xeb, 0x53, 0x71, 0x28, 0xf2, 0x3a,
|
||||
0x07, 0x2d, 0x78, 0x87, 0x39, 0xd4, 0x86, 0x0b, 0xb5, 0x2d, 0xe6, 0xa0, 0x25, 0x1b, 0xb8, 0xd1,
|
||||
0xaf, 0xb8, 0xc5, 0xa1, 0x50, 0x53, 0x6c, 0x3b, 0x83, 0x02, 0x9f, 0xf1, 0xa0, 0x5f, 0x71, 0xcb,
|
||||
0xad, 0xfc, 0xc8, 0x66, 0x6e, 0xaa, 0xc8, 0x77, 0xb1, 0x6f, 0x69, 0x3a, 0x62, 0x3f, 0xb2, 0x87,
|
||||
0x59, 0x74, 0x10, 0x95, 0xb2, 0xd0, 0xdb, 0x81, 0x57, 0x55, 0xdd, 0x1c, 0x4e, 0x94, 0x85, 0xee,
|
||||
0x0e, 0x08, 0x6d, 0xe3, 0x31, 0xce, 0x95, 0x83, 0x12, 0x53, 0x62, 0x5b, 0xa2, 0x1d, 0xaf, 0x69,
|
||||
0x67, 0x22, 0x1d, 0x04, 0x38, 0x5f, 0xfe, 0xd7, 0x4c, 0x03, 0xb7, 0xb1, 0x8c, 0x67, 0x59, 0x2a,
|
||||
0x9e, 0xab, 0x59, 0x51, 0xb3, 0xaa, 0x61, 0x35, 0x9d, 0x68, 0x76, 0x37, 0x50, 0x15, 0xa7, 0x70,
|
||||
0x01, 0x17, 0xd3, 0x5c, 0xfa, 0x25, 0x97, 0x31, 0x9f, 0xde, 0x4f, 0xef, 0xee, 0xc0, 0xd1, 0xc3,
|
||||
0x6a, 0xff, 0x5c, 0xc4, 0xbd, 0x54, 0xf6, 0xde, 0x71, 0xeb, 0x27, 0x0d, 0x7b, 0xd6, 0x27, 0x8a,
|
||||
0xa6, 0xc3, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x00, 0xf4, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0xd5, 0x31, 0x0e, 0x82,
|
||||
0x40, 0x10, 0x85, 0xe1, 0x9f, 0x5e, 0x4f, 0x61, 0x3c, 0x0a, 0xf1, 0x2e, 0xe0, 0x21, 0x86, 0x50,
|
||||
0xd1, 0x68, 0x3c, 0x8b, 0xf1, 0x2a, 0x86, 0xc6, 0x1b, 0x50, 0x18, 0x7b, 0x5c, 0x0b, 0x56, 0xb3,
|
||||
0xe2, 0x9a, 0x80, 0xd9, 0x67, 0xc8, 0xd0, 0x7e, 0x99, 0xd9, 0xb7, 0x3b, 0x38, 0xe7, 0xf8, 0x47,
|
||||
0x0d, 0x3f, 0x63, 0x8b, 0x71, 0xc1, 0x28, 0xd4, 0x50, 0x87, 0xe1, 0x30, 0x7a, 0x6a, 0x56, 0x4a,
|
||||
0xe8, 0xe8, 0x21, 0x87, 0xb1, 0xd7, 0x41, 0x15, 0x79, 0x00, 0x5d, 0x31, 0x16, 0x1a, 0xc8, 0x91,
|
||||
0x61, 0x9c, 0x5f, 0x58, 0x45, 0x29, 0x81, 0xfc, 0xf8, 0x8a, 0xa0, 0xab, 0x16, 0x47, 0xa6, 0x82,
|
||||
0x16, 0x7e, 0x6c, 0xcf, 0xae, 0x36, 0x12, 0xc8, 0x63, 0xbb, 0xa0, 0xab, 0x93, 0x0e, 0xaa, 0x59,
|
||||
0x61, 0xf4, 0x1e, 0xba, 0x53, 0xb3, 0x96, 0x40, 0x91, 0xa8, 0x1f, 0x74, 0xd0, 0x7b, 0xd4, 0x6f,
|
||||
0xd8, 0xcc, 0xaf, 0x61, 0x39, 0x0d, 0x1a, 0x47, 0x7d, 0x7e, 0x15, 0x93, 0xa0, 0x48, 0xd4, 0xe7,
|
||||
0xd6, 0x39, 0x76, 0x35, 0xe2, 0x50, 0xc3, 0x72, 0xf6, 0xc8, 0x86, 0x31, 0x3f, 0xaf, 0x46, 0x3e,
|
||||
0x09, 0xfa, 0xe9, 0xb0, 0x8d, 0x43, 0xd0, 0xd5, 0x51, 0x07, 0xd5, 0xac, 0x31, 0xee, 0xdf, 0xb6,
|
||||
0x40, 0xda, 0xf7, 0xcc, 0x38, 0x05, 0x5d, 0xed, 0x74, 0x50, 0xc5, 0xe6, 0xdb, 0x16, 0x48, 0xfc,
|
||||
0x42, 0x93, 0x61, 0xb4, 0xb1, 0xa8, 0xa7, 0x5f, 0x70, 0x15, 0x65, 0x2c, 0xea, 0xe9, 0xa1, 0xcf,
|
||||
0x2d, 0x90, 0x4b, 0x20, 0x8f, 0xed, 0xc7, 0x51, 0xd7, 0x40, 0xef, 0x5b, 0xa0, 0x93, 0x41, 0xc1,
|
||||
0x33, 0x76, 0xc1, 0xd8, 0x4a, 0xa1, 0x71, 0x3d, 0x00, 0xc7, 0x97, 0xd1, 0xdb, 0xc1, 0xf7, 0x55,
|
||||
0x61, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_tracks_xpm[1] = {{ png, sizeof( png ), "add_tracks_xpm" }};
|
||||
|
||||
@@ -8,64 +8,41 @@
|
||||
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, 0x79, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x96, 0x4b, 0x4c, 0x13,
|
||||
0x41, 0x18, 0xc7, 0xa7, 0xa5, 0x2d, 0x16, 0x8a, 0xa5, 0x0a, 0x42, 0x69, 0x2b, 0xb4, 0x74, 0x77,
|
||||
0x76, 0x69, 0xc1, 0x68, 0xe1, 0xa0, 0x80, 0xd9, 0x3e, 0x09, 0x11, 0x12, 0x7c, 0x34, 0xc1, 0x84,
|
||||
0x68, 0x02, 0x2a, 0x07, 0xc4, 0x47, 0x54, 0x9e, 0x85, 0x90, 0xe8, 0xc5, 0xe8, 0xcd, 0x83, 0x07,
|
||||
0x31, 0x41, 0xcf, 0x26, 0xc6, 0x68, 0xe2, 0xeb, 0xa0, 0x07, 0x3c, 0x6b, 0xe2, 0xe3, 0xa2, 0x89,
|
||||
0xc4, 0x60, 0x82, 0x41, 0x40, 0x69, 0x0b, 0xb5, 0x62, 0xd7, 0x6f, 0xd6, 0x6d, 0xd3, 0x96, 0xb6,
|
||||
0x81, 0xd8, 0x1e, 0xfe, 0xe9, 0xec, 0x37, 0x8f, 0xdf, 0x37, 0x33, 0xdf, 0xf7, 0x4d, 0x11, 0xcf,
|
||||
0xf3, 0xa8, 0x8a, 0xab, 0xda, 0x92, 0x4b, 0x11, 0x06, 0xb2, 0x70, 0x96, 0x72, 0xd6, 0xce, 0x44,
|
||||
0x18, 0x27, 0x0e, 0xe5, 0x42, 0x64, 0x6d, 0x93, 0xcb, 0xa4, 0x16, 0x40, 0xb4, 0x87, 0xf2, 0xa3,
|
||||
0x31, 0xc4, 0xa7, 0x93, 0xc4, 0x27, 0xe1, 0x33, 0xf5, 0x67, 0x12, 0x76, 0x51, 0xc1, 0xb4, 0xa0,
|
||||
0xbc, 0xe1, 0x3c, 0xbe, 0xac, 0xab, 0x2c, 0x64, 0x6a, 0x33, 0x2e, 0x61, 0x27, 0xbd, 0x4a, 0x3c,
|
||||
0x33, 0x1d, 0x30, 0x2e, 0x95, 0x75, 0xed, 0x08, 0x49, 0x47, 0xa4, 0x9b, 0x04, 0xe1, 0xa0, 0xb9,
|
||||
0xd5, 0xbc, 0x75, 0x1d, 0xa8, 0xb0, 0xbf, 0x90, 0x87, 0xef, 0x00, 0xe3, 0xa2, 0x6f, 0x60, 0x0e,
|
||||
0xd7, 0x93, 0x33, 0xb6, 0x78, 0x2d, 0x0a, 0xd2, 0x86, 0x49, 0x37, 0xcd, 0xad, 0xd5, 0xfe, 0x82,
|
||||
0x33, 0x05, 0xbc, 0xf2, 0x9c, 0x52, 0x90, 0x64, 0x54, 0xb2, 0x79, 0x90, 0x6c, 0x50, 0x26, 0x6c,
|
||||
0xd5, 0xc2, 0xd1, 0x4d, 0x68, 0x02, 0x55, 0x20, 0x1f, 0x9a, 0x04, 0xfb, 0x07, 0xd0, 0x47, 0xd0,
|
||||
0x1d, 0x34, 0x82, 0xb4, 0xac, 0x83, 0x3e, 0x01, 0xe3, 0xdf, 0x08, 0x72, 0xd1, 0x9f, 0x0c, 0x87,
|
||||
0xf4, 0x19, 0x8f, 0x1d, 0x4e, 0x64, 0x05, 0x37, 0xe2, 0xa2, 0x04, 0x90, 0xce, 0xab, 0x0b, 0x82,
|
||||
0x07, 0x97, 0xd1, 0x28, 0xaa, 0x84, 0xef, 0x85, 0x14, 0x13, 0xbf, 0x81, 0x03, 0xe5, 0x24, 0x8a,
|
||||
0x84, 0x48, 0xf2, 0xa2, 0x3c, 0xda, 0x4d, 0x3f, 0xd3, 0x76, 0x6a, 0x83, 0x99, 0x40, 0xc0, 0x50,
|
||||
0x25, 0x80, 0xc0, 0x18, 0xaa, 0xf3, 0xd4, 0x15, 0x42, 0xfb, 0x9e, 0x38, 0xf0, 0x25, 0x40, 0x9b,
|
||||
0xe0, 0xb7, 0x51, 0x68, 0x13, 0x9b, 0x0f, 0xad, 0x88, 0x4e, 0x04, 0xa0, 0xdd, 0xaf, 0xdf, 0xab,
|
||||
0x57, 0x62, 0x37, 0xfd, 0xba, 0xf4, 0x78, 0x69, 0x68, 0x43, 0x20, 0x72, 0x6c, 0xb4, 0x9b, 0x9a,
|
||||
0x13, 0x3c, 0x1d, 0x43, 0x73, 0xe2, 0xc0, 0x86, 0x98, 0xf7, 0x3e, 0xc4, 0xa6, 0x58, 0x28, 0x02,
|
||||
0xea, 0xac, 0x6d, 0xaa, 0xd5, 0x60, 0x17, 0x3d, 0x53, 0x7c, 0xb2, 0xf8, 0x77, 0x2a, 0x90, 0xe0,
|
||||
0x7c, 0x14, 0x24, 0xbf, 0x24, 0x27, 0xa0, 0x59, 0x11, 0x34, 0x2b, 0x0e, 0xdc, 0x1d, 0x03, 0x8d,
|
||||
0xa1, 0x5d, 0x69, 0x8e, 0x27, 0x0c, 0x4e, 0x78, 0xac, 0xfb, 0xad, 0x06, 0x58, 0x74, 0xbe, 0xa8,
|
||||
0x4f, 0x15, 0x49, 0x02, 0xad, 0x26, 0x80, 0x92, 0x8e, 0xee, 0x96, 0x38, 0xf0, 0x05, 0x1c, 0x5d,
|
||||
0x3d, 0xdc, 0xcb, 0x1e, 0x68, 0x3f, 0xcf, 0x70, 0xe9, 0x64, 0x7e, 0x03, 0xcb, 0xb1, 0x56, 0xd8,
|
||||
0xd9, 0x4f, 0xe5, 0x59, 0x65, 0x02, 0xc8, 0xd6, 0x6e, 0x2b, 0x48, 0x00, 0x55, 0x1e, 0xdc, 0xb9,
|
||||
0xcc, 0x70, 0x4c, 0x2f, 0x2c, 0x5c, 0x02, 0xdf, 0x5f, 0x52, 0x2c, 0xf8, 0x03, 0xc0, 0x86, 0xd8,
|
||||
0x2e, 0xc7, 0xd1, 0x95, 0xb8, 0xbe, 0x79, 0xd8, 0x19, 0xae, 0x71, 0xd6, 0x34, 0x03, 0xcc, 0x9f,
|
||||
0x7f, 0x21, 0x3f, 0x3d, 0x48, 0x71, 0x51, 0x41, 0x3a, 0x96, 0xb1, 0x1b, 0x57, 0x08, 0x30, 0x1f,
|
||||
0xba, 0x2b, 0xde, 0xd7, 0x22, 0xe8, 0x3e, 0xd8, 0x4c, 0x8c, 0x93, 0xd9, 0x8e, 0x9d, 0xf8, 0x31,
|
||||
0xa8, 0x4e, 0xbc, 0xbb, 0xc9, 0x38, 0xd8, 0x0c, 0x38, 0xa2, 0x63, 0xec, 0xcc, 0x61, 0x92, 0x8b,
|
||||
0xf2, 0x01, 0x99, 0x70, 0x4a, 0x24, 0x60, 0xd6, 0x25, 0xac, 0xa6, 0x47, 0x13, 0x86, 0x10, 0x5f,
|
||||
0xb0, 0x38, 0xb0, 0x23, 0xea, 0x79, 0x54, 0x34, 0x47, 0x33, 0xe0, 0xed, 0xac, 0xde, 0xab, 0x23,
|
||||
0x63, 0x16, 0xad, 0x0e, 0x73, 0x35, 0x09, 0x71, 0x98, 0xf7, 0x20, 0x0e, 0xf6, 0x0e, 0x0d, 0x21,
|
||||
0x0d, 0xe3, 0xa2, 0xfa, 0x49, 0x72, 0x33, 0x0e, 0x1c, 0x26, 0x49, 0x9f, 0xb2, 0x04, 0x91, 0xcc,
|
||||
0xa7, 0x5a, 0xa8, 0x00, 0xe4, 0xc8, 0x57, 0xaa, 0xc5, 0xfc, 0x84, 0xf2, 0x50, 0x4f, 0x01, 0xf0,
|
||||
0x1d, 0xbe, 0x03, 0xea, 0x5e, 0xf5, 0x1f, 0x32, 0x46, 0x7d, 0x4a, 0x1d, 0x81, 0x84, 0x9d, 0x63,
|
||||
0x9b, 0x59, 0x2d, 0x3a, 0x8f, 0x94, 0x60, 0x9b, 0x8e, 0xad, 0x31, 0x8e, 0x5e, 0x11, 0x1b, 0xec,
|
||||
0xfa, 0x2a, 0x14, 0x55, 0x3e, 0x2d, 0x28, 0x2a, 0xf9, 0x80, 0x9c, 0x57, 0x9d, 0x56, 0xf1, 0xaa,
|
||||
0x3e, 0x95, 0x50, 0x35, 0x92, 0xfb, 0xb7, 0x75, 0x6b, 0xd6, 0x20, 0x87, 0x3e, 0x93, 0xf0, 0x26,
|
||||
0xbb, 0x00, 0xdb, 0xfb, 0xb8, 0xfe, 0x47, 0x70, 0xd4, 0x32, 0xd6, 0xce, 0xde, 0xe6, 0x38, 0x4e,
|
||||
0xb6, 0xa1, 0xea, 0x9d, 0x49, 0xa5, 0xc7, 0x4a, 0xc2, 0xd8, 0x4d, 0xbd, 0x15, 0xa2, 0x75, 0x02,
|
||||
0xe9, 0x13, 0x82, 0xc8, 0x87, 0xa6, 0x6c, 0x36, 0x9b, 0x3c, 0xf6, 0x1e, 0xfd, 0x0f, 0x88, 0x48,
|
||||
0x7b, 0xb4, 0x7c, 0x15, 0x76, 0x36, 0x4d, 0x8a, 0x2f, 0xc0, 0x6a, 0x92, 0xca, 0xd7, 0xb5, 0xac,
|
||||
0x81, 0x88, 0xf4, 0x47, 0x74, 0x41, 0xb8, 0xb3, 0x87, 0x00, 0x92, 0x42, 0xe4, 0xed, 0x03, 0xdb,
|
||||
0x4a, 0xb4, 0x2f, 0xab, 0x20, 0xf2, 0x38, 0xee, 0xec, 0x30, 0x90, 0x00, 0x9a, 0x12, 0xc3, 0xbe,
|
||||
0x0d, 0xec, 0x6b, 0x42, 0x3f, 0x81, 0x67, 0x0b, 0x24, 0xc0, 0xe0, 0x6d, 0x32, 0xb6, 0x1b, 0xfd,
|
||||
0x8c, 0x93, 0xbe, 0x2e, 0x96, 0xad, 0x6e, 0x11, 0x24, 0xcb, 0x2a, 0x88, 0x48, 0x3a, 0x2c, 0xe5,
|
||||
0xab, 0x21, 0x7f, 0xb0, 0x03, 0x0f, 0x8a, 0xb0, 0x11, 0x00, 0x29, 0xb2, 0x0e, 0x12, 0x1e, 0xd0,
|
||||
0x21, 0x19, 0xe4, 0xa1, 0xd9, 0xcf, 0x72, 0xb8, 0x27, 0x56, 0xae, 0x72, 0x01, 0x12, 0x72, 0xf0,
|
||||
0xdf, 0x6b, 0x00, 0x30, 0xb6, 0x23, 0xfe, 0xef, 0x16, 0x0f, 0xa5, 0x62, 0x2d, 0xdb, 0x22, 0x7f,
|
||||
0xb5, 0x58, 0x07, 0xf3, 0x0b, 0x2a, 0x84, 0x1d, 0x25, 0xd7, 0xb3, 0x5c, 0xe9, 0x2f, 0x4c, 0xc2,
|
||||
0xc4, 0x34, 0x3a, 0x8e, 0x12, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
|
||||
0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x02, 0x17, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xb5, 0x96, 0xbb, 0x4b, 0x03,
|
||||
0x41, 0x10, 0x87, 0xcf, 0x07, 0x88, 0x85, 0xa8, 0x85, 0x8d, 0x62, 0x65, 0xa7, 0x58, 0x2b, 0xf8,
|
||||
0xc2, 0xce, 0x4a, 0x14, 0x14, 0x2c, 0x14, 0x45, 0xd2, 0x28, 0x01, 0x0b, 0x9b, 0x94, 0x79, 0x19,
|
||||
0x12, 0x12, 0x2c, 0xf2, 0x0f, 0x44, 0x0d, 0xbe, 0x0a, 0x1b, 0x15, 0x31, 0x92, 0x22, 0x45, 0x34,
|
||||
0x85, 0x28, 0x22, 0x8a, 0x0a, 0xa2, 0x11, 0x15, 0x91, 0xf8, 0x80, 0x18, 0x21, 0x48, 0xcc, 0xf9,
|
||||
0x9b, 0x30, 0x07, 0x6b, 0x4c, 0x34, 0x98, 0x4d, 0xf1, 0xc1, 0xb2, 0xbb, 0x37, 0xdf, 0xcd, 0xdd,
|
||||
0xec, 0xdc, 0x29, 0x8a, 0x51, 0x89, 0x81, 0xeb, 0x02, 0x13, 0x53, 0x78, 0x30, 0x57, 0x60, 0xae,
|
||||
0x73, 0x11, 0x2d, 0x82, 0xd5, 0x42, 0x89, 0xb6, 0xc0, 0x15, 0x78, 0x06, 0x49, 0xa0, 0x82, 0x0f,
|
||||
0xde, 0xbb, 0x2d, 0x43, 0xe4, 0x05, 0x27, 0x1c, 0xdc, 0x0f, 0xa6, 0x41, 0x27, 0x68, 0x03, 0x63,
|
||||
0x60, 0x87, 0xd7, 0x8e, 0xf2, 0x15, 0xdd, 0x80, 0x37, 0x30, 0xa2, 0xaa, 0x6a, 0x91, 0xd9, 0x6c,
|
||||
0x6e, 0x31, 0x1a, 0x8d, 0x7a, 0x82, 0xc6, 0x34, 0x87, 0xb5, 0xe1, 0x7f, 0xc8, 0xbe, 0x89, 0x76,
|
||||
0xc1, 0x27, 0x68, 0xb5, 0x58, 0x2c, 0x0d, 0x08, 0x1e, 0x00, 0x6a, 0x1a, 0x01, 0x5a, 0xc3, 0x9e,
|
||||
0x51, 0x96, 0xdd, 0x65, 0xa8, 0x30, 0xff, 0x6f, 0x22, 0x7a, 0xe1, 0x71, 0x30, 0xe3, 0x70, 0x38,
|
||||
0x2a, 0x10, 0x30, 0x9c, 0x41, 0xa2, 0x11, 0xa6, 0x3d, 0xd8, 0x3b, 0x00, 0x96, 0xc1, 0x8a, 0x40,
|
||||
0x90, 0x8f, 0x8b, 0x37, 0x9b, 0xc8, 0xc7, 0x77, 0x58, 0x85, 0x40, 0x4e, 0x21, 0x68, 0x02, 0x2c,
|
||||
0x31, 0x09, 0x61, 0xde, 0x89, 0xc7, 0xa8, 0xa4, 0x83, 0xeb, 0xab, 0xc1, 0x3b, 0x08, 0x65, 0x13,
|
||||
0xed, 0x83, 0x30, 0x6d, 0x46, 0x90, 0x63, 0x21, 0xe0, 0xb8, 0x16, 0x84, 0xc6, 0xbf, 0x64, 0x49,
|
||||
0x6c, 0xb0, 0x6c, 0x16, 0xbc, 0x82, 0xf9, 0x4c, 0xa2, 0x0b, 0x2a, 0x69, 0x7a, 0xd9, 0xb8, 0x20,
|
||||
0xae, 0x5d, 0x6c, 0xb3, 0xd9, 0x6a, 0x34, 0x11, 0x8d, 0xff, 0x10, 0x25, 0x51, 0x30, 0x4d, 0x88,
|
||||
0x53, 0x0f, 0x12, 0x20, 0x50, 0xa8, 0x8c, 0x08, 0x0f, 0x67, 0x45, 0xef, 0xe8, 0x51, 0xea, 0x3b,
|
||||
0xc2, 0xb8, 0x5d, 0x98, 0xff, 0xb0, 0x5a, 0xad, 0x75, 0x88, 0xd3, 0xcc, 0x87, 0xdc, 0x27, 0xa3,
|
||||
0xea, 0x7a, 0xc0, 0x10, 0xcb, 0xf6, 0x84, 0x75, 0x17, 0x67, 0x45, 0x87, 0xfb, 0x56, 0xd6, 0x39,
|
||||
0x7a, 0x01, 0xe5, 0x98, 0xef, 0x13, 0xf6, 0x44, 0x41, 0x15, 0xe6, 0xbb, 0x39, 0xab, 0xf5, 0x7c,
|
||||
0x3b, 0xc3, 0x29, 0xf7, 0xbf, 0x49, 0x2e, 0xa2, 0x73, 0x41, 0x66, 0xe0, 0xac, 0x0e, 0xc1, 0xa5,
|
||||
0x8c, 0x5e, 0x77, 0x46, 0x45, 0x04, 0x8a, 0x11, 0x5c, 0x27, 0x88, 0x1e, 0xdc, 0x6e, 0x77, 0x19,
|
||||
0xe6, 0x07, 0xf9, 0x29, 0x45, 0xf2, 0xed, 0xde, 0x6b, 0xbc, 0x3e, 0x48, 0x81, 0x49, 0x20, 0xc8,
|
||||
0x74, 0x98, 0x2f, 0xe1, 0x1b, 0x51, 0x65, 0x7c, 0x8f, 0xe8, 0x86, 0x0e, 0xb8, 0x28, 0x0c, 0x82,
|
||||
0xe8, 0x02, 0x14, 0x63, 0x6d, 0x22, 0x57, 0xd1, 0x5f, 0x6c, 0x72, 0xc6, 0x5d, 0x76, 0xbb, 0xbd,
|
||||
0x92, 0x8b, 0x21, 0x25, 0x33, 0x99, 0x4c, 0xfd, 0x54, 0x2c, 0xa9, 0x27, 0x23, 0xe9, 0x53, 0x7e,
|
||||
0xcf, 0x9d, 0x85, 0xb2, 0x72, 0x09, 0x59, 0x85, 0xb8, 0x28, 0x7a, 0x65, 0x89, 0xfc, 0xfc, 0xae,
|
||||
0x1a, 0xe9, 0xc0, 0xd2, 0xc1, 0xd5, 0x64, 0xa8, 0xd6, 0x8e, 0x94, 0x4c, 0xe2, 0xcf, 0xc9, 0x13,
|
||||
0xf0, 0x70, 0x56, 0x9e, 0x1f, 0xcd, 0x56, 0xa2, 0x28, 0xc8, 0x95, 0x59, 0x4b, 0xcd, 0x95, 0x9a,
|
||||
0x2c, 0x8b, 0x22, 0xb2, 0x45, 0x0b, 0x20, 0x0a, 0x1c, 0x14, 0x18, 0x85, 0x30, 0xc5, 0xad, 0x4c,
|
||||
0xaf, 0x89, 0x64, 0xfe, 0x40, 0x46, 0x99, 0xd2, 0xf4, 0x8f, 0xe2, 0x17, 0x8c, 0x26, 0x1a, 0x66,
|
||||
0xe7, 0x5c, 0xad, 0xd1, 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" }};
|
||||
|
||||
@@ -8,57 +8,58 @@
|
||||
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, 0x0c, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0xd6, 0x5f, 0x48, 0x53,
|
||||
0x51, 0x1c, 0xc0, 0xf1, 0xb3, 0xb6, 0xbb, 0x3f, 0xee, 0x5a, 0x9a, 0x9a, 0x88, 0x4a, 0x0a, 0x11,
|
||||
0x82, 0xd9, 0x8c, 0x52, 0xfa, 0x83, 0x46, 0xf6, 0x87, 0xac, 0x8c, 0x42, 0x33, 0x49, 0xac, 0xe8,
|
||||
0x1f, 0x24, 0xfd, 0x43, 0xcd, 0xa9, 0xa5, 0x69, 0x51, 0x94, 0xf4, 0x30, 0xad, 0xd7, 0x64, 0x39,
|
||||
0x4b, 0x2c, 0x1f, 0xf2, 0x21, 0x2c, 0xd1, 0xd4, 0x34, 0x1d, 0xa9, 0xf4, 0x10, 0x4c, 0x17, 0x9b,
|
||||
0x5a, 0x6c, 0xb2, 0x74, 0x9b, 0xe0, 0x6a, 0x98, 0x53, 0x7f, 0x9d, 0xdd, 0x9c, 0xb2, 0xeb, 0x71,
|
||||
0x7f, 0x44, 0x7a, 0xf8, 0xc2, 0x76, 0xd9, 0xbd, 0x1f, 0xce, 0xb9, 0x77, 0xe7, 0x1e, 0x04, 0x00,
|
||||
0xe8, 0x7f, 0xb4, 0xf0, 0x41, 0x8a, 0xd6, 0xa0, 0x52, 0x14, 0xb5, 0xe2, 0xe5, 0x21, 0xb1, 0x33,
|
||||
0x54, 0x8c, 0xce, 0xe2, 0x60, 0xc5, 0xbb, 0x8d, 0x0e, 0xfe, 0x2f, 0xe8, 0x10, 0x11, 0xaa, 0xd8,
|
||||
0xce, 0x05, 0xc3, 0x6a, 0xca, 0xe3, 0x5a, 0x23, 0x79, 0x10, 0x77, 0x81, 0xb3, 0x34, 0x54, 0x82,
|
||||
0x0e, 0x13, 0x21, 0xf9, 0x16, 0x1e, 0x00, 0x97, 0xef, 0x55, 0xb3, 0xb8, 0x1a, 0x09, 0x0f, 0xc2,
|
||||
0xaf, 0x73, 0x48, 0x50, 0x8a, 0x4b, 0x68, 0xd4, 0x57, 0x90, 0xe2, 0xee, 0x49, 0x0a, 0xb9, 0x81,
|
||||
0xa2, 0x14, 0x12, 0xaa, 0xd6, 0x2c, 0xe6, 0xdb, 0xec, 0xe7, 0x58, 0x05, 0x7c, 0xb8, 0xb7, 0x9b,
|
||||
0xcb, 0x9e, 0xba, 0xa3, 0x44, 0xe8, 0x79, 0xec, 0xdc, 0x88, 0x78, 0x82, 0x03, 0x9e, 0x3e, 0xba,
|
||||
0x0d, 0x91, 0x68, 0x5d, 0xfd, 0x26, 0x5e, 0xdf, 0x34, 0xef, 0xdf, 0x08, 0x59, 0xd0, 0x31, 0x22,
|
||||
0x54, 0xbd, 0x0c, 0xc8, 0xd1, 0x98, 0x2f, 0x35, 0xbd, 0x08, 0x2a, 0x41, 0xc7, 0xdd, 0x41, 0xfb,
|
||||
0xbd, 0x85, 0x4c, 0x34, 0xf5, 0x87, 0x00, 0xa5, 0x12, 0x21, 0x85, 0xc4, 0x01, 0x09, 0xf7, 0x79,
|
||||
0x0b, 0x19, 0x69, 0x6a, 0x8a, 0x30, 0x75, 0x69, 0x44, 0xa8, 0x66, 0x01, 0xda, 0xbb, 0x0c, 0xc8,
|
||||
0x46, 0x18, 0xd1, 0x89, 0x15, 0x87, 0xf0, 0x3d, 0x22, 0x41, 0x27, 0x89, 0xd0, 0x8b, 0xcd, 0xf3,
|
||||
0x50, 0x12, 0xfb, 0x42, 0xaa, 0xd0, 0xd0, 0x80, 0x47, 0xe9, 0xa9, 0x46, 0xbd, 0x7f, 0xa0, 0x12,
|
||||
0xb8, 0x82, 0x36, 0x76, 0x36, 0x8a, 0x3f, 0xbb, 0x08, 0x2a, 0x46, 0x19, 0xee, 0xa0, 0x3d, 0x6c,
|
||||
0xc8, 0x22, 0xa6, 0x9f, 0x74, 0x34, 0xbc, 0x81, 0x2f, 0x2d, 0x2d, 0xd0, 0xb2, 0x73, 0xc7, 0x92,
|
||||
0x7f, 0x60, 0x16, 0x74, 0x8a, 0x08, 0xbd, 0x5c, 0x0a, 0xe2, 0xf3, 0xa3, 0x7f, 0x8b, 0xc4, 0xd3,
|
||||
0x3d, 0xcd, 0x4d, 0x60, 0xb3, 0xd9, 0x60, 0x7c, 0xdc, 0x0c, 0x25, 0xe5, 0xb9, 0x78, 0xf9, 0xa1,
|
||||
0x21, 0xf6, 0x12, 0xc7, 0x29, 0xd6, 0xd4, 0x65, 0x12, 0xa1, 0xda, 0x98, 0xf9, 0x25, 0x28, 0x03,
|
||||
0x90, 0x30, 0x62, 0x3e, 0x2e, 0xf5, 0xe1, 0x97, 0x88, 0x86, 0xce, 0xf6, 0x66, 0xb0, 0x58, 0x2c,
|
||||
0x18, 0x1a, 0x07, 0xab, 0xd5, 0x0a, 0x4d, 0x1d, 0xef, 0x21, 0x5e, 0x1a, 0xef, 0x6a, 0xad, 0xcb,
|
||||
0x72, 0x07, 0x2d, 0xea, 0x6b, 0x08, 0x3d, 0xd3, 0xd6, 0xdd, 0x0a, 0x26, 0x93, 0x09, 0x46, 0x46,
|
||||
0x46, 0x40, 0xaf, 0xd7, 0x83, 0xd1, 0x68, 0x84, 0xd1, 0xb1, 0x51, 0xc8, 0x7d, 0x9c, 0x03, 0x74,
|
||||
0xa1, 0x98, 0x84, 0x9d, 0x26, 0x42, 0xf6, 0xb5, 0x4a, 0x19, 0x4e, 0x31, 0x7d, 0x0e, 0xa3, 0x66,
|
||||
0x7a, 0x43, 0xa9, 0x29, 0xc7, 0xf7, 0xe4, 0x4c, 0x11, 0x7c, 0x54, 0xb6, 0x33, 0xc8, 0xd0, 0xd0,
|
||||
0x10, 0x0c, 0x0e, 0x0e, 0x82, 0x46, 0xa3, 0x61, 0xb2, 0x8f, 0xf0, 0x5d, 0x5b, 0x23, 0xc4, 0xe5,
|
||||
0x6f, 0x63, 0x43, 0xe9, 0x5e, 0xbf, 0x8f, 0x44, 0x85, 0x42, 0xe8, 0xec, 0xe9, 0x80, 0xe1, 0xe1,
|
||||
0x61, 0x18, 0x18, 0x18, 0x80, 0xfe, 0xfe, 0x7e, 0x50, 0xab, 0xd5, 0x0c, 0xa4, 0xd5, 0x6a, 0xc1,
|
||||
0x6c, 0x36, 0x83, 0xc9, 0x6c, 0x82, 0x9c, 0x72, 0x3c, 0xba, 0x02, 0xda, 0xf5, 0xa2, 0xea, 0x2a,
|
||||
0x9f, 0x42, 0x11, 0x74, 0xf5, 0x7e, 0x62, 0x10, 0x95, 0x4a, 0x05, 0x13, 0x13, 0x13, 0x0c, 0x30,
|
||||
0x39, 0x39, 0x09, 0x55, 0xaf, 0xab, 0x40, 0x56, 0x2b, 0x83, 0x07, 0xf2, 0xfb, 0x70, 0x53, 0x96,
|
||||
0x07, 0x89, 0xd7, 0x12, 0x1c, 0xd0, 0x11, 0xaf, 0x21, 0x71, 0x81, 0x0f, 0x28, 0xfb, 0x94, 0xa0,
|
||||
0xd3, 0xe9, 0xe0, 0x87, 0xee, 0x3b, 0xdc, 0xad, 0x28, 0x63, 0xee, 0x97, 0x7d, 0x0a, 0x5f, 0xbd,
|
||||
0xad, 0x03, 0x41, 0x91, 0xc0, 0xf3, 0x17, 0x9f, 0xab, 0x68, 0x29, 0x0d, 0xdd, 0x3d, 0x5d, 0xd0,
|
||||
0xd8, 0xda, 0x08, 0x31, 0x05, 0x31, 0x20, 0xc4, 0x17, 0x96, 0xd7, 0xcb, 0x99, 0x51, 0x19, 0x0c,
|
||||
0x06, 0xc8, 0x7e, 0x78, 0x99, 0x04, 0x25, 0x3b, 0x43, 0xb7, 0x50, 0x3c, 0x3e, 0x28, 0x73, 0x95,
|
||||
0x9f, 0xd4, 0xef, 0xd9, 0x99, 0x2b, 0x59, 0xe6, 0xa0, 0xfc, 0x00, 0x39, 0x73, 0xac, 0x08, 0x55,
|
||||
0x26, 0x5c, 0xdd, 0xd5, 0xa5, 0xd1, 0x6a, 0x66, 0xed, 0xf7, 0x4a, 0xfd, 0x4d, 0x3d, 0x13, 0x9c,
|
||||
0x1d, 0x5c, 0x87, 0xf2, 0xd1, 0x53, 0x7c, 0xbd, 0x4a, 0xe6, 0x37, 0x78, 0x27, 0xe4, 0x04, 0x79,
|
||||
0xbc, 0x3f, 0x43, 0x88, 0x87, 0x0b, 0xc2, 0x6d, 0xc0, 0x6d, 0xc5, 0x25, 0x9d, 0xbf, 0x78, 0xae,
|
||||
0x5d, 0xa1, 0xa8, 0xfe, 0x59, 0x5a, 0x76, 0x47, 0x45, 0xd3, 0x74, 0x1a, 0x3e, 0x96, 0x88, 0x93,
|
||||
0xe0, 0x22, 0x70, 0xfe, 0x38, 0xce, 0xf2, 0x36, 0x83, 0x08, 0xad, 0xc2, 0xf9, 0xe0, 0x02, 0x71,
|
||||
0xeb, 0x71, 0x51, 0xb8, 0xe8, 0xb9, 0x36, 0xe2, 0xc2, 0x70, 0x6b, 0x71, 0x42, 0xc7, 0x39, 0x7f,
|
||||
0x01, 0x6d, 0xce, 0x7d, 0x04, 0x0b, 0xe5, 0x99, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e,
|
||||
0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x03, 0x26, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x96, 0x49, 0x4c, 0x13,
|
||||
0x61, 0x14, 0x80, 0x1f, 0x45, 0x41, 0x5c, 0x22, 0x31, 0x1c, 0x58, 0x3c, 0x48, 0xc0, 0x60, 0xc4,
|
||||
0x8a, 0x08, 0xd5, 0xb8, 0xd2, 0x7d, 0xdf, 0xa0, 0x42, 0x05, 0xba, 0xb2, 0xd8, 0x83, 0x02, 0x01,
|
||||
0x24, 0x12, 0x59, 0x13, 0x13, 0x13, 0x2f, 0x70, 0x94, 0x78, 0x11, 0xd4, 0x68, 0x41, 0x63, 0x40,
|
||||
0x40, 0x8c, 0x41, 0xc0, 0x20, 0x95, 0xa8, 0x07, 0x25, 0x0d, 0x98, 0x98, 0x80, 0x18, 0x4e, 0x18,
|
||||
0xda, 0x42, 0x4b, 0xac, 0xa4, 0xf4, 0x77, 0xfe, 0x6a, 0x09, 0x60, 0xa7, 0x20, 0x14, 0x0f, 0x5f,
|
||||
0x66, 0x32, 0xf3, 0xcf, 0xfb, 0xfe, 0xc9, 0x7b, 0xf9, 0xdf, 0x03, 0xa8, 0x07, 0x07, 0xc1, 0xc4,
|
||||
0x16, 0xe3, 0x80, 0x3f, 0x37, 0xcd, 0x5b, 0xcc, 0xc4, 0x0a, 0x51, 0x4c, 0x09, 0x74, 0x50, 0x0b,
|
||||
0xa1, 0xd7, 0x1f, 0x51, 0xa5, 0xf0, 0x74, 0x53, 0x22, 0x2c, 0x19, 0x0e, 0x05, 0x64, 0x06, 0x72,
|
||||
0x86, 0x42, 0x43, 0x91, 0x5c, 0xc8, 0x5c, 0x48, 0xd0, 0x25, 0xdc, 0x20, 0xbe, 0x91, 0xaf, 0x86,
|
||||
0x97, 0x09, 0xd7, 0xf0, 0xba, 0xa4, 0x02, 0xe8, 0x26, 0x15, 0xe1, 0xdd, 0xe2, 0x45, 0xd5, 0x34,
|
||||
0xa8, 0x29, 0x3b, 0x03, 0x42, 0x5f, 0xe8, 0xd2, 0x62, 0x0c, 0x32, 0xb9, 0xc4, 0x29, 0xcf, 0x90,
|
||||
0xcd, 0x8b, 0x44, 0x82, 0x72, 0x84, 0x10, 0x2c, 0x07, 0xaf, 0xc1, 0x31, 0x70, 0xac, 0x35, 0x45,
|
||||
0x78, 0xf1, 0xea, 0x00, 0x5e, 0x58, 0x02, 0xd6, 0x61, 0x95, 0x3a, 0xd7, 0x3a, 0x3e, 0x3e, 0x8e,
|
||||
0xd4, 0x5a, 0x95, 0x43, 0x22, 0x93, 0xdc, 0xa5, 0xd3, 0xe9, 0xdb, 0x02, 0x2e, 0x62, 0xf0, 0x18,
|
||||
0x89, 0x2a, 0x4d, 0xae, 0x75, 0x6e, 0x6e, 0x0e, 0x4d, 0x4f, 0x4f, 0xa3, 0xab, 0x15, 0x65, 0xf3,
|
||||
0x52, 0x99, 0xe4, 0x0d, 0x9b, 0xcd, 0xde, 0x1b, 0x50, 0x11, 0x97, 0xcb, 0x3d, 0xe2, 0x15, 0x61,
|
||||
0x66, 0x67, 0x67, 0x51, 0x43, 0x63, 0x83, 0x53, 0x22, 0x13, 0x7f, 0x25, 0xde, 0xc5, 0x06, 0x4c,
|
||||
0x44, 0xec, 0x9c, 0xaa, 0xd6, 0xa8, 0x96, 0x44, 0x5e, 0xda, 0xda, 0x5a, 0x17, 0x45, 0x52, 0xa1,
|
||||
0x2d, 0x87, 0x11, 0x5b, 0x1e, 0x98, 0x1c, 0xf1, 0x59, 0x47, 0x89, 0xdc, 0xfc, 0x25, 0xc2, 0x0c,
|
||||
0x0e, 0x0e, 0x22, 0x89, 0x4c, 0xe4, 0x6c, 0x89, 0x8e, 0xda, 0xbc, 0x88, 0xc7, 0x63, 0x24, 0x69,
|
||||
0xb4, 0x6a, 0x9f, 0x22, 0xcc, 0xe8, 0xe8, 0x28, 0xca, 0x51, 0xa4, 0x23, 0xba, 0x92, 0x3a, 0xb1,
|
||||
0x29, 0x11, 0x87, 0xc3, 0x39, 0xa6, 0xd1, 0x91, 0x8b, 0x30, 0x53, 0x53, 0x53, 0xa8, 0xd0, 0x90,
|
||||
0xe7, 0x3a, 0x97, 0x73, 0xf6, 0x5b, 0x70, 0x4d, 0xf0, 0xfd, 0x8d, 0xe6, 0x28, 0x59, 0xa3, 0xd3,
|
||||
0xf8, 0x15, 0x61, 0x66, 0x66, 0x66, 0x50, 0x75, 0x7d, 0x95, 0x8b, 0x93, 0xc9, 0xb2, 0x84, 0x55,
|
||||
0x86, 0x19, 0xff, 0x59, 0xc4, 0xe4, 0x31, 0x8f, 0x6b, 0xf5, 0xbe, 0x45, 0x16, 0x8b, 0x05, 0x0d,
|
||||
0xbc, 0x1e, 0x40, 0x5d, 0xdd, 0x5d, 0xc8, 0x68, 0x7c, 0x84, 0x9a, 0xee, 0x34, 0xb9, 0xe5, 0x0a,
|
||||
0x99, 0x9b, 0xad, 0x60, 0xd9, 0x36, 0x50, 0xde, 0x8c, 0x14, 0x32, 0x51, 0x5f, 0x7f, 0x1f, 0xe2,
|
||||
0x09, 0x38, 0x0b, 0xb5, 0xb4, 0x14, 0x94, 0x96, 0x49, 0x9d, 0x3c, 0xa4, 0x4d, 0xf8, 0x10, 0x97,
|
||||
0x1f, 0x67, 0x8a, 0xbc, 0x12, 0xd9, 0xb3, 0x91, 0x1c, 0xa5, 0xea, 0xf4, 0xda, 0x25, 0xd1, 0xd8,
|
||||
0xd8, 0x18, 0xea, 0x7d, 0xd5, 0xeb, 0xc6, 0xf7, 0x56, 0xab, 0x15, 0x65, 0x29, 0x2f, 0xfc, 0x78,
|
||||
0x16, 0x1e, 0xbe, 0xbe, 0xaa, 0xab, 0x38, 0x05, 0x2a, 0x3f, 0xe5, 0x4d, 0xd3, 0xe5, 0xfd, 0x16,
|
||||
0x99, 0xde, 0x9a, 0x90, 0x2c, 0x5d, 0x6a, 0x17, 0x8a, 0x04, 0x0e, 0xb3, 0xd9, 0xec, 0x11, 0xf7,
|
||||
0xbc, 0xe8, 0x41, 0x97, 0x58, 0x74, 0xff, 0xa2, 0x1d, 0x55, 0xf0, 0xe0, 0x49, 0x24, 0x2c, 0xf4,
|
||||
0xef, 0x01, 0x17, 0x21, 0x53, 0x92, 0xe4, 0xe8, 0x84, 0x3e, 0x4f, 0x67, 0x6d, 0xef, 0x68, 0x5f,
|
||||
0x94, 0x48, 0xc5, 0x16, 0x2c, 0xe6, 0xf3, 0xb9, 0xc5, 0xc5, 0x25, 0x45, 0x76, 0xef, 0x49, 0x61,
|
||||
0xd0, 0xa8, 0x10, 0x2d, 0x3b, 0xfa, 0x93, 0xdf, 0x7e, 0xb4, 0xbb, 0x12, 0x8c, 0xb7, 0x0f, 0xc2,
|
||||
0xfc, 0xfb, 0xed, 0x80, 0x6a, 0x53, 0xe1, 0xa6, 0x8f, 0x1c, 0x9d, 0xe4, 0x0b, 0x79, 0x2e, 0xe2,
|
||||
0xc8, 0x99, 0xe4, 0xf3, 0xe9, 0x07, 0xf0, 0x33, 0x7c, 0xa8, 0x12, 0xd2, 0x49, 0x5c, 0x08, 0x9e,
|
||||
0x3f, 0x35, 0x0d, 0x21, 0x51, 0x06, 0xd7, 0x49, 0xa9, 0xa3, 0xb4, 0x90, 0x8a, 0x30, 0x94, 0x3a,
|
||||
0x68, 0x26, 0x5a, 0xc5, 0xf7, 0x91, 0x20, 0x40, 0xb7, 0xa8, 0xd0, 0xb9, 0x5c, 0x44, 0x04, 0x8d,
|
||||
0x10, 0x49, 0x44, 0x8d, 0xc4, 0x35, 0x7c, 0x65, 0xee, 0x98, 0xdc, 0xec, 0xdc, 0x8b, 0x76, 0x9b,
|
||||
0xcd, 0xe6, 0x91, 0x15, 0x95, 0x5e, 0x76, 0xc5, 0x17, 0xc4, 0x9b, 0xfc, 0x8a, 0xbc, 0x68, 0x78,
|
||||
0xf0, 0xe5, 0x23, 0x05, 0x50, 0x53, 0x3c, 0x7c, 0x36, 0xa4, 0xc1, 0x4e, 0xb2, 0xbc, 0x79, 0x21,
|
||||
0xfa, 0x54, 0x7f, 0x6b, 0x5b, 0xab, 0xa7, 0x30, 0x2a, 0x2a, 0xcb, 0x17, 0x93, 0xf5, 0xc9, 0x23,
|
||||
0xeb, 0x12, 0x61, 0x58, 0x4a, 0x78, 0x67, 0x0a, 0x03, 0xb7, 0x31, 0x1a, 0xac, 0xe5, 0xa7, 0x21,
|
||||
0x83, 0xac, 0x21, 0x7a, 0x9a, 0xe2, 0xf9, 0xa8, 0x42, 0xb1, 0x98, 0xff, 0x33, 0x3f, 0x3b, 0x0b,
|
||||
0x09, 0x14, 0x0c, 0x3b, 0xa5, 0x96, 0x72, 0x6f, 0xdd, 0x22, 0x4c, 0xa2, 0x01, 0x5e, 0x3e, 0xdf,
|
||||
0x07, 0x2e, 0x7f, 0x2d, 0xde, 0xcb, 0x70, 0x48, 0x08, 0x7a, 0x1c, 0xb1, 0x17, 0xed, 0x2f, 0x0a,
|
||||
0xea, 0xf4, 0x5b, 0x0c, 0x64, 0xec, 0xba, 0x0e, 0x0f, 0xd7, 0x1a, 0x5a, 0xbc, 0xe0, 0xd9, 0x63,
|
||||
0xcd, 0x29, 0x68, 0xab, 0xc7, 0xad, 0xff, 0x32, 0x40, 0xfe, 0x02, 0xea, 0xa0, 0xe9, 0xb9, 0x10,
|
||||
0x2d, 0x5e, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE add_zone_cutout_xpm[1] = {{ png, sizeof( png ), "add_zone_cutout_xpm" }};
|
||||
|
||||
@@ -8,83 +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, 0x04, 0xa8, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xad, 0x96, 0x7b, 0x4c, 0x5b,
|
||||
0x55, 0x1c, 0xc7, 0x6f, 0xcb, 0xab, 0x84, 0xae, 0x63, 0x2d, 0x35, 0x2a, 0x08, 0xc1, 0x15, 0xb3,
|
||||
0x18, 0x91, 0x92, 0x6c, 0x42, 0x21, 0x2a, 0x8f, 0x4d, 0xd4, 0xba, 0x39, 0x33, 0x42, 0xc0, 0x48,
|
||||
0x40, 0x5d, 0x44, 0xcd, 0x44, 0x25, 0x33, 0xb8, 0x09, 0x58, 0x35, 0x74, 0xa1, 0x32, 0xd8, 0x98,
|
||||
0x0d, 0xa5, 0x3c, 0x5c, 0xa9, 0x90, 0x05, 0x90, 0xc0, 0x7f, 0xea, 0x9c, 0xe0, 0xcc, 0x58, 0x70,
|
||||
0x1b, 0x2e, 0x6b, 0x18, 0x81, 0xc1, 0x60, 0xac, 0x3c, 0x64, 0x8e, 0xf7, 0x06, 0x93, 0xc7, 0xd7,
|
||||
0xdf, 0xed, 0xbd, 0x5d, 0x1a, 0xa8, 0xa3, 0x35, 0xde, 0xe4, 0x9b, 0xfb, 0xeb, 0xb9, 0xe7, 0x9e,
|
||||
0xcf, 0x3d, 0xe7, 0xf7, 0x2a, 0x03, 0x80, 0xd9, 0x48, 0x74, 0x0d, 0x39, 0xe8, 0x05, 0x87, 0xfb,
|
||||
0x6e, 0xd6, 0xe6, 0xe7, 0x9c, 0xe5, 0xc7, 0x73, 0xed, 0xe3, 0xbc, 0xaa, 0x6c, 0xcf, 0x5d, 0x04,
|
||||
0x19, 0x48, 0x26, 0x12, 0x78, 0x00, 0x7b, 0xdf, 0x4b, 0x4a, 0xe5, 0xed, 0xe7, 0xe4, 0x72, 0x39,
|
||||
0x52, 0x52, 0x52, 0x58, 0x7b, 0x9a, 0xb4, 0x9d, 0x7f, 0xe7, 0x34, 0x69, 0xd1, 0x65, 0x10, 0x0f,
|
||||
0x7b, 0x97, 0x34, 0x4c, 0xf2, 0xe4, 0x17, 0xff, 0x8d, 0xd4, 0xc1, 0xdb, 0xa9, 0xb5, 0xb5, 0xb5,
|
||||
0x60, 0xaf, 0x84, 0x84, 0x04, 0x38, 0xbc, 0xa3, 0x23, 0x9d, 0x5b, 0x07, 0xe2, 0x1f, 0xc8, 0x9d,
|
||||
0x40, 0x84, 0xa4, 0x5e, 0xd2, 0x41, 0xfe, 0xf7, 0x65, 0x5e, 0x43, 0x76, 0x50, 0x63, 0x63, 0xa3,
|
||||
0x0d, 0xa4, 0x56, 0xab, 0xc1, 0xcf, 0xc9, 0x22, 0x75, 0x93, 0x64, 0xce, 0x40, 0xe3, 0x1e, 0x1e,
|
||||
0x1e, 0xb3, 0x52, 0xa9, 0x34, 0x87, 0x6c, 0x81, 0xc3, 0xf8, 0xab, 0xa4, 0x19, 0x92, 0x64, 0xcd,
|
||||
0x7c, 0xfb, 0xd1, 0xa9, 0xc3, 0xc2, 0xc2, 0x90, 0x9b, 0x9b, 0x0b, 0xa1, 0x50, 0x38, 0x45, 0xbf,
|
||||
0x55, 0xa4, 0x15, 0xd2, 0x37, 0xf7, 0x3f, 0x6e, 0x2d, 0x28, 0x3c, 0x3c, 0x1c, 0x04, 0x83, 0xbf,
|
||||
0xbf, 0xff, 0x80, 0x97, 0x97, 0x97, 0xd2, 0xc1, 0xd1, 0x47, 0x9d, 0xec, 0xd4, 0x0e, 0xf2, 0x22,
|
||||
0x59, 0x79, 0xbb, 0xc8, 0x61, 0x1c, 0x4e, 0x7d, 0xc4, 0x82, 0xca, 0xcb, 0x0d, 0xe8, 0xea, 0xb2,
|
||||
0x20, 0x3e, 0x3e, 0x11, 0x02, 0x81, 0x60, 0x35, 0x20, 0x20, 0xc0, 0xcc, 0x6e, 0x9f, 0x3d, 0x3e,
|
||||
0x57, 0xfd, 0xe9, 0xd4, 0xc7, 0x3c, 0x80, 0xfd, 0xa2, 0x87, 0x59, 0x90, 0x5e, 0x6f, 0xc0, 0xc2,
|
||||
0x02, 0x30, 0x37, 0x07, 0xd4, 0xd5, 0xb5, 0x20, 0x34, 0x54, 0x01, 0x5f, 0x5f, 0xdf, 0x39, 0x89,
|
||||
0x44, 0xf2, 0xc6, 0xff, 0x01, 0x8a, 0xe6, 0xb7, 0x39, 0x71, 0xe2, 0x84, 0x01, 0xf3, 0xf3, 0xc0,
|
||||
0xf4, 0x34, 0x70, 0xfb, 0x36, 0x60, 0xb5, 0xde, 0x43, 0x5e, 0x9e, 0x0e, 0x62, 0xb1, 0x04, 0x32,
|
||||
0x99, 0xac, 0x8b, 0xe6, 0x3c, 0xfe, 0x9f, 0x41, 0x85, 0x85, 0x85, 0x4a, 0x92, 0x55, 0x2c, 0x16,
|
||||
0x2f, 0x1f, 0x3f, 0x6e, 0xc0, 0xcc, 0x0c, 0x07, 0x99, 0x98, 0x00, 0x46, 0x47, 0x81, 0x9b, 0x37,
|
||||
0x81, 0x0b, 0x17, 0xc6, 0x29, 0x4f, 0xf6, 0xc3, 0xdb, 0xdb, 0x7b, 0x99, 0x8e, 0xf3, 0x28, 0xef,
|
||||
0xf0, 0x93, 0xa4, 0x1f, 0x48, 0xfb, 0x5c, 0x02, 0x55, 0x54, 0x54, 0x6c, 0xae, 0xaa, 0xaa, 0xda,
|
||||
0xeb, 0xe9, 0xe9, 0x39, 0x75, 0xec, 0x98, 0x01, 0x93, 0x93, 0x1c, 0x64, 0x6c, 0x8c, 0x83, 0x0c,
|
||||
0x51, 0xee, 0xf7, 0xf7, 0x03, 0xbd, 0xbd, 0x40, 0x53, 0x53, 0x17, 0x94, 0xca, 0x58, 0x9b, 0xff,
|
||||
0x32, 0x33, 0xf7, 0xe3, 0xd0, 0x21, 0x2d, 0x7c, 0x7c, 0x44, 0xf8, 0x28, 0x24, 0xa4, 0xfa, 0x35,
|
||||
0x86, 0x09, 0x22, 0xa8, 0x3f, 0xeb, 0x0a, 0x76, 0xdd, 0x8b, 0x8e, 0x91, 0xbb, 0x36, 0x18, 0x4a,
|
||||
0x4a, 0x0c, 0xb8, 0x75, 0x8b, 0x83, 0x58, 0xad, 0x1c, 0x64, 0x60, 0x80, 0x83, 0x5c, 0xbd, 0x0a,
|
||||
0x5c, 0xb9, 0x02, 0x68, 0xb5, 0x75, 0xd8, 0xb2, 0x45, 0x4a, 0xcf, 0x57, 0x6d, 0x63, 0x7b, 0xa2,
|
||||
0x76, 0xe1, 0xcc, 0x0e, 0x19, 0x6a, 0xa2, 0x1f, 0x41, 0x0c, 0x9f, 0x57, 0x6d, 0x0c, 0xf3, 0xf2,
|
||||
0xd8, 0x57, 0xc9, 0x96, 0xbe, 0x67, 0x1f, 0xdd, 0xe5, 0x14, 0x54, 0x5c, 0x6c, 0xc0, 0xf8, 0x38,
|
||||
0x07, 0xb9, 0x71, 0x83, 0x83, 0xf4, 0xf5, 0x71, 0x10, 0x8b, 0x05, 0x68, 0x6d, 0xed, 0x43, 0x4c,
|
||||
0xcc, 0x8b, 0xec, 0x8e, 0x90, 0x91, 0xf1, 0x31, 0x72, 0x72, 0xca, 0x20, 0x16, 0xf9, 0xa1, 0xf1,
|
||||
0x49, 0x09, 0x56, 0x26, 0x34, 0xe8, 0xfe, 0x54, 0xbd, 0xda, 0x9e, 0xb2, 0x63, 0x71, 0xe6, 0x47,
|
||||
0x0d, 0x66, 0x4f, 0x17, 0xe1, 0x9c, 0x27, 0xf3, 0xa6, 0x63, 0x30, 0x78, 0xf0, 0x5b, 0x1e, 0xd7,
|
||||
0xe9, 0x0c, 0x18, 0x19, 0xe1, 0x20, 0xd7, 0xaf, 0x73, 0x90, 0x9e, 0x1e, 0xe0, 0xfc, 0xf9, 0x19,
|
||||
0x5a, 0xf8, 0xa0, 0xed, 0x98, 0x92, 0x92, 0x92, 0x90, 0x9d, 0x9d, 0x4d, 0x47, 0xa8, 0xa4, 0xa8,
|
||||
0x0c, 0xa5, 0xf1, 0x0c, 0x18, 0xa3, 0xb7, 0x63, 0x69, 0x30, 0x19, 0x58, 0x3e, 0x03, 0xcc, 0xff,
|
||||
0x42, 0xcb, 0xde, 0x41, 0xff, 0x27, 0x3b, 0x7b, 0xa8, 0xd8, 0x79, 0x3b, 0x8d, 0xba, 0xa2, 0x22,
|
||||
0x03, 0x86, 0x87, 0x39, 0xc8, 0xb5, 0x6b, 0x40, 0x77, 0xf7, 0x0a, 0x34, 0x1a, 0x23, 0xa4, 0xd2,
|
||||
0x87, 0xa0, 0x50, 0x28, 0xc8, 0xd6, 0xa0, 0xb2, 0xb2, 0x92, 0xd5, 0xb0, 0xd1, 0x68, 0xcc, 0xa5,
|
||||
0x7b, 0x7b, 0x59, 0x56, 0xd6, 0x4a, 0xd3, 0x4b, 0xc1, 0x73, 0x7f, 0x0f, 0x44, 0xd1, 0xfa, 0x1f,
|
||||
0x00, 0xf7, 0x4e, 0x01, 0x0b, 0x3f, 0xa1, 0x73, 0x67, 0xe0, 0x9d, 0x16, 0x86, 0xd9, 0x7c, 0x1f,
|
||||
0xa4, 0xd5, 0x6a, 0xa3, 0xec, 0x51, 0x77, 0xe4, 0x88, 0x01, 0x83, 0x83, 0x1c, 0xc4, 0x6c, 0x6e,
|
||||
0xc7, 0xb6, 0x6d, 0x4a, 0x0a, 0x6d, 0x31, 0xf7, 0xd5, 0x46, 0x23, 0x0b, 0x58, 0x22, 0x15, 0xeb,
|
||||
0xf5, 0x7a, 0x71, 0x1e, 0xc3, 0x6c, 0xd2, 0x87, 0x08, 0xcb, 0xef, 0xb6, 0x44, 0xd0, 0x0b, 0x89,
|
||||
0x14, 0xa2, 0xd1, 0xc0, 0xa4, 0x8a, 0x76, 0x94, 0x49, 0x30, 0x23, 0x96, 0xff, 0x6a, 0xc2, 0x1f,
|
||||
0x6f, 0x3d, 0x7f, 0xa9, 0x89, 0x61, 0x52, 0x6c, 0x20, 0x93, 0xc9, 0x24, 0xa3, 0x45, 0x52, 0xa9,
|
||||
0xe4, 0x4c, 0x6b, 0xb5, 0x06, 0xb4, 0xb7, 0x0f, 0xd2, 0xf1, 0xec, 0xb3, 0xf9, 0x21, 0x36, 0x36,
|
||||
0x16, 0xa5, 0xa5, 0xa5, 0xf6, 0x5d, 0x74, 0x90, 0x9e, 0x76, 0xf4, 0xab, 0x56, 0xc2, 0x5c, 0xbe,
|
||||
0xf8, 0xbe, 0xdc, 0x74, 0x58, 0xca, 0xe0, 0xe7, 0xd7, 0x37, 0x01, 0x23, 0x2a, 0x2c, 0x5a, 0x22,
|
||||
0xd1, 0xf1, 0x5e, 0x08, 0x7a, 0xbe, 0x7c, 0x0a, 0x7f, 0xb6, 0xee, 0xc6, 0xf7, 0x22, 0xe1, 0xd9,
|
||||
0x75, 0xc1, 0x10, 0x11, 0xf1, 0x8c, 0xcd, 0x0f, 0x81, 0x81, 0x81, 0xb6, 0x22, 0xc9, 0x03, 0x26,
|
||||
0x49, 0xef, 0xd0, 0x1c, 0x81, 0xb3, 0x1c, 0x09, 0x0c, 0x0a, 0xfa, 0x42, 0xa5, 0x52, 0xa1, 0xea,
|
||||
0xc0, 0x87, 0x58, 0xfd, 0x3d, 0x16, 0x77, 0x7f, 0x8d, 0x00, 0xb5, 0x01, 0x75, 0x19, 0xc3, 0x84,
|
||||
0x54, 0x33, 0x4c, 0xc0, 0xb7, 0xd4, 0x11, 0xd6, 0x81, 0x28, 0x97, 0x96, 0x92, 0x93, 0x93, 0x41,
|
||||
0xb9, 0x65, 0x87, 0x98, 0x6a, 0x6a, 0x6a, 0xe4, 0xff, 0x96, 0x88, 0xd4, 0xf0, 0x0a, 0x29, 0x81,
|
||||
0xd1, 0xd9, 0xd9, 0x89, 0x03, 0xaf, 0xec, 0x39, 0xd5, 0x96, 0xf9, 0xd8, 0x6a, 0x85, 0xc2, 0x63,
|
||||
0x36, 0x7f, 0x4d, 0x6d, 0x5c, 0xd7, 0x49, 0x0b, 0x0a, 0x0a, 0xbe, 0xe3, 0x01, 0x3d, 0xa4, 0xb8,
|
||||
0x07, 0x65, 0x7b, 0x70, 0x70, 0x70, 0x22, 0x0b, 0x29, 0x29, 0x29, 0x41, 0x5a, 0x5a, 0x5a, 0xf1,
|
||||
0xe7, 0xd4, 0x14, 0xbf, 0x96, 0x31, 0x95, 0x87, 0xc9, 0x27, 0x4e, 0x2b, 0x83, 0xa3, 0xc8, 0x57,
|
||||
0x25, 0x04, 0xf8, 0xac, 0xa1, 0xa1, 0xc1, 0xfb, 0x41, 0x10, 0xea, 0x3b, 0x71, 0xac, 0x0f, 0xab,
|
||||
0xab, 0xab, 0xd1, 0xdc, 0xdc, 0xdc, 0x16, 0x19, 0x19, 0x29, 0xd8, 0xb0, 0x04, 0x39, 0x8a, 0x8e,
|
||||
0xcc, 0x6b, 0xa3, 0xba, 0x25, 0x12, 0x89, 0xb6, 0x12, 0x68, 0x58, 0xa7, 0xd3, 0x21, 0x3f, 0x3f,
|
||||
0xff, 0x12, 0xe5, 0x92, 0xc0, 0xa5, 0x5a, 0xe7, 0x56, 0x15, 0x66, 0x98, 0xad, 0xa4, 0xb6, 0xf4,
|
||||
0xf4, 0x74, 0xd4, 0xd7, 0xd7, 0x8f, 0xfa, 0xf9, 0xf9, 0x29, 0x5c, 0xae, 0xde, 0x6e, 0x40, 0xd8,
|
||||
0xeb, 0x24, 0xfb, 0xbf, 0xc0, 0x6c, 0x36, 0x8f, 0x92, 0xfd, 0x84, 0x5b, 0x6d, 0xc2, 0x0d, 0x90,
|
||||
0x86, 0x75, 0xbe, 0xc5, 0xc2, 0x76, 0xe0, 0xf8, 0x2c, 0xb7, 0xfb, 0x91, 0xab, 0xf2, 0xf1, 0xf1,
|
||||
0x49, 0xa0, 0xe8, 0x9a, 0x8a, 0x8b, 0x8b, 0x7b, 0xdb, 0xdd, 0x23, 0xff, 0x07, 0xd9, 0xe6, 0x23,
|
||||
0xbf, 0x83, 0xc0, 0x6b, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
|
||||
0x82,
|
||||
0xce, 0x00, 0x00, 0x02, 0xba, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xbd, 0x96, 0x4d, 0x68, 0x13,
|
||||
0x41, 0x18, 0x86, 0xc7, 0x35, 0x3f, 0x4d, 0x14, 0xaa, 0xa2, 0x49, 0xa3, 0x20, 0xd5, 0x5a, 0xf0,
|
||||
0xa0, 0xe0, 0x4d, 0xf0, 0xe0, 0xc5, 0x1e, 0x3c, 0x79, 0x28, 0xa2, 0x20, 0xd8, 0x42, 0x08, 0x6a,
|
||||
0xc0, 0xb6, 0x78, 0xb0, 0x82, 0x50, 0x4c, 0x1b, 0x83, 0x87, 0x8a, 0xd7, 0x1e, 0x02, 0xda, 0x8b,
|
||||
0x45, 0xc4, 0x92, 0x8a, 0x6d, 0xc8, 0x41, 0x6b, 0x15, 0xa4, 0xa9, 0x3f, 0x48, 0xc1, 0xff, 0x4b,
|
||||
0x11, 0xec, 0xa1, 0xa6, 0xc5, 0x54, 0x5b, 0xcc, 0xb6, 0xca, 0xf8, 0x7e, 0xe1, 0x5b, 0x19, 0xa6,
|
||||
0x9b, 0x34, 0xae, 0xd1, 0x81, 0x27, 0xfb, 0xcd, 0xce, 0x64, 0xde, 0x7d, 0x67, 0x76, 0xe6, 0x5b,
|
||||
0x21, 0xa5, 0x14, 0xff, 0x83, 0xca, 0x3b, 0x0a, 0x51, 0xa3, 0xd5, 0xd7, 0xac, 0xd2, 0xdf, 0x45,
|
||||
0x38, 0x11, 0x92, 0xaa, 0x18, 0xca, 0x4f, 0xaa, 0x83, 0x3b, 0xe0, 0x31, 0x78, 0x08, 0x8e, 0x28,
|
||||
0xed, 0x43, 0x44, 0x35, 0x84, 0xe8, 0xc7, 0x0f, 0xb6, 0x71, 0xfd, 0x20, 0xf8, 0xc0, 0xf1, 0x46,
|
||||
0xf0, 0x06, 0xbc, 0xa6, 0xb8, 0x1a, 0x42, 0x35, 0x1c, 0xbb, 0x41, 0x0a, 0x5c, 0xe4, 0xfa, 0x29,
|
||||
0x10, 0x07, 0x97, 0x28, 0xb6, 0x15, 0x8a, 0xe1, 0x29, 0x1d, 0x08, 0x5d, 0x07, 0xe7, 0x95, 0xb6,
|
||||
0x47, 0x60, 0x37, 0xd8, 0x09, 0xc6, 0x56, 0x08, 0x25, 0x84, 0x08, 0xf6, 0xb8, 0x5c, 0x8b, 0x09,
|
||||
0x9f, 0x6f, 0x10, 0x82, 0x9b, 0x35, 0xa1, 0xcf, 0x20, 0xc0, 0xf1, 0x16, 0x90, 0x07, 0x06, 0xd7,
|
||||
0xe7, 0xad, 0x85, 0x47, 0xd9, 0x0e, 0x0a, 0xdc, 0x7f, 0x0e, 0x2c, 0x15, 0xef, 0x69, 0x6e, 0xea,
|
||||
0x81, 0xec, 0x6f, 0x6a, 0x2a, 0x5c, 0xf6, 0x7a, 0xf3, 0x88, 0x9b, 0x15, 0xa1, 0x24, 0x38, 0xc1,
|
||||
0xd3, 0x74, 0x16, 0xdc, 0x52, 0xda, 0xbc, 0x4a, 0x7c, 0x41, 0x73, 0xd7, 0x51, 0xbc, 0x67, 0x27,
|
||||
0x64, 0x9a, 0xa6, 0x7c, 0x96, 0x4c, 0xca, 0x84, 0xdf, 0x6f, 0x5a, 0xee, 0xd0, 0xb9, 0x11, 0xdc,
|
||||
0x00, 0x9f, 0xc0, 0x4d, 0xb0, 0x87, 0x07, 0x5a, 0x0b, 0x16, 0x2c, 0x31, 0x94, 0x49, 0x72, 0xa0,
|
||||
0x08, 0xd5, 0x81, 0x97, 0x25, 0x85, 0x88, 0xd9, 0xa9, 0x29, 0x5b, 0x77, 0x8e, 0x36, 0x2c, 0x06,
|
||||
0x30, 0xc0, 0x06, 0x02, 0xaf, 0xc9, 0x5e, 0x55, 0xc8, 0x42, 0x77, 0xe7, 0x54, 0x28, 0x41, 0x83,
|
||||
0xab, 0xe8, 0x42, 0xd5, 0x70, 0x47, 0x42, 0x2e, 0x3b, 0x47, 0x13, 0x7d, 0x7d, 0x32, 0xee, 0xf5,
|
||||
0xfe, 0xe6, 0x5e, 0x34, 0xfa, 0x57, 0xee, 0xca, 0xae, 0x51, 0x29, 0x54, 0x77, 0xdd, 0x42, 0x1c,
|
||||
0xb5, 0x1e, 0xf4, 0x9a, 0x10, 0x3e, 0xc7, 0x42, 0xa3, 0xb1, 0x58, 0x49, 0xc1, 0xa1, 0x48, 0x44,
|
||||
0x6a, 0xd3, 0xfe, 0xd1, 0xb1, 0x10, 0x4d, 0x9b, 0x2e, 0xf0, 0x6d, 0x6e, 0x4e, 0xde, 0x8d, 0x44,
|
||||
0x96, 0xb1, 0xb9, 0xcd, 0x1e, 0xc3, 0xe8, 0xc4, 0x7f, 0x36, 0xb1, 0xab, 0x9a, 0x72, 0x6b, 0xb4,
|
||||
0x1e, 0xd4, 0x31, 0xfb, 0x2c, 0xa1, 0x91, 0xf6, 0x76, 0x79, 0xa5, 0xb6, 0xb6, 0xf8, 0xa4, 0x74,
|
||||
0x7d, 0xd0, 0xd5, 0x55, 0xbc, 0xff, 0x3e, 0x93, 0x91, 0x57, 0x43, 0xa1, 0xef, 0x58, 0xa7, 0xe7,
|
||||
0x58, 0xd3, 0xc6, 0x3f, 0x79, 0x19, 0x5e, 0x29, 0xd6, 0x17, 0x2c, 0xa1, 0xc5, 0x7c, 0x5e, 0xce,
|
||||
0xcf, 0xcc, 0xc8, 0xb8, 0xc7, 0x53, 0xbc, 0x7e, 0x99, 0x9e, 0x96, 0xa9, 0x70, 0x78, 0xb9, 0xc7,
|
||||
0xed, 0x36, 0xbb, 0x0d, 0xe3, 0x5c, 0x8c, 0x8f, 0x9f, 0x4a, 0x73, 0x94, 0xb8, 0x8d, 0x9d, 0x4d,
|
||||
0x96, 0x99, 0x06, 0x7d, 0xea, 0x26, 0x07, 0x06, 0xe4, 0xbb, 0x74, 0x5a, 0xf6, 0x06, 0x83, 0xe4,
|
||||
0xe2, 0x29, 0xda, 0x77, 0xd1, 0x99, 0x07, 0x46, 0x28, 0x0f, 0x69, 0xf9, 0x67, 0x82, 0x8e, 0x26,
|
||||
0x4e, 0x7a, 0x87, 0xc0, 0x0b, 0x30, 0x0e, 0x9a, 0xcb, 0xae, 0xd1, 0xd7, 0x5c, 0x4e, 0xa6, 0x5a,
|
||||
0x5b, 0x8b, 0x6b, 0x01, 0x17, 0x1d, 0x92, 0x9f, 0x18, 0x65, 0x1d, 0x68, 0x00, 0x19, 0x45, 0xa8,
|
||||
0x9e, 0xaf, 0x9d, 0xe0, 0x30, 0x9d, 0x89, 0x5c, 0xf7, 0x80, 0xd1, 0x92, 0x42, 0x6f, 0x87, 0x87,
|
||||
0x65, 0x6f, 0x20, 0x50, 0x80, 0x8b, 0x2c, 0xd6, 0xa2, 0xa1, 0x44, 0xea, 0xc8, 0xd8, 0xdc, 0x8b,
|
||||
0x82, 0xe3, 0x1c, 0xfb, 0xc0, 0x7e, 0x41, 0x13, 0x67, 0x27, 0x34, 0xd8, 0xd2, 0xb2, 0x14, 0x77,
|
||||
0xbb, 0x0b, 0x70, 0xd1, 0x26, 0xcb, 0xcd, 0xbb, 0x26, 0xc4, 0x4e, 0xc7, 0x04, 0xef, 0x27, 0x94,
|
||||
0xd3, 0x60, 0x0a, 0x1c, 0xd3, 0x85, 0xb6, 0x62, 0xf0, 0x1f, 0x70, 0x31, 0x0e, 0x17, 0x3b, 0x2a,
|
||||
0xc8, 0xba, 0xba, 0x50, 0x3f, 0x38, 0xa0, 0xbf, 0x20, 0xe0, 0xc9, 0x8a, 0x3f, 0x23, 0xf9, 0x85,
|
||||
0xe4, 0x2a, 0x5f, 0x38, 0x76, 0x42, 0x28, 0x6d, 0x94, 0x7b, 0x94, 0xba, 0xa1, 0xc4, 0xf7, 0x9d,
|
||||
0x1d, 0xf9, 0xd8, 0x7b, 0x20, 0xcb, 0x59, 0x36, 0xcb, 0xf5, 0x1c, 0xc7, 0xc4, 0x49, 0x70, 0x06,
|
||||
0xa4, 0x39, 0xad, 0x87, 0xff, 0xed, 0x47, 0x23, 0x4e, 0x0b, 0x4a, 0x8c, 0x14, 0xff, 0x02, 0xf9,
|
||||
0xe5, 0xd4, 0x72, 0xb3, 0x13, 0xa5, 0x20, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
|
||||
0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE annotate_xpm[1] = {{ png, sizeof( png ), "annotate_xpm" }};
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
|
||||
/* Do not modify this file, it was automatically generated by the
|
||||
* PNG2cpp CMake script, using a *.png file as input.
|
||||
*/
|
||||
|
||||
#include <bitmaps.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, 0x56, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0x63, 0xf8, 0xff, 0xff, 0x3f,
|
||||
0x03, 0x3d, 0x30, 0xc3, 0xa8, 0x45, 0xa3, 0x16, 0x51, 0xdd, 0x22, 0xae, 0x4a, 0xae, 0xc6, 0xfc,
|
||||
0xcd, 0xf9, 0x4f, 0x19, 0x0a, 0x19, 0x94, 0x68, 0x66, 0x11, 0x4f, 0x19, 0x4f, 0x8e, 0xef, 0x12,
|
||||
0xdf, 0x7f, 0x4b, 0x6f, 0x2c, 0xfd, 0x2f, 0xde, 0x21, 0xfe, 0x45, 0xa8, 0x41, 0x88, 0x8f, 0xea,
|
||||
0x16, 0x09, 0x94, 0x0b, 0xf8, 0x3b, 0xcc, 0x76, 0xf8, 0xb7, 0xf0, 0xf6, 0xc2, 0xff, 0x4b, 0x1e,
|
||||
0x2e, 0xf9, 0xdf, 0x71, 0xa8, 0xe3, 0xbf, 0x58, 0xab, 0xd8, 0x63, 0x92, 0x2c, 0xd2, 0x6f, 0xd1,
|
||||
0x37, 0x33, 0x6c, 0x33, 0xb4, 0xc4, 0x25, 0x2f, 0x52, 0x26, 0x62, 0x62, 0x31, 0xc5, 0xfc, 0x4f,
|
||||
0xff, 0xc9, 0xbe, 0xff, 0x53, 0x2f, 0x4e, 0xf9, 0x3f, 0xe5, 0xfc, 0x94, 0xff, 0x6d, 0x07, 0xdb,
|
||||
0xfe, 0xeb, 0xf5, 0xe8, 0x7d, 0x23, 0xda, 0x22, 0xce, 0x74, 0xce, 0x10, 0xff, 0xb9, 0x3e, 0xff,
|
||||
0xc2, 0x17, 0x87, 0xfc, 0x13, 0x2d, 0x14, 0x8d, 0x47, 0x97, 0x17, 0x4c, 0x13, 0x94, 0x33, 0xe9,
|
||||
0x37, 0xfc, 0xd1, 0xb0, 0xaf, 0xea, 0x7f, 0xdb, 0xb1, 0xe6, 0xff, 0xad, 0x87, 0x9a, 0xff, 0x37,
|
||||
0xec, 0xa8, 0xfb, 0xaf, 0xd8, 0xa4, 0xf8, 0x97, 0x21, 0x9e, 0xc1, 0x8e, 0x28, 0x8b, 0xf8, 0x12,
|
||||
0xf9, 0xcc, 0x8d, 0x3a, 0x74, 0xff, 0x54, 0xed, 0x2a, 0xfc, 0x5f, 0xbb, 0xaf, 0xf8, 0xbf, 0xd3,
|
||||
0x24, 0x9b, 0xbf, 0xe2, 0xd9, 0xe2, 0xce, 0x30, 0x79, 0xa1, 0x5c, 0x21, 0x3e, 0xfd, 0x16, 0xbd,
|
||||
0x4f, 0xa5, 0x3b, 0x32, 0xff, 0xd7, 0xee, 0x2f, 0xf9, 0x5f, 0xb5, 0xa7, 0xe4, 0x7f, 0xf5, 0x8e,
|
||||
0xd2, 0xff, 0xa6, 0x5d, 0x86, 0xff, 0x98, 0x53, 0x99, 0xa3, 0x89, 0x4d, 0x0c, 0x8c, 0x8a, 0x65,
|
||||
0x8a, 0x17, 0xb2, 0x57, 0xc7, 0xfc, 0x2f, 0xdc, 0x9e, 0xf2, 0xbf, 0x78, 0x77, 0xca, 0xff, 0xa2,
|
||||
0x5d, 0x89, 0xff, 0xac, 0xda, 0x4d, 0x7e, 0x89, 0x27, 0x8b, 0xeb, 0x30, 0x30, 0x30, 0x30, 0x6b,
|
||||
0x57, 0x6a, 0xbe, 0xc8, 0xdd, 0x12, 0xfd, 0xbf, 0x64, 0x6f, 0xea, 0xff, 0xc2, 0x1d, 0x29, 0xff,
|
||||
0x4b, 0xb6, 0x66, 0xfc, 0xf7, 0x99, 0xea, 0xf4, 0x9f, 0x2d, 0x91, 0xad, 0x9a, 0xa4, 0xe4, 0xcd,
|
||||
0x96, 0xc0, 0x16, 0x60, 0xd2, 0xa2, 0xf1, 0x2f, 0x7d, 0x53, 0xc8, 0xbf, 0xac, 0x1d, 0x61, 0xff,
|
||||
0x73, 0xf7, 0x84, 0xff, 0xcf, 0xde, 0x11, 0xf4, 0xdf, 0xa8, 0x42, 0xf7, 0x9b, 0x62, 0x96, 0xe2,
|
||||
0xbd, 0xd4, 0xb5, 0x3e, 0xff, 0x73, 0xf7, 0x02, 0xc5, 0x76, 0x02, 0xe5, 0xb6, 0xc6, 0xfc, 0x8f,
|
||||
0x5f, 0x1c, 0xf0, 0x9f, 0x2b, 0x89, 0x6b, 0x16, 0x59, 0xf9, 0x88, 0x3b, 0x96, 0xbb, 0xc0, 0xb1,
|
||||
0x4f, 0xff, 0x5f, 0xca, 0x36, 0xf7, 0xff, 0xa9, 0x7b, 0xdc, 0xff, 0xa7, 0x1f, 0xf0, 0xf8, 0x9f,
|
||||
0xb2, 0xd5, 0xe5, 0x7f, 0xec, 0x72, 0x87, 0xff, 0xb9, 0x87, 0xfd, 0xfe, 0xe7, 0xed, 0x0f, 0xfc,
|
||||
0x9f, 0xb6, 0xd5, 0xeb, 0x7f, 0xea, 0x72, 0xff, 0xff, 0x7c, 0x09, 0x7c, 0x3b, 0x28, 0xca, 0xb0,
|
||||
0x3c, 0x31, 0x3c, 0x13, 0x7c, 0xa6, 0x18, 0xfc, 0x0f, 0xdd, 0xa6, 0xf3, 0x3f, 0x62, 0xb7, 0xd6,
|
||||
0xff, 0x88, 0xfd, 0x1a, 0xff, 0xa3, 0xf6, 0x6b, 0xfe, 0x0f, 0xdc, 0x21, 0xff, 0xdf, 0x61, 0x35,
|
||||
0xef, 0x7f, 0xf7, 0x19, 0x8a, 0xff, 0x85, 0x12, 0x05, 0x2f, 0x50, 0xa5, 0x64, 0xe0, 0x0b, 0xe7,
|
||||
0xdb, 0xe0, 0x37, 0x43, 0xed, 0xbf, 0xf7, 0x7e, 0xfe, 0xff, 0xbe, 0x47, 0x05, 0xfe, 0xfb, 0x1d,
|
||||
0x13, 0xf8, 0xef, 0x73, 0x50, 0xe0, 0x7f, 0xe0, 0x0a, 0xc5, 0xff, 0x52, 0x89, 0xa2, 0x4f, 0xa9,
|
||||
0x5a, 0x04, 0x09, 0x04, 0xf1, 0x9f, 0x8e, 0x58, 0xa9, 0xfe, 0x3f, 0xec, 0xaa, 0xd0, 0xff, 0xb0,
|
||||
0x6b, 0x42, 0xff, 0xa3, 0xf6, 0x29, 0xfc, 0x97, 0x8f, 0x13, 0xff, 0xcc, 0x10, 0xca, 0xc0, 0x49,
|
||||
0xf5, 0xb2, 0x4e, 0x2c, 0x40, 0xf0, 0x41, 0xd2, 0x3e, 0xb5, 0xff, 0x69, 0x57, 0xe5, 0xff, 0x6b,
|
||||
0x24, 0x49, 0xfd, 0xe4, 0xf4, 0xe4, 0x94, 0xa1, 0x49, 0xa1, 0xca, 0x60, 0xcc, 0xc0, 0x2a, 0x1b,
|
||||
0x22, 0xfa, 0xca, 0xae, 0x44, 0xe9, 0x27, 0xab, 0x37, 0xab, 0x31, 0xad, 0x4b, 0x6f, 0xc6, 0xc7,
|
||||
0xff, 0x0b, 0x39, 0x47, 0x2b, 0xbe, 0x51, 0x8b, 0x28, 0xc2, 0x00, 0x54, 0xe7, 0x5d, 0x8e, 0xf9,
|
||||
0x8c, 0x69, 0x06, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE apply_xpm[1] = {{ png, sizeof( png ), "apply_xpm" }};
|
||||
|
||||
//EOF
|
||||
@@ -8,71 +8,36 @@
|
||||
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, 0xf3, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xad, 0xd6, 0x6d, 0x4c, 0x53,
|
||||
0x57, 0x18, 0x07, 0xf0, 0xdb, 0xf6, 0xb6, 0x14, 0x71, 0x05, 0xa4, 0x80, 0x13, 0xcd, 0x10, 0x10,
|
||||
0xa3, 0x10, 0x87, 0x10, 0xed, 0x26, 0x8b, 0x64, 0x03, 0x13, 0x15, 0x5f, 0x47, 0x45, 0xd1, 0xe1,
|
||||
0xe2, 0x4b, 0xc4, 0x38, 0x15, 0xf7, 0x61, 0x1f, 0x70, 0x53, 0x12, 0x60, 0x46, 0x91, 0xe8, 0x64,
|
||||
0x62, 0x94, 0xa8, 0x31, 0x28, 0xc6, 0x2a, 0x01, 0x27, 0xda, 0x04, 0x63, 0xc0, 0x18, 0xdd, 0x12,
|
||||
0x47, 0xd0, 0x68, 0x1c, 0x46, 0xe7, 0xbb, 0x12, 0x94, 0xf9, 0xba, 0x29, 0x20, 0xea, 0xb3, 0xff,
|
||||
0x31, 0xcf, 0x6d, 0x8e, 0xb7, 0x65, 0x81, 0x61, 0x93, 0x5f, 0x72, 0xa1, 0xe7, 0xde, 0x7f, 0xcf,
|
||||
0x79, 0xce, 0xcb, 0x55, 0x88, 0x48, 0x11, 0xf0, 0x31, 0x82, 0x9f, 0xf6, 0xf7, 0xff, 0x25, 0x9e,
|
||||
0x01, 0x26, 0xaf, 0xff, 0x4b, 0x0d, 0xe6, 0xc0, 0x13, 0x30, 0xf7, 0x31, 0xa8, 0x15, 0x96, 0x8b,
|
||||
0x1f, 0xde, 0x5d, 0x50, 0x16, 0x3c, 0x83, 0x09, 0xa0, 0xf6, 0x21, 0xe8, 0x3e, 0x94, 0x43, 0x04,
|
||||
0x18, 0xba, 0x0b, 0xfa, 0x1b, 0x32, 0x7b, 0x1b, 0x84, 0x4f, 0x0a, 0x6c, 0x60, 0xff, 0xc0, 0x1f,
|
||||
0xb0, 0x03, 0x7e, 0xd4, 0x7a, 0x26, 0x37, 0x5e, 0xca, 0x41, 0x2e, 0x08, 0xed, 0x65, 0x50, 0x9e,
|
||||
0xea, 0xf7, 0x01, 0x85, 0x0d, 0x9b, 0xe8, 0x11, 0xf8, 0xe1, 0x68, 0xf1, 0x45, 0x27, 0xc4, 0xbc,
|
||||
0xad, 0xbf, 0xd4, 0xd8, 0x04, 0x8b, 0xe1, 0x02, 0x74, 0x40, 0x1d, 0x04, 0xf8, 0x78, 0xa8, 0xaf,
|
||||
0xff, 0xad, 0x0e, 0x1c, 0x98, 0x40, 0xd3, 0x0b, 0xc8, 0xc3, 0x31, 0xf7, 0xb0, 0xf8, 0xa2, 0x8b,
|
||||
0x6b, 0xaf, 0xca, 0x8d, 0x47, 0xc2, 0x6e, 0xee, 0xd5, 0x79, 0xd8, 0x04, 0xf1, 0x5e, 0x45, 0x55,
|
||||
0x94, 0x04, 0x58, 0xf1, 0xce, 0xf8, 0xff, 0x77, 0xd0, 0x57, 0x6f, 0x83, 0xf0, 0xf9, 0x12, 0xae,
|
||||
0xc1, 0x5f, 0x50, 0x0c, 0x53, 0xe0, 0x6b, 0x98, 0xcd, 0x0f, 0xd5, 0x07, 0x25, 0x42, 0x3b, 0x8c,
|
||||
0xd3, 0xc2, 0x44, 0xd0, 0x48, 0xd5, 0x4a, 0x17, 0xcd, 0xfd, 0x3c, 0xb6, 0x5a, 0x83, 0xbd, 0x82,
|
||||
0x86, 0x40, 0x15, 0x3c, 0x85, 0x66, 0xf8, 0x81, 0x67, 0x8c, 0x1f, 0x37, 0xc8, 0x81, 0x2d, 0x3a,
|
||||
0xe2, 0x21, 0x7f, 0x42, 0xa0, 0x16, 0x14, 0x61, 0x8b, 0xa0, 0xec, 0x49, 0x3f, 0x79, 0x4c, 0x4b,
|
||||
0x5c, 0xe4, 0x15, 0x64, 0xe4, 0x82, 0xcd, 0xe3, 0xa1, 0xbb, 0x0e, 0x6d, 0xb0, 0x11, 0x2c, 0x5c,
|
||||
0x2b, 0x92, 0xdc, 0x94, 0xae, 0xf7, 0xf0, 0x43, 0x56, 0x87, 0x07, 0x0f, 0xa5, 0xe9, 0x18, 0x2e,
|
||||
0xcd, 0x17, 0xe3, 0xf3, 0xde, 0x0d, 0x92, 0x26, 0xc2, 0x70, 0xd8, 0xce, 0x6b, 0xe9, 0x0a, 0x6c,
|
||||
0xe5, 0x9e, 0xe9, 0x83, 0xee, 0x4b, 0xd7, 0x8f, 0x21, 0x56, 0x04, 0xc5, 0x1b, 0x55, 0xba, 0xd2,
|
||||
0x7f, 0xa0, 0x47, 0xb9, 0x35, 0xc8, 0xab, 0x47, 0x13, 0xe1, 0x77, 0xbe, 0xa9, 0x0c, 0xa6, 0x41,
|
||||
0x36, 0xf7, 0x50, 0xd4, 0xe3, 0xb8, 0x2e, 0xe8, 0x81, 0x74, 0x2d, 0xd6, 0xca, 0x0c, 0xf8, 0xbe,
|
||||
0x27, 0x93, 0x61, 0x26, 0x34, 0xc1, 0x73, 0xa8, 0x87, 0x45, 0xf0, 0x11, 0x58, 0xb9, 0x41, 0x1c,
|
||||
0xac, 0x81, 0x12, 0xb6, 0x8b, 0x43, 0x4e, 0xc3, 0x32, 0x88, 0x12, 0x3d, 0x0a, 0x18, 0x10, 0x43,
|
||||
0xc9, 0x0b, 0x4f, 0x7a, 0x8c, 0x48, 0x2d, 0xf2, 0x59, 0xa3, 0x4f, 0x20, 0x17, 0x0e, 0xc3, 0x23,
|
||||
0x68, 0xe4, 0x59, 0x67, 0x90, 0x6a, 0x18, 0xcf, 0x66, 0xc1, 0x2d, 0xf8, 0x16, 0xc6, 0x6b, 0x35,
|
||||
0xd2, 0xf5, 0x5a, 0xe3, 0x55, 0x23, 0xd1, 0x38, 0x04, 0xf2, 0xe1, 0x1e, 0x87, 0x55, 0x43, 0xb0,
|
||||
0x16, 0xf6, 0x33, 0xae, 0x6b, 0xac, 0x46, 0x77, 0x89, 0xdd, 0x22, 0x7a, 0xe7, 0x84, 0x0c, 0xe8,
|
||||
0xa7, 0xcd, 0x3a, 0x5b, 0xf8, 0x28, 0x9a, 0xba, 0xb6, 0xc3, 0x63, 0xcc, 0xec, 0x83, 0x5e, 0x3d,
|
||||
0x1a, 0x01, 0x15, 0xf0, 0x90, 0x0b, 0x2f, 0x76, 0x87, 0xcc, 0x9c, 0x00, 0xf3, 0xc6, 0x43, 0x43,
|
||||
0x02, 0x76, 0x1d, 0xc1, 0xf7, 0xe2, 0x61, 0xb5, 0x41, 0xc6, 0xf5, 0x8f, 0xce, 0xe4, 0xd2, 0x89,
|
||||
0x14, 0xfb, 0x59, 0x1e, 0xda, 0x70, 0x79, 0x1d, 0xf5, 0xa4, 0x46, 0x9b, 0x79, 0xcb, 0x39, 0xcb,
|
||||
0xc3, 0x27, 0x6a, 0x16, 0xd7, 0x18, 0x3f, 0x60, 0x5d, 0x57, 0xf3, 0x66, 0xba, 0x53, 0xfc, 0x0d,
|
||||
0x9d, 0x76, 0x84, 0x75, 0xb6, 0xee, 0x99, 0x4f, 0x6f, 0xda, 0x0a, 0xa9, 0x32, 0xcc, 0x7c, 0x86,
|
||||
0x6f, 0xec, 0xf5, 0xce, 0x60, 0xe2, 0x7a, 0x9c, 0xe3, 0xf5, 0x13, 0xa4, 0x1d, 0x5c, 0xe7, 0x52,
|
||||
0x06, 0xbf, 0x7c, 0xf5, 0xa0, 0x91, 0xe8, 0xcd, 0x35, 0xa2, 0x97, 0x35, 0x44, 0x1d, 0xb9, 0x54,
|
||||
0x3b, 0xd6, 0x7a, 0x09, 0x5b, 0xf2, 0x8a, 0x35, 0xd2, 0x8e, 0x21, 0x82, 0x0c, 0x98, 0xde, 0x7e,
|
||||
0x98, 0xd6, 0x1a, 0xb3, 0x7e, 0x7a, 0x4b, 0xa7, 0xe2, 0x4a, 0x9e, 0x79, 0x53, 0xb4, 0x63, 0xe2,
|
||||
0xa0, 0xa2, 0xac, 0xba, 0x53, 0x9c, 0x8a, 0x90, 0x5a, 0xa2, 0xe7, 0xdf, 0x11, 0x3d, 0xfd, 0x94,
|
||||
0xe8, 0x86, 0x83, 0xae, 0x6f, 0x89, 0xa3, 0x5f, 0xd2, 0xfa, 0x53, 0x1e, 0x46, 0x80, 0xef, 0xff,
|
||||
0x18, 0xd6, 0xc3, 0x5e, 0xde, 0x9e, 0xc4, 0x72, 0xa9, 0xe4, 0x92, 0x64, 0xe9, 0x37, 0xd5, 0x79,
|
||||
0xf2, 0x79, 0x84, 0x90, 0x71, 0x37, 0xd6, 0x26, 0x37, 0xd1, 0xab, 0x7a, 0xa2, 0xf6, 0x7c, 0x84,
|
||||
0xa4, 0xd1, 0xeb, 0xcb, 0x89, 0xd4, 0x52, 0x1e, 0x49, 0x75, 0xcb, 0xe2, 0x3a, 0xf7, 0x25, 0xdb,
|
||||
0xb6, 0x61, 0xaf, 0x1a, 0xc4, 0xf7, 0x8a, 0x09, 0x13, 0x0d, 0xc9, 0x3c, 0x91, 0x5c, 0xfc, 0x83,
|
||||
0x3f, 0xd3, 0xf6, 0x4b, 0x39, 0x28, 0x1d, 0x2e, 0x69, 0x41, 0xbf, 0x7d, 0x1e, 0x56, 0xdf, 0x5a,
|
||||
0x99, 0x45, 0xcd, 0xf9, 0xb1, 0x74, 0xca, 0x19, 0x42, 0xd4, 0xe6, 0xa0, 0x9b, 0x65, 0x51, 0x94,
|
||||
0x16, 0x12, 0x42, 0xee, 0xba, 0xba, 0xd7, 0x87, 0xaa, 0xaa, 0xf6, 0x8e, 0x75, 0x38, 0x0c, 0xba,
|
||||
0x77, 0x0e, 0x51, 0x8b, 0x5f, 0x61, 0x27, 0x0c, 0x13, 0xaf, 0x05, 0x5a, 0x19, 0x14, 0x5d, 0xc3,
|
||||
0xd1, 0x3c, 0x19, 0xd4, 0xfd, 0x8a, 0xb2, 0x04, 0xe7, 0x71, 0x09, 0xa6, 0x75, 0x26, 0x8e, 0xcd,
|
||||
0x41, 0x57, 0x4b, 0xa2, 0x5e, 0xb4, 0x1f, 0x1b, 0x43, 0x49, 0x36, 0xdb, 0x51, 0xbb, 0xdd, 0x4e,
|
||||
0x0d, 0x0d, 0x0d, 0x54, 0x5a, 0x5a, 0x7a, 0x20, 0x3a, 0x3a, 0x3a, 0x56, 0xb7, 0xbb, 0x8b, 0x85,
|
||||
0xbe, 0x00, 0x22, 0x7d, 0x1e, 0xe5, 0xd2, 0x7a, 0xb2, 0xf8, 0x3a, 0x45, 0xcb, 0x22, 0x94, 0xb9,
|
||||
0x4d, 0x39, 0x41, 0x84, 0x95, 0x99, 0x35, 0x2a, 0x21, 0x21, 0xd5, 0x60, 0x30, 0x90, 0xd3, 0xe9,
|
||||
0xa4, 0xea, 0xea, 0xea, 0x96, 0x8c, 0x8c, 0x8c, 0x1c, 0x1f, 0x6f, 0x42, 0xbe, 0x5f, 0x4e, 0x7a,
|
||||
0x02, 0x35, 0x09, 0xd7, 0xae, 0x23, 0xf1, 0xb1, 0x58, 0x2c, 0xb7, 0xd3, 0xd3, 0xd3, 0xc9, 0xe5,
|
||||
0x72, 0x51, 0x52, 0x52, 0xd2, 0x26, 0x55, 0x55, 0x8d, 0xdd, 0x1e, 0xf7, 0x7d, 0x7d, 0x8f, 0xf3,
|
||||
0xf7, 0xf7, 0x2f, 0x14, 0x43, 0xe9, 0x76, 0xbb, 0xa9, 0xa8, 0xa8, 0xa8, 0x45, 0x1e, 0xae, 0xf7,
|
||||
0x1a, 0x24, 0x98, 0x4c, 0xa6, 0xc2, 0xd0, 0xd0, 0xd0, 0xdb, 0x05, 0x05, 0x05, 0x54, 0x51, 0x51,
|
||||
0x71, 0x17, 0x61, 0x93, 0xf5, 0x6d, 0xfe, 0x05, 0x4b, 0x4b, 0x34, 0xb4, 0x86, 0x32, 0xee, 0x70,
|
||||
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
0xce, 0x00, 0x00, 0x01, 0xbe, 0x49, 0x44, 0x41, 0x54, 0x48, 0xc7, 0xd5, 0x96, 0xbb, 0x4a, 0x03,
|
||||
0x51, 0x10, 0x86, 0x47, 0x63, 0x08, 0x0b, 0x16, 0xfa, 0x00, 0x16, 0xa6, 0x11, 0x2c, 0x74, 0xdf,
|
||||
0x41, 0x6c, 0xb2, 0x9b, 0x4d, 0x63, 0xb0, 0x92, 0x28, 0x58, 0x89, 0x2f, 0x60, 0xe5, 0xae, 0x31,
|
||||
0x12, 0x44, 0x52, 0x58, 0x29, 0x78, 0xa9, 0x14, 0xb1, 0xb2, 0x16, 0xc4, 0xc6, 0x5e, 0x10, 0x7c,
|
||||
0x01, 0x13, 0x21, 0xb1, 0x56, 0x1b, 0x2f, 0xeb, 0x3f, 0x67, 0x37, 0xb2, 0xae, 0x67, 0xd7, 0xe8,
|
||||
0x9e, 0x04, 0x2c, 0x7e, 0x86, 0x33, 0x1c, 0xe6, 0x63, 0x66, 0xce, 0x65, 0xc8, 0x75, 0x5d, 0x52,
|
||||
0x29, 0xb2, 0x69, 0x88, 0x1c, 0xaa, 0xa6, 0xcb, 0xe9, 0x6b, 0xb6, 0xbc, 0x16, 0xfe, 0xe0, 0xa6,
|
||||
0x53, 0xa2, 0x14, 0x5c, 0x7d, 0x89, 0x40, 0x08, 0xae, 0x55, 0xb4, 0xfa, 0xcc, 0x49, 0xa9, 0xc9,
|
||||
0x96, 0xd7, 0xdf, 0x40, 0x36, 0xd1, 0x26, 0x54, 0x4d, 0x02, 0xe2, 0x4c, 0xcc, 0xa3, 0x85, 0x87,
|
||||
0x7e, 0xc7, 0x71, 0xad, 0xe3, 0xf9, 0x16, 0xaf, 0x65, 0xa0, 0x1d, 0x56, 0xd2, 0x8c, 0x32, 0xeb,
|
||||
0xd9, 0x26, 0xd9, 0xb6, 0x2b, 0x6c, 0x44, 0x46, 0xc9, 0x41, 0xa2, 0x47, 0x63, 0x07, 0x0c, 0xf2,
|
||||
0xac, 0xa4, 0x47, 0x2a, 0x40, 0x1e, 0xcc, 0xd6, 0x05, 0x08, 0xf6, 0xd3, 0x17, 0x02, 0x55, 0xa0,
|
||||
0x26, 0xb4, 0xbc, 0x4d, 0x94, 0x91, 0x05, 0x31, 0x0c, 0x23, 0x5b, 0x28, 0x14, 0xc6, 0xa5, 0x80,
|
||||
0x5a, 0x4d, 0x13, 0x10, 0xc7, 0x99, 0xf5, 0x32, 0x12, 0x56, 0x17, 0xfe, 0xe0, 0x46, 0x0e, 0xce,
|
||||
0x10, 0xa8, 0x05, 0x35, 0x1c, 0xa2, 0xe9, 0x70, 0xb0, 0x5c, 0x2e, 0xa7, 0x5b, 0x96, 0x55, 0x07,
|
||||
0x6c, 0x24, 0x26, 0x93, 0xb0, 0xf4, 0x60, 0x36, 0x83, 0x08, 0x5c, 0x82, 0xbd, 0x80, 0xde, 0xa0,
|
||||
0x1b, 0xac, 0xa7, 0x64, 0xa0, 0x7c, 0x3e, 0xef, 0x42, 0xb7, 0xc8, 0x6e, 0x58, 0x0a, 0x6a, 0x67,
|
||||
0xd2, 0xce, 0x4c, 0xf8, 0x89, 0x06, 0xa0, 0x7d, 0xe8, 0x09, 0xba, 0x87, 0xb6, 0xd6, 0x88, 0x26,
|
||||
0xa3, 0xea, 0x1f, 0x00, 0xbd, 0x40, 0x57, 0xc5, 0x62, 0x51, 0x8b, 0xea, 0x4d, 0x70, 0x4d, 0x7c,
|
||||
0x41, 0x11, 0xfc, 0x10, 0x7a, 0x8c, 0x02, 0xa1, 0x54, 0x2b, 0x08, 0x7a, 0xe6, 0xeb, 0xd2, 0x07,
|
||||
0x2d, 0x41, 0xcf, 0xec, 0x03, 0x2c, 0xf5, 0x33, 0xe8, 0x6b, 0xe9, 0xe6, 0x60, 0xcf, 0xc3, 0xa5,
|
||||
0x0b, 0x81, 0xda, 0x1a, 0x85, 0xdf, 0x82, 0x7d, 0x85, 0x76, 0x95, 0x80, 0xe2, 0x04, 0xc8, 0x22,
|
||||
0x67, 0x68, 0x9a, 0xe6, 0x6a, 0x2c, 0xc8, 0xef, 0xd1, 0x5e, 0x5c, 0xe9, 0x94, 0x80, 0xfe, 0xd0,
|
||||
0xa3, 0xee, 0x95, 0xae, 0x67, 0x87, 0x41, 0xcd, 0xf1, 0xf6, 0x20, 0x65, 0xbf, 0x74, 0x0d, 0xff,
|
||||
0xab, 0x98, 0xe8, 0xe0, 0x1e, 0xfd, 0xee, 0xc2, 0x06, 0x1e, 0xd3, 0x77, 0xc8, 0x8e, 0x7a, 0xe3,
|
||||
0x94, 0x3d, 0x41, 0x28, 0x93, 0x01, 0xd0, 0x1d, 0xb4, 0x11, 0x07, 0x52, 0xf2, 0xa8, 0xf6, 0xf2,
|
||||
0x9b, 0xf8, 0x3f, 0x1f, 0x5f, 0xa7, 0x5f, 0x79, 0x95, 0x4f, 0x5d, 0xd2, 0xe1, 0x84, 0x87, 0x12,
|
||||
0x1e, 0x4e, 0x78, 0x48, 0x91, 0x0e, 0x27, 0xfc, 0x4a, 0x88, 0x91, 0xab, 0xdb, 0xe3, 0x56, 0x37,
|
||||
0x07, 0xc8, 0x0f, 0x3a, 0xf6, 0xdf, 0x17, 0x8b, 0x28, 0x43, 0xec, 0x00, 0x00, 0x00, 0x00, 0x49,
|
||||
0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
|
||||
};
|
||||
|
||||
const BITMAP_OPAQUE auto_associe_xpm[1] = {{ png, sizeof( png ), "auto_associe_xpm" }};
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user