diff --git a/resources/data/embossed_text.obj b/resources/data/embossed_text.obj new file mode 100644 index 000000000..1b735a4b5 --- /dev/null +++ b/resources/data/embossed_text.obj @@ -0,0 +1,2555 @@ +v -18.027237 2.009171 -1.250000 +v -17.504044 -0.132149 -1.250000 +v -18.027237 -1.944443 -1.250000 +v 5.622299 0.937836 -1.250000 +v 5.935928 0.583412 -1.250000 +v 5.654160 0.491783 -1.250000 +v -17.504044 0.331718 -1.250000 +v -15.076859 -1.944443 -1.250000 +v -17.504044 -1.477882 -1.250000 +v -15.316879 -0.132149 -1.250000 +v -15.316879 0.331718 -1.250000 +v -17.504044 1.542610 -1.250000 +v -11.913429 0.858955 -1.250000 +v -11.731949 0.540627 -1.250000 +v -12.121765 0.702194 -1.250000 +v -15.168556 1.542610 -1.250000 +v -15.168556 2.009171 -1.250000 +v -15.076859 -1.477882 -1.250000 +v 6.781281 -1.583061 -1.250000 +v 6.629089 -1.769485 -1.250000 +v 6.372803 -1.521225 -1.250000 +v 6.694656 -1.145790 -1.250000 +v 6.565536 -1.351135 -1.250000 +v -9.332520 0.598709 -1.250000 +v -9.817963 2.009171 -1.250000 +v -9.332520 2.009171 -1.250000 +v 6.781281 -1.944443 -1.250000 +v 7.231659 -1.944443 -1.250000 +v 6.748917 2.009171 -1.250000 +v 7.231659 2.009171 -1.250000 +v 6.748917 0.590614 -1.250000 +v 5.958740 0.984360 -1.250000 +v 2.056366 -1.623520 -1.250000 +v 2.505440 -1.410614 -1.250000 +v 2.257278 -1.792236 -1.250000 +v 5.338776 0.109558 -1.250000 +v 5.248505 -0.343437 -1.250000 +v 4.783569 -0.106529 -1.250000 +v -6.354332 -1.792236 -1.250000 +v -6.254349 -1.253098 -1.250000 +v -6.000694 -1.500572 -1.250000 +v 4.747849 -0.515106 -1.250000 +v 5.274902 -0.886917 -1.250000 +v -4.841270 -1.118668 -1.250000 +v -4.741844 -0.667336 -1.250000 +v -4.260910 -0.849655 -1.250000 +v 6.203476 0.956718 -1.250000 +v 6.501358 0.832779 -1.250000 +v 6.163879 0.565331 -1.250000 +v 5.095062 -1.594528 -1.250000 +v 4.904266 -1.294495 -1.250000 +v 5.410065 -1.250282 -1.250000 +v 5.349243 -1.820389 -1.250000 +v 5.655411 -1.502274 -1.250000 +v 5.873627 -1.593010 -1.250000 +v 5.651291 -1.961975 -1.250000 +v 3.965546 -1.694992 -1.250000 +v 3.681900 -1.287758 -1.250000 +v 4.205353 -1.376930 -1.250000 +v 5.980316 -2.009171 -1.250000 +v 3.812027 -1.022118 -1.250000 +v 6.444855 -1.902641 -1.250000 +v 4.786942 -0.929749 -1.250000 +v 4.890778 0.261597 -1.250000 +v 5.009262 0.493637 -1.250000 +v 5.462509 0.318230 -1.250000 +v 5.252777 0.756561 -1.250000 +v 6.388428 0.473030 -1.250000 +v 6.628693 0.220840 -1.250000 +v 6.761597 -0.158257 -1.250000 +v 10.394043 -1.529930 -1.250000 +v 10.659393 -1.939049 -1.250000 +v 10.369385 -1.982628 -1.250000 +v 6.786682 -0.723915 -1.250000 +v 6.092239 -1.611084 -1.250000 +v 6.228592 -1.982536 -1.250000 +v -8.062294 -1.334953 -1.250000 +v -7.928238 -1.118263 -1.250000 +v -7.698219 -1.607338 -1.250000 +v 3.549088 0.886597 -1.250000 +v 3.453781 0.472427 -1.250000 +v 3.152664 0.985489 -1.250000 +v 2.490562 -1.912758 -1.250000 +v 2.786484 -1.573006 -1.250000 +v -9.024406 -1.903320 -1.250000 +v -9.209648 -1.771004 -1.250000 +v -8.900261 -1.555542 -1.250000 +v -7.857704 -0.130730 -1.250000 +v -7.337769 -0.278633 -1.250000 +v -7.832993 -0.680908 -1.250000 +v 2.351501 -1.219994 -1.250000 +v -7.833061 0.749054 -1.250000 +v -8.223862 0.479202 -1.250000 +v -8.048813 0.876480 -1.250000 +v -8.940102 0.490616 -1.250000 +v -9.192062 0.246498 -1.250000 +v -8.290855 0.957390 -1.250000 +v -8.497414 0.583023 -1.250000 +v -8.691505 0.980774 -1.250000 +v 2.236198 -0.954605 -1.250000 +v 1.693329 -0.751587 -1.250000 +v 2.191208 -0.636459 -1.250000 +v 2.218178 -0.237328 -1.250000 +v -4.334885 -1.169258 -1.250000 +v -4.439415 -1.405708 -1.250000 +v -7.987785 0.231804 -1.250000 +v 4.125031 0.377899 -1.250000 +v 3.779282 0.006790 -1.250000 +v 3.676590 0.251312 -1.250000 +v -12.824295 0.951324 -1.250000 +v -13.023323 0.538445 -1.250000 +v -13.113541 0.984360 -1.250000 +v -9.336975 -0.099655 -1.250000 +v -8.549080 -1.611473 -1.250000 +v -8.811859 -1.982704 -1.250000 +v -13.918777 -0.155090 -1.250000 +v -13.981934 0.517799 -1.250000 +v -13.852478 0.140236 -1.250000 +v -9.320328 -1.027046 -1.250000 +v -9.185555 -1.315605 -1.250000 +v -9.367584 -1.585762 -1.250000 +v -9.817963 -1.944443 -1.250000 +v -9.367584 -1.944443 -1.250000 +v -8.423149 -2.006325 -1.250000 +v -8.263100 -1.516258 -1.250000 +v -7.425163 -1.121902 -1.250000 +v -12.304474 0.482742 -1.250000 +v -11.974907 0.415985 -1.250000 +v -9.093651 0.830185 -1.250000 +v -8.744606 0.567863 -1.250000 +v -7.660461 0.577133 -1.250000 +v -7.476196 0.277992 -1.250000 +v -7.356895 -0.816475 -1.250000 +v -7.538933 -1.385521 -1.250000 +v -7.975266 -1.848907 -1.250000 +v 10.589264 -1.510246 -1.250000 +v 17.425842 -1.961304 -1.250000 +v 17.589813 -1.504303 -1.250000 +v 17.737244 -1.982628 -1.250000 +v 17.478424 -1.371361 -1.250000 +v 17.026840 -1.642952 -1.250000 +v 16.988434 -1.277092 -1.250000 +v 10.221970 -1.504311 -1.250000 +v 9.620575 -1.277283 -1.250000 +v 10.110580 -1.371399 -1.250000 +v 9.658981 -1.642960 -1.250000 +v 9.262405 0.919632 -1.250000 +v 9.618393 0.542068 -1.250000 +v 9.262405 0.542068 -1.250000 +v -9.374725 -0.586121 -1.250000 +v 9.618393 1.628914 -1.250000 +v 10.101135 0.919632 -1.250000 +v 9.618393 0.919632 -1.250000 +v 10.589264 0.919632 -1.250000 +v 10.589264 0.542068 -1.250000 +v 10.101135 0.542068 -1.250000 +v 10.101135 1.920174 -1.250000 +v 9.823914 -1.867683 -1.250000 +v 10.057983 -1.961304 -1.250000 +v 12.644684 -1.972519 -1.250000 +v 12.115402 -2.008736 -1.250000 +v 12.269409 -1.610031 -1.250000 +v 17.761902 -1.529930 -1.250000 +v 17.957123 -1.510246 -1.250000 +v 18.027237 -1.939049 -1.250000 +v 16.986237 0.542068 -1.250000 +v 16.630264 0.919632 -1.250000 +v 16.986237 0.919632 -1.250000 +v 17.468994 0.542068 -1.250000 +v 17.468994 0.919632 -1.250000 +v 12.516861 -1.574974 -1.250000 +v 16.986237 1.628914 -1.250000 +v 17.957123 0.919632 -1.250000 +v 17.957123 0.542068 -1.250000 +v 17.468994 1.920174 -1.250000 +v 16.630264 0.542068 -1.250000 +v 12.894409 -1.287758 -1.250000 +v 13.417923 -1.376846 -1.250000 +v 13.178070 -1.694992 -1.250000 +v 13.024536 -1.022118 -1.250000 +v 17.191757 -1.867676 -1.250000 +v 15.137634 -0.068230 -1.250000 +v 15.837372 0.919632 -1.250000 +v 16.417206 0.919632 -1.250000 +v 15.427460 -0.428802 -1.250000 +v 12.725189 -1.469795 -1.250000 +v 15.151947 -0.815117 -1.250000 +v 14.399948 -1.944443 -1.250000 +v 14.858414 -0.455772 -1.250000 +v 13.526154 -1.084145 -1.250000 +v 12.914978 -1.872643 -1.250000 +v 11.469788 -1.792236 -1.250000 +v 11.717941 -1.410599 -1.250000 +v 11.703079 -1.912758 -1.250000 +v 11.430695 -0.237328 -1.250000 +v 11.403717 -0.636459 -1.250000 +v 10.905838 -0.751495 -1.250000 +v 11.998993 -1.573006 -1.250000 +v 11.268875 -1.623520 -1.250000 +v 11.564026 -1.219994 -1.250000 +v 11.108414 -1.409958 -1.250000 +v 11.448730 -0.954681 -1.250000 +v 10.993805 -1.157631 -1.250000 +v 14.497040 0.919632 -1.250000 +v 13.890228 0.919632 -1.250000 +v -14.416122 0.919632 -1.250000 +v 11.480789 0.043579 -1.250000 +v 10.925369 -0.195526 -1.250000 +v 10.995148 0.105179 -1.250000 +v 13.029938 -0.237328 -1.250000 +v 11.111450 0.365425 -1.250000 +v 11.580872 0.240021 -1.250000 +v 11.274277 0.585220 -1.250000 +v 11.748611 0.424919 -1.250000 +v 11.474182 0.759842 -1.250000 +v 12.018631 0.559875 -1.250000 +v 11.701721 0.884575 -1.250000 +v 11.956909 0.959412 -1.250000 +v 12.360504 0.581841 -1.250000 +v 12.365204 0.985489 -1.250000 +v 12.666290 0.472420 -1.250000 +v 12.761597 0.886597 -1.250000 +v 12.983078 0.764397 -1.250000 +v 12.889099 0.251312 -1.250000 +v 13.178268 0.593315 -1.250000 +v 13.337555 0.377899 -1.250000 +v 12.991791 0.006790 -1.250000 +v 13.486450 0.023689 -1.250000 +v 13.544220 -0.635246 -1.250000 +v -13.750671 0.322952 -1.250000 +v -13.601669 0.455772 -1.250000 +v -13.323532 0.561577 -1.250000 +v -13.623245 0.854912 -1.250000 +v -13.383896 0.951996 -1.250000 +v -12.859108 0.437454 -1.250000 +v -12.758026 0.256973 -1.250000 +v -12.418419 0.693771 -1.250000 +v -12.144394 0.201309 -1.250000 +v -12.221779 -0.106316 -1.250000 +v -12.717186 0.026970 -1.250000 +v -10.831863 0.813766 -1.250000 +v -11.236511 0.485435 -1.250000 +v -11.133049 0.956291 -1.250000 +v -11.679474 0.953011 -1.250000 +v -12.714401 -1.944443 -1.250000 +v -12.228966 -1.944443 -1.250000 +v -11.023384 0.063637 -1.250000 +v -11.088028 0.336510 -1.250000 +v -10.543549 0.214989 -1.250000 +v -11.419899 0.984360 -1.250000 +v -11.417992 0.558350 -1.250000 +v -10.535324 -1.944443 -1.250000 +v -11.018066 -1.944443 -1.250000 +v -10.631958 0.560806 -1.250000 +v -14.416122 -1.944443 -1.250000 +v -12.593040 0.852211 -1.250000 +v -13.824837 0.707253 -1.250000 +v -13.981934 0.919632 -1.250000 +v 3.817429 -0.237328 -1.250000 +v 4.331711 -0.635246 -1.250000 +v -13.930687 -1.944443 -1.250000 +v 3.512680 -1.469795 -1.250000 +v 4.313644 -1.084145 -1.250000 +v 3.432175 -1.972519 -1.250000 +v 3.702469 -1.872643 -1.250000 +v 3.304337 -1.574974 -1.250000 +v 3.056900 -1.610031 -1.250000 +v 1.895905 -1.409958 -1.250000 +v 1.712852 -0.195526 -1.250000 +v 2.268265 0.043549 -1.250000 +v 3.965744 0.593315 -1.250000 +v 3.770569 0.764397 -1.250000 +v 2.744400 0.959412 -1.250000 +v 2.806129 0.559875 -1.250000 +v -4.979774 -1.334953 -1.250000 +v 2.489212 0.884575 -1.250000 +v 2.536079 0.424904 -1.250000 +v 2.061760 0.585220 -1.250000 +v 2.368362 0.240021 -1.250000 +v 1.898933 0.365425 -1.250000 +v 1.782631 0.105179 -1.250000 +v -5.736496 0.982239 -1.250000 +v -5.472771 0.579910 -1.250000 +v -5.755463 0.565498 -1.250000 +v -2.893242 -1.586388 -1.250000 +v -2.571861 -1.610748 -1.250000 +v -2.414139 -2.000488 -1.250000 +v 0.628372 0.312836 -1.250000 +v 0.844124 0.772652 -1.250000 +v 0.999191 0.622978 -1.250000 +v 1.781281 -1.157631 -1.250000 +v 1.101669 0.430153 -1.250000 +v -5.867546 -1.985069 -1.250000 +v -6.125267 -1.912758 -1.250000 +v 0.625114 -0.889053 -1.250000 +v 0.401924 -0.802361 -1.250000 +v 0.738724 -0.388779 -1.250000 +v 2.902885 -2.008736 -1.250000 +v 16.492722 -1.944443 -1.250000 +v 15.896713 -1.944443 -1.250000 +v 2.261665 0.759842 -1.250000 +v 3.147964 0.581841 -1.250000 +v 4.273926 0.023720 -1.250000 +v -0.568703 -1.878708 -1.250000 +v -0.377861 -1.478828 -1.250000 +v -0.258286 -1.981239 -1.250000 +v -4.248489 -0.237167 -1.250000 +v -0.472481 0.015579 -1.250000 +v -0.786133 -0.380936 -1.250000 +v -0.918282 -0.226540 -1.250000 +v -5.044495 0.887268 -1.250000 +v -5.166885 0.472267 -1.250000 +v -5.299355 0.960083 -1.250000 +v 0.959412 -1.750946 -1.250000 +v 0.724106 -1.893204 -1.250000 +v 0.613541 -1.475189 -1.250000 +v -0.504700 -0.548668 -1.250000 +v -0.289726 -0.092491 -1.250000 +v -5.974785 0.488289 -1.250000 +v 1.131340 -1.561485 -1.250000 +v 0.734894 -1.326187 -1.250000 +v -6.675430 0.448860 -1.250000 +v -6.185272 0.310143 -1.250000 +v -6.323982 0.096321 -1.250000 +v 0.775352 -1.154259 -1.250000 +v 1.238541 -1.338997 -1.250000 +v 0.502968 0.461166 -1.250000 +v 0.269913 0.571266 -1.250000 +v 0.621628 0.887268 -1.250000 +v -0.556610 0.184372 -1.250000 +v -1.018776 0.030319 -1.250000 +v -4.451691 0.384644 -1.250000 +v -4.334549 0.136192 -1.250000 +v -4.909866 0.219124 -1.250000 +v -4.768959 -0.137306 -1.250000 +v -6.716385 -1.409454 -1.250000 +v -6.554749 -1.623520 -1.250000 +v -5.690216 -1.607651 -1.250000 +v -5.581177 -2.009171 -1.250000 +v -4.658997 -1.673447 -1.250000 +v -5.190132 -1.515007 -1.250000 +v -5.221146 -1.965347 -1.250000 +v -5.408066 -1.592842 -1.250000 +v -6.396263 -0.884071 -1.250000 +v -6.831848 -1.152916 -1.250000 +v -6.921341 -0.729439 -1.250000 +v -6.422844 -0.342545 -1.250000 +v -6.896576 -0.140404 -1.250000 +v -6.813644 0.180016 -1.250000 +v -6.481934 0.666130 -1.250000 +v -6.204201 0.854996 -1.250000 +v -4.816612 0.765915 -1.250000 +v -4.615692 0.596008 -1.250000 +v -4.890778 -1.833870 -1.250000 +v 1.166397 0.180687 -1.250000 +v 0.691750 0.115967 -1.250000 +v -0.985626 0.414467 -1.250000 +v -1.523056 -1.338997 -1.250000 +v -1.630257 -1.561485 -1.250000 +v -2.026703 -1.326187 -1.250000 +v -1.516312 -0.875137 -1.250000 +v -1.986244 -1.154259 -1.250000 +v -2.021980 -1.007278 -1.250000 +v -0.509758 0.887909 -1.250000 +v -0.377335 0.501274 -1.250000 +v -0.787651 0.715660 -1.250000 +v -0.159790 0.571449 -1.250000 +v -0.098549 0.982941 -1.250000 +v 0.347221 0.960083 -1.250000 +v -2.921387 0.571449 -1.250000 +v -3.271355 0.887909 -1.250000 +v -2.860146 0.982941 -1.250000 +v -2.491684 0.571266 -1.250000 +v -3.549248 0.715660 -1.250000 +v -3.138931 0.501274 -1.250000 +v -3.280067 0.354637 -1.250000 +v -0.518471 0.354637 -1.250000 +v -3.266289 -0.548668 -1.250000 +v -3.051323 -0.092491 -1.250000 +v -2.359673 -0.802361 -1.250000 +v -1.802185 -1.750946 -1.250000 +v -2.037483 -1.893204 -1.250000 +v -2.148056 -1.475189 -1.250000 +v -0.788887 -1.734253 -1.250000 +v -0.548141 -1.268875 -1.250000 +v -1.006676 -1.426079 -1.250000 +v 0.189735 -1.610748 -1.250000 +v 0.466888 -1.560570 -1.250000 +v 0.347458 -2.000488 -1.250000 +v 1.245285 -0.875137 -1.250000 +v 1.274277 -1.103020 -1.250000 +v 1.020096 -0.540726 -1.250000 +v 0.739616 -1.007278 -1.250000 +v 1.158310 -0.687706 -1.250000 +v -3.139458 -1.478828 -1.250000 +v -3.019882 -1.981239 -1.250000 +v -3.330299 -1.878708 -1.250000 +v -0.624329 -1.014023 -1.250000 +v -2.294708 -1.560570 -1.250000 +v -1.104370 -1.089539 -1.250000 +v -2.022873 -0.388779 -1.250000 +v -2.136482 -0.889053 -1.250000 +v -0.131645 -1.586388 -1.250000 +v -1.741501 -0.540726 -1.250000 +v -2.133224 0.312836 -1.250000 +v -1.659927 0.430153 -1.250000 +v -2.069847 0.115967 -1.250000 +v -3.234070 0.015579 -1.250000 +v -3.547737 -0.380936 -1.250000 +v -3.385925 -1.014023 -1.250000 +v -3.309738 -1.268875 -1.250000 +v -3.768272 -1.426079 -1.250000 +v -3.679878 -0.226540 -1.250000 +v -3.780373 0.030319 -1.250000 +v -3.747223 0.414467 -1.250000 +v -3.318207 0.184372 -1.250000 +v -2.414375 0.960083 -1.250000 +v -2.139969 0.887268 -1.250000 +v -2.258629 0.461166 -1.250000 +v -1.917473 0.772652 -1.250000 +v -1.762405 0.622978 -1.250000 +v -1.595200 0.180687 -1.250000 +v -1.487320 -1.103020 -1.250000 +v -1.603287 -0.687706 -1.250000 +v -3.550484 -1.734253 -1.250000 +v -3.865967 -1.089539 -1.250000 +v 13.812027 -1.944443 -1.250000 +v -18.027237 2.009171 1.250000 +v -18.027237 -1.944443 1.250000 +v -17.504044 -0.132149 1.250000 +v 5.622299 0.937836 1.250000 +v 5.630829 0.477127 1.250000 +v 5.908005 0.580238 1.250000 +v -17.504044 0.331718 1.250000 +v -15.076859 -1.944443 1.250000 +v -17.504044 -1.477882 1.250000 +v -15.316879 -0.132149 1.250000 +v -15.316879 0.331718 1.250000 +v -17.504044 1.542610 1.250000 +v -11.913429 0.858955 1.250000 +v -12.121765 0.702194 1.250000 +v -11.755516 0.533661 1.250000 +v -15.168556 1.542610 1.250000 +v -15.168556 2.009171 1.250000 +v -15.076859 -1.477882 1.250000 +v 6.781281 -1.583061 1.250000 +v 6.396072 -1.506897 1.250000 +v 6.629089 -1.769485 1.250000 +v -9.332520 0.598709 1.250000 +v -9.332520 2.009171 1.250000 +v -9.817963 2.009171 1.250000 +v 6.781281 -1.944443 1.250000 +v 7.231659 -1.944443 1.250000 +v 6.748917 2.009171 1.250000 +v 6.748917 0.590614 1.250000 +v 7.231659 2.009171 1.250000 +v 5.958740 0.984360 1.250000 +v 2.056366 -1.623520 1.250000 +v 2.257278 -1.792236 1.250000 +v 2.528389 -1.430351 1.250000 +v -7.333534 -0.331741 1.250000 +v -7.925461 0.107933 1.250000 +v -7.832390 -0.338562 1.250000 +v 5.400803 0.236954 1.250000 +v 4.890778 0.261597 1.250000 +v 5.273254 -0.130615 1.250000 +v 4.747849 -0.515106 1.250000 +v 5.249634 -0.689209 1.250000 +v -6.354332 -1.792236 1.250000 +v -5.974792 -1.515793 1.250000 +v -6.185272 -1.337646 1.250000 +v 4.786942 -0.929749 1.250000 +v 5.344818 -1.124214 1.250000 +v 6.203476 0.956718 1.250000 +v 6.163879 0.565331 1.250000 +v 6.534546 0.810234 1.250000 +v 5.095062 -1.594528 1.250000 +v 4.904266 -1.294495 1.250000 +v 5.349243 -1.820389 1.250000 +v 5.679123 -1.517212 1.250000 +v 5.478699 -1.337646 1.250000 +v 5.873627 -1.593010 1.250000 +v 5.651291 -1.961975 1.250000 +v 3.939041 -1.718880 1.250000 +v 4.187851 -1.409302 1.250000 +v 3.681900 -1.287758 1.250000 +v 5.980316 -2.009171 1.250000 +v 3.812027 -1.022118 1.250000 +v 6.444855 -1.902641 1.250000 +v 4.783569 -0.106529 1.250000 +v 5.026871 0.519203 1.250000 +v 5.275772 0.773216 1.250000 +v 6.364380 0.488251 1.250000 +v 6.610748 0.249153 1.250000 +v 6.753601 -0.118385 1.250000 +v 10.406189 -1.529770 1.250000 +v 10.341309 -1.983734 1.250000 +v 10.659393 -1.939049 1.250000 +v 6.733414 -1.021439 1.250000 +v 6.789673 -0.681038 1.250000 +v 6.631271 -1.268074 1.250000 +v 6.119827 -1.608040 1.250000 +v 6.228592 -1.982536 1.250000 +v 3.549088 0.886597 1.250000 +v 3.201385 0.980644 1.250000 +v 3.428101 0.488136 1.250000 +v -7.994751 -1.248116 1.250000 +v -7.538933 -1.385521 1.250000 +v -7.858406 -0.880013 1.250000 +v 2.490562 -1.912758 1.250000 +v 2.814644 -1.581619 1.250000 +v -9.024406 -1.903320 1.250000 +v -9.021782 -1.482811 1.250000 +v -9.209648 -1.771004 1.250000 +v 2.351501 -1.219994 1.250000 +v -7.833061 0.749054 1.250000 +v -8.048813 0.876480 1.250000 +v -8.247032 0.493927 1.250000 +v -9.210152 0.218918 1.250000 +v -8.963913 0.475388 1.250000 +v -8.290855 0.957390 1.250000 +v -8.650612 0.985497 1.250000 +v -8.524811 0.586182 1.250000 +v 2.246025 -0.988449 1.250000 +v 2.191208 -0.636459 1.250000 +v 1.712509 -0.866539 1.250000 +v 2.218178 -0.237328 1.250000 +v 1.693085 -0.316406 1.250000 +v -4.334885 -1.169258 1.250000 +v -4.768898 -0.876862 1.250000 +v -4.455727 -1.432304 1.250000 +v -8.054207 0.318230 1.250000 +v 4.125031 0.377899 1.250000 +v 3.664276 0.269379 1.250000 +v 3.772293 0.031929 1.250000 +v -12.824295 0.951324 1.250000 +v -13.113541 0.984360 1.250000 +v -13.041870 0.544182 1.250000 +v -9.371796 -0.353188 1.250000 +v -8.521233 -1.608391 1.250000 +v -8.797867 -1.586601 1.250000 +v -8.811859 -1.982704 1.250000 +v -9.314995 -0.029663 1.250000 +v -13.922516 -0.186592 1.250000 +v -13.852478 0.140236 1.250000 +v -13.981934 0.517799 1.250000 +v -9.817963 -1.944443 1.250000 +v -9.367584 -1.944443 1.250000 +v -9.367584 -1.585762 1.250000 +v -8.572006 -2.009171 1.250000 +v -8.239281 -1.501167 1.250000 +v -8.326256 -1.984055 1.250000 +v -7.390182 -1.020126 1.250000 +v -9.259552 -1.192558 1.250000 +v -9.350571 -0.873863 1.250000 +v -12.304474 0.482742 1.250000 +v -11.993820 0.399933 1.250000 +v -9.060020 0.851654 1.250000 +v -8.744606 0.567863 1.250000 +v -7.660461 0.577133 1.250000 +v -7.457451 0.233536 1.250000 +v -7.698219 -1.607338 1.250000 +v -8.013016 -1.871147 1.250000 +v 10.589264 -1.510246 1.250000 +v 17.425842 -1.961304 1.250000 +v 17.709183 -1.983734 1.250000 +v 17.599960 -1.509323 1.250000 +v 17.480743 -1.380379 1.250000 +v 16.987701 -1.256454 1.250000 +v 17.021652 -1.624619 1.250000 +v 10.232132 -1.509331 1.250000 +v 9.619858 -1.256760 1.250000 +v 9.653793 -1.624634 1.250000 +v 10.112900 -1.380409 1.250000 +v 9.262405 0.919632 1.250000 +v 9.262405 0.542068 1.250000 +v 9.618393 0.542068 1.250000 +v 9.618393 1.628914 1.250000 +v 9.618393 0.919632 1.250000 +v 10.101135 0.919632 1.250000 +v 10.589264 0.542068 1.250000 +v 10.589264 0.919632 1.250000 +v 10.101135 0.542068 1.250000 +v 10.101135 1.920174 1.250000 +v 9.801025 -1.849762 1.250000 +v 10.057983 -1.961304 1.250000 +v 12.606659 -1.980919 1.250000 +v 12.269409 -1.610031 1.250000 +v 12.064209 -2.003609 1.250000 +v 17.774048 -1.529770 1.250000 +v 18.027237 -1.939049 1.250000 +v 17.957123 -1.510246 1.250000 +v 16.986237 0.542068 1.250000 +v 16.986237 0.919632 1.250000 +v 16.630264 0.919632 1.250000 +v 17.468994 0.542068 1.250000 +v 17.468994 0.919632 1.250000 +v 12.516861 -1.574974 1.250000 +v 16.986237 1.628914 1.250000 +v 17.957123 0.542068 1.250000 +v 17.957123 0.919632 1.250000 +v 17.468994 1.920174 1.250000 +v 16.630264 0.542068 1.250000 +v 12.894409 -1.287758 1.250000 +v 13.151550 -1.718880 1.250000 +v 13.400406 -1.409225 1.250000 +v 13.024536 -1.022118 1.250000 +v 17.168854 -1.849754 1.250000 +v 15.136749 -0.068176 1.250000 +v 16.417206 0.919632 1.250000 +v 15.837372 0.919632 1.250000 +v 15.427460 -0.428802 1.250000 +v 12.725189 -1.469795 1.250000 +v 15.152100 -0.814865 1.250000 +v 14.858414 -0.455772 1.250000 +v 14.399948 -1.944443 1.250000 +v 13.526154 -1.084145 1.250000 +v 12.914978 -1.872643 1.250000 +v 11.469788 -1.792236 1.250000 +v 11.703079 -1.912758 1.250000 +v 11.740891 -1.430344 1.250000 +v 11.430695 -0.237328 1.250000 +v 10.905594 -0.316483 1.250000 +v 11.403717 -0.636459 1.250000 +v 12.027145 -1.581619 1.250000 +v 11.268875 -1.623520 1.250000 +v 11.564026 -1.219994 1.250000 +v 11.108414 -1.409958 1.250000 +v 11.458557 -0.988518 1.250000 +v 10.993805 -1.157631 1.250000 +v 10.925034 -0.866539 1.250000 +v 14.497040 0.919632 1.250000 +v 13.890228 0.919632 1.250000 +v -14.416122 0.919632 1.250000 +v 11.471619 0.015434 1.250000 +v 10.995148 0.105179 1.250000 +v 13.029938 -0.237328 1.250000 +v 11.111450 0.365425 1.250000 +v 11.580872 0.240021 1.250000 +v 11.274277 0.585220 1.250000 +v 11.726822 0.407326 1.250000 +v 11.474182 0.759842 1.250000 +v 11.992249 0.552200 1.250000 +v 11.701721 0.884575 1.250000 +v 11.956909 0.959412 1.250000 +v 12.329407 0.585434 1.250000 +v 12.413925 0.980644 1.250000 +v 12.640610 0.488136 1.250000 +v 12.761597 0.886597 1.250000 +v 12.983078 0.764397 1.250000 +v 12.876785 0.269379 1.250000 +v 13.178268 0.593315 1.250000 +v 13.337555 0.377899 1.250000 +v 12.984802 0.031929 1.250000 +v 13.451324 0.122711 1.250000 +v 13.519592 -0.172264 1.250000 +v 13.542511 -0.636078 1.250000 +v -13.750671 0.322952 1.250000 +v -13.601669 0.455772 1.250000 +v -13.357773 0.555855 1.250000 +v -13.623245 0.854912 1.250000 +v -13.383896 0.951996 1.250000 +v -12.871727 0.450157 1.250000 +v -12.418419 0.693771 1.250000 +v -12.764809 0.276054 1.250000 +v -12.155891 0.176117 1.250000 +v -12.718651 0.044128 1.250000 +v -12.224236 -0.129280 1.250000 +v -10.808983 0.794876 1.250000 +v -11.102173 0.947968 1.250000 +v -11.236511 0.485435 1.250000 +v -11.679474 0.953011 1.250000 +v -12.714401 -1.944443 1.250000 +v -12.228966 -1.944443 1.250000 +v -11.025665 0.083664 1.250000 +v -10.540726 0.189087 1.250000 +v -11.100418 0.357590 1.250000 +v -11.444748 0.562630 1.250000 +v -11.419899 0.984360 1.250000 +v -10.535324 -1.944443 1.250000 +v -11.018066 -1.944443 1.250000 +v -10.618774 0.531921 1.250000 +v -14.416122 -1.944443 1.250000 +v -12.593040 0.852211 1.250000 +v -13.824837 0.707253 1.250000 +v -13.981934 0.919632 1.250000 +v 4.330002 -0.636078 1.250000 +v 3.817429 -0.237328 1.250000 +v -13.930687 -1.944443 1.250000 +v 3.512680 -1.469795 1.250000 +v 4.313644 -1.084145 1.250000 +v 3.394135 -1.980927 1.250000 +v 3.702469 -1.872643 1.250000 +v 3.304337 -1.574974 1.250000 +v 3.056900 -1.610031 1.250000 +v 1.895905 -1.409958 1.250000 +v 2.259102 0.015404 1.250000 +v 3.965744 0.593315 1.250000 +v 3.770569 0.764397 1.250000 +v 2.744400 0.959412 1.250000 +v 2.779739 0.552200 1.250000 +v 2.489212 0.884575 1.250000 +v 2.514282 0.407303 1.250000 +v 2.061760 0.585220 1.250000 +v 2.368362 0.240021 1.250000 +v -4.615692 0.596008 1.250000 +v -4.982468 0.307442 1.250000 +v -4.841736 0.094551 1.250000 +v 1.898933 0.365425 1.250000 +v 1.782631 0.105179 1.250000 +v -6.925941 -0.669128 1.250000 +v -6.324043 -1.122147 1.250000 +v -6.422859 -0.682129 1.250000 +v -2.869133 -1.591759 1.250000 +v -2.641586 -2.009171 1.250000 +v -2.544380 -1.609055 1.250000 +v 0.628372 0.312836 1.250000 +v 0.999191 0.622978 1.250000 +v 0.844124 0.772652 1.250000 +v 1.781281 -1.157631 1.250000 +v 1.101669 0.430153 1.250000 +v -6.032768 -1.951408 1.250000 +v 0.619064 -0.885033 1.250000 +v 0.768661 -0.399925 1.250000 +v 0.387611 -0.798210 1.250000 +v 2.851692 -2.003609 1.250000 +v 16.492722 -1.944443 1.250000 +v 15.896713 -1.944443 1.250000 +v 2.261665 0.759842 1.250000 +v 3.116882 0.585434 1.250000 +v 4.238800 0.122711 1.250000 +v 4.307068 -0.172264 1.250000 +v -4.909821 -1.248581 1.250000 +v -0.568703 -1.878708 1.250000 +v -0.297806 -1.973099 1.250000 +v -0.362106 -1.490501 1.250000 +v -4.243317 -0.289040 1.250000 +v -4.742554 -0.329834 1.250000 +v -4.266747 -0.889580 1.250000 +v -0.520729 0.078041 1.250000 +v -0.918282 -0.226540 1.250000 +v -0.786133 -0.380936 1.250000 +v -6.396225 -0.140869 1.250000 +v 0.959412 -1.750946 1.250000 +v 0.613541 -1.475189 1.250000 +v 0.724106 -1.893204 1.250000 +v -5.690872 0.985947 1.250000 +v -6.000687 0.473068 1.250000 +v -5.689964 0.580193 1.250000 +v 1.131340 -1.561485 1.250000 +v 0.734894 -1.326187 1.250000 +v 1.238541 -1.338997 1.250000 +v 0.775352 -1.154259 1.250000 +v 0.502968 0.461166 1.250000 +v 0.621628 0.887268 1.250000 +v 0.316879 0.554207 1.250000 +v -0.345367 -0.075012 1.250000 +v -0.535637 -0.536827 1.250000 +v -4.451691 0.384644 1.250000 +v -4.334549 0.136192 1.250000 +v -6.716385 -1.409454 1.250000 +v -6.554749 -1.623520 1.250000 +v -5.581177 -2.009171 1.250000 +v -5.755463 -1.593010 1.250000 +v -4.682159 -1.693802 1.250000 +v -5.164322 -1.499657 1.250000 +v -5.221146 -1.965347 1.250000 +v -5.472023 -1.607437 1.250000 +v -6.831848 -1.152916 1.250000 +v -6.896576 -0.140404 1.250000 +v -6.813644 0.180016 1.250000 +v -6.255196 0.224823 1.250000 +v -6.675430 0.448860 1.250000 +v -6.481934 0.666130 1.250000 +v -6.165657 0.872871 1.250000 +v -5.409248 0.565331 1.250000 +v -5.137077 0.926445 1.250000 +v -5.192604 0.487595 1.250000 +v -4.816612 0.765915 1.250000 +v -4.890778 -1.833870 1.250000 +v 0.217216 -1.609055 1.250000 +v 0.120010 -2.009171 1.250000 +v 0.439590 -1.980179 1.250000 +v 1.166397 0.180687 1.250000 +v 0.691750 0.115967 1.250000 +v -0.997169 -0.042473 1.250000 +v -1.023460 0.159119 1.250000 +v -0.554207 0.215752 1.250000 +v -0.973976 0.445206 1.250000 +v -1.523056 -1.338997 1.250000 +v -2.026703 -1.326187 1.250000 +v -1.630257 -1.561485 1.250000 +v -1.516312 -0.875137 1.250000 +v -2.021980 -1.007278 1.250000 +v -1.986244 -1.154259 1.250000 +v -0.480118 0.899323 1.250000 +v -0.763504 0.737801 1.250000 +v -0.390816 0.492577 1.250000 +v -0.181641 0.567543 1.250000 +v -0.059860 0.985626 1.250000 +v 0.066071 0.585220 1.250000 +v 0.347221 0.960083 1.250000 +v -2.943237 0.567543 1.250000 +v -2.821457 0.985626 1.250000 +v -3.241714 0.899323 1.250000 +v -2.695526 0.585220 1.250000 +v -3.525101 0.737801 1.250000 +v -3.280067 0.354637 1.250000 +v -3.152412 0.492577 1.250000 +v -3.315804 0.215752 1.250000 +v -3.785057 0.159119 1.250000 +v -3.282326 0.078041 1.250000 +v -0.518471 0.354637 1.250000 +v -3.297226 -0.536835 1.250000 +v -2.373985 -0.798210 1.250000 +v -3.106964 -0.075012 1.250000 +v -1.802185 -1.750946 1.250000 +v -2.148056 -1.475189 1.250000 +v -2.037483 -1.893204 1.250000 +v -0.548141 -1.268875 1.250000 +v -0.812851 -1.711113 1.250000 +v -1.021179 -1.393425 1.250000 +v 0.486412 -1.552841 1.250000 +v 1.245285 -0.875137 1.250000 +v 1.274277 -1.103020 1.250000 +v 0.739616 -1.007278 1.250000 +v 1.020096 -0.540726 1.250000 +v 1.158310 -0.687706 1.250000 +v -3.123703 -1.490501 1.250000 +v -3.330299 -1.878708 1.250000 +v -3.059402 -1.973099 1.250000 +v -0.624329 -1.014023 1.250000 +v -2.322006 -1.980179 1.250000 +v -2.275185 -1.552841 1.250000 +v -1.104370 -1.089539 1.250000 +v -1.992935 -0.399925 1.250000 +v -2.142532 -0.885033 1.250000 +v -0.107536 -1.591759 1.250000 +v -1.741501 -0.540726 1.250000 +v -2.133224 0.312836 1.250000 +v -2.069847 0.115967 1.250000 +v -1.659927 0.430153 1.250000 +v -3.547737 -0.380936 1.250000 +v -3.385925 -1.014023 1.250000 +v -3.782776 -1.393425 1.250000 +v -3.309738 -1.268875 1.250000 +v -3.679878 -0.226540 1.250000 +v -3.758766 -0.042473 1.250000 +v -3.735573 0.445206 1.250000 +v -2.444717 0.554207 1.250000 +v -2.414375 0.960083 1.250000 +v -2.139969 0.887268 1.250000 +v -2.258629 0.461166 1.250000 +v -1.917473 0.772652 1.250000 +v -1.762405 0.622978 1.250000 +v -1.595200 0.180687 1.250000 +v -1.487320 -1.103020 1.250000 +v -1.603287 -0.687706 1.250000 +v -3.574448 -1.711113 1.250000 +v -3.865967 -1.089539 1.250000 +v 13.812027 -1.944443 1.250000 +f 1 2 3 +f 4 5 6 +f 7 2 1 +f 8 3 9 +f 10 7 11 +f 10 2 7 +f 12 7 1 +f 13 14 15 +f 16 12 17 +f 17 12 1 +f 2 9 3 +f 9 18 8 +f 19 20 21 +f 22 19 23 +f 24 25 26 +f 27 19 28 +f 29 30 31 +f 4 32 5 +f 33 34 35 +f 36 37 38 +f 39 40 41 +f 42 37 43 +f 44 45 46 +f 47 48 49 +f 50 51 52 +f 53 52 54 +f 55 56 54 +f 57 58 59 +f 55 60 56 +f 58 61 59 +f 62 21 20 +f 54 56 53 +f 53 50 52 +f 52 51 43 +f 63 43 51 +f 42 43 63 +f 37 42 38 +f 36 38 64 +f 36 64 65 +f 66 65 67 +f 36 65 66 +f 66 67 6 +f 4 6 67 +f 49 5 47 +f 5 32 47 +f 49 48 68 +f 31 68 48 +f 31 69 68 +f 31 70 69 +f 71 72 73 +f 22 74 28 +f 19 22 28 +f 21 23 19 +f 75 21 62 +f 76 75 62 +f 60 55 75 +f 60 75 76 +f 77 78 79 +f 80 81 82 +f 83 34 84 +f 85 86 87 +f 88 89 90 +f 33 91 34 +f 92 93 94 +f 24 95 96 +f 97 98 99 +f 100 101 102 +f 102 101 103 +f 94 93 97 +f 104 105 44 +f 92 106 93 +f 107 108 109 +f 110 111 112 +f 25 24 113 +f 114 115 87 +f 116 117 118 +f 119 120 121 +f 122 121 123 +f 124 115 114 +f 87 115 85 +f 125 124 114 +f 78 90 126 +f 120 87 86 +f 121 120 86 +f 122 119 121 +f 127 15 128 +f 24 96 113 +f 24 129 95 +f 130 129 99 +f 95 129 130 +f 98 130 99 +f 93 98 97 +f 92 131 106 +f 106 131 132 +f 88 106 132 +f 89 88 132 +f 133 90 89 +f 126 90 133 +f 134 78 126 +f 79 78 134 +f 135 77 79 +f 135 125 77 +f 135 124 125 +f 71 136 72 +f 137 138 139 +f 140 141 142 +f 71 73 143 +f 144 145 146 +f 147 148 149 +f 113 150 122 +f 151 152 153 +f 152 154 155 +f 153 152 156 +f 156 152 155 +f 152 151 157 +f 150 119 122 +f 156 144 148 +f 153 156 148 +f 153 148 147 +f 156 145 144 +f 25 113 122 +f 158 146 145 +f 143 158 145 +f 159 158 143 +f 143 73 159 +f 160 161 162 +f 163 164 165 +f 165 139 163 +f 166 167 168 +f 139 138 163 +f 166 169 142 +f 169 140 142 +f 170 169 168 +f 162 171 160 +f 172 170 168 +f 170 173 174 +f 172 175 170 +f 169 170 174 +f 176 167 166 +f 177 178 179 +f 178 177 180 +f 169 166 168 +f 140 181 141 +f 182 183 184 +f 140 138 181 +f 185 182 184 +f 138 137 181 +f 186 177 179 +f 187 188 189 +f 190 178 180 +f 191 160 186 +f 192 193 194 +f 191 186 179 +f 195 196 197 +f 171 186 160 +f 198 194 193 +f 199 200 193 +f 201 202 200 +f 203 197 202 +f 204 182 205 +f 206 117 116 +f 207 208 209 +f 207 195 208 +f 197 208 195 +f 197 196 202 +f 203 202 201 +f 199 201 200 +f 192 199 193 +f 194 198 161 +f 162 161 198 +f 210 196 195 +f 209 211 207 +f 212 211 213 +f 207 211 212 +f 214 213 215 +f 212 213 214 +f 216 214 217 +f 214 215 217 +f 216 217 218 +f 219 216 220 +f 216 218 220 +f 221 220 222 +f 219 220 221 +f 222 223 221 +f 224 223 225 +f 221 223 224 +f 225 226 224 +f 224 226 227 +f 227 226 228 +f 210 227 228 +f 229 210 228 +f 230 117 231 +f 232 231 233 +f 234 232 233 +f 111 110 235 +f 127 236 237 +f 238 239 240 +f 241 242 243 +f 244 14 13 +f 239 245 240 +f 196 210 229 +f 246 245 239 +f 247 248 249 +f 236 238 240 +f 127 238 236 +f 14 128 15 +f 244 250 251 +f 14 244 251 +f 242 251 243 +f 252 247 249 +f 247 252 253 +f 248 254 249 +f 206 116 255 +f 248 241 254 +f 242 241 248 +f 250 243 251 +f 256 237 235 +f 237 236 235 +f 235 110 256 +f 128 238 127 +f 232 112 111 +f 232 234 112 +f 233 231 257 +f 258 117 206 +f 231 117 257 +f 230 118 117 +f 102 259 260 +f 261 255 116 +f 57 262 58 +f 61 263 59 +f 264 262 265 +f 262 57 265 +f 264 266 262 +f 266 264 267 +f 100 91 268 +f 103 269 270 +f 103 101 269 +f 107 109 271 +f 271 109 272 +f 272 81 80 +f 273 82 274 +f 275 44 105 +f 276 274 277 +f 278 277 279 +f 280 270 281 +f 282 283 284 +f 281 270 269 +f 285 286 287 +f 288 289 290 +f 291 101 100 +f 292 288 290 +f 293 294 41 +f 291 100 268 +f 268 91 33 +f 294 39 41 +f 83 35 34 +f 295 296 297 +f 298 83 84 +f 267 298 84 +f 264 298 267 +f 299 300 187 +f 280 279 270 +f 102 103 259 +f 280 278 279 +f 278 301 277 +f 276 277 301 +f 274 276 273 +f 274 82 302 +f 81 302 82 +f 109 81 272 +f 107 303 108 +f 108 303 259 +f 259 303 260 +f 299 187 185 +f 304 305 306 +f 307 46 45 +f 308 309 310 +f 311 312 313 +f 314 315 316 +f 317 308 318 +f 282 284 319 +f 320 314 321 +f 322 323 324 +f 321 325 326 +f 327 328 329 +f 318 296 317 +f 308 317 309 +f 330 308 331 +f 332 333 334 +f 333 307 335 +f 336 40 337 +f 293 338 339 +f 293 41 338 +f 340 341 275 +f 342 343 341 +f 39 337 40 +f 344 40 345 +f 40 336 345 +f 346 344 345 +f 347 344 346 +f 346 348 347 +f 324 348 349 +f 347 348 324 +f 324 349 322 +f 322 350 323 +f 319 350 351 +f 323 350 319 +f 282 319 351 +f 283 282 313 +f 312 283 313 +f 312 311 352 +f 334 352 353 +f 312 352 334 +f 353 332 334 +f 334 333 335 +f 335 307 45 +f 46 104 44 +f 105 340 275 +f 341 340 354 +f 342 341 354 +f 339 343 342 +f 339 338 343 +f 355 356 292 +f 331 308 310 +f 289 327 329 +f 330 331 357 +f 358 359 360 +f 361 362 363 +f 364 365 366 +f 365 364 367 +f 367 364 368 +f 328 368 369 +f 288 292 356 +f 327 289 288 +f 328 367 368 +f 329 328 369 +f 370 371 372 +f 370 372 373 +f 374 375 376 +f 365 377 366 +f 378 379 380 +f 377 357 366 +f 357 377 330 +f 381 382 383 +f 305 384 385 +f 384 386 385 +f 387 388 389 +f 297 296 318 +f 390 391 325 +f 295 392 393 +f 297 392 295 +f 392 394 393 +f 325 393 390 +f 393 394 390 +f 325 391 326 +f 320 321 326 +f 314 316 321 +f 315 388 316 +f 389 388 315 +f 395 396 397 +f 398 385 386 +f 286 399 287 +f 386 400 398 +f 401 402 380 +f 384 305 304 +f 306 305 403 +f 389 306 403 +f 387 389 403 +f 363 402 404 +f 360 362 358 +f 405 406 407 +f 379 378 408 +f 408 378 409 +f 410 411 412 +f 413 408 409 +f 408 413 414 +f 415 376 416 +f 371 375 374 +f 371 370 375 +f 373 417 418 +f 373 372 417 +f 419 418 420 +f 420 421 405 +f 407 406 422 +f 421 406 405 +f 420 405 419 +f 373 418 419 +f 376 415 374 +f 414 415 416 +f 416 408 414 +f 401 380 379 +f 361 423 362 +f 402 401 404 +f 383 382 399 +f 363 404 424 +f 361 363 424 +f 362 423 358 +f 360 359 381 +f 381 383 360 +f 287 399 382 +f 395 397 425 +f 412 411 425 +f 412 426 410 +f 425 411 395 +f 395 285 396 +f 396 285 287 +f 182 185 189 +f 205 182 189 +f 189 188 427 +f 187 189 185 +f 28 74 70 +f 28 70 30 +f 70 31 30 +f 428 429 430 +f 431 432 433 +f 434 428 430 +f 435 436 429 +f 437 438 434 +f 437 434 430 +f 439 428 434 +f 440 441 442 +f 443 444 439 +f 444 428 439 +f 430 429 436 +f 436 435 445 +f 446 447 448 +f 449 450 451 +f 452 453 446 +f 454 455 456 +f 431 433 457 +f 458 459 460 +f 461 462 463 +f 464 465 466 +f 466 467 468 +f 469 470 471 +f 472 473 468 +f 474 475 476 +f 477 473 478 +f 479 480 481 +f 482 480 483 +f 484 485 486 +f 482 483 487 +f 486 485 488 +f 489 448 447 +f 480 479 483 +f 479 481 477 +f 481 473 477 +f 472 478 473 +f 467 472 468 +f 466 490 467 +f 466 465 490 +f 464 491 465 +f 464 492 491 +f 464 432 492 +f 431 492 432 +f 475 474 433 +f 433 474 457 +f 475 493 476 +f 455 476 493 +f 455 493 494 +f 455 494 495 +f 496 497 498 +f 499 453 500 +f 446 453 499 +f 446 499 501 +f 447 446 501 +f 502 489 447 +f 503 489 502 +f 487 502 482 +f 487 503 502 +f 504 505 506 +f 507 508 509 +f 510 511 460 +f 512 513 514 +f 458 460 515 +f 516 517 518 +f 449 519 520 +f 521 522 523 +f 524 525 526 +f 525 527 528 +f 517 521 518 +f 529 530 531 +f 516 518 532 +f 533 534 535 +f 536 537 538 +f 451 539 449 +f 540 541 542 +f 449 539 543 +f 544 545 546 +f 547 548 549 +f 550 540 542 +f 541 512 542 +f 541 513 512 +f 551 540 552 +f 463 509 553 +f 549 514 513 +f 549 513 554 +f 547 549 554 +f 547 554 555 +f 556 557 441 +f 449 543 519 +f 449 520 558 +f 559 522 558 +f 520 559 558 +f 523 522 559 +f 518 521 523 +f 516 532 560 +f 462 561 560 +f 532 462 560 +f 461 561 462 +f 553 461 463 +f 508 553 509 +f 562 508 507 +f 563 562 507 +f 563 507 551 +f 563 551 552 +f 552 540 550 +f 496 498 564 +f 565 566 567 +f 568 569 570 +f 496 571 497 +f 572 573 574 +f 575 576 577 +f 578 579 580 +f 580 581 582 +f 579 583 580 +f 583 581 580 +f 580 584 578 +f 539 547 555 +f 583 577 572 +f 579 577 583 +f 579 575 577 +f 583 572 574 +f 451 547 539 +f 585 574 573 +f 571 574 585 +f 586 571 585 +f 571 586 497 +f 587 588 589 +f 590 591 592 +f 591 590 566 +f 593 594 595 +f 566 590 567 +f 593 569 596 +f 596 569 568 +f 597 594 596 +f 588 587 598 +f 599 594 597 +f 597 600 601 +f 599 597 602 +f 596 600 597 +f 603 593 595 +f 604 605 606 +f 606 607 604 +f 596 594 593 +f 568 570 608 +f 609 610 611 +f 568 608 567 +f 612 610 609 +f 567 608 565 +f 613 605 604 +f 614 615 616 +f 617 607 606 +f 618 613 587 +f 619 620 621 +f 618 605 613 +f 622 623 624 +f 598 587 613 +f 625 621 620 +f 626 621 627 +f 628 627 629 +f 630 629 631 +f 623 631 624 +f 632 633 609 +f 634 544 546 +f 635 636 623 +f 635 623 622 +f 631 629 624 +f 630 628 629 +f 626 627 628 +f 619 621 626 +f 620 589 625 +f 588 625 589 +f 637 622 624 +f 636 635 638 +f 639 640 638 +f 635 639 638 +f 641 642 640 +f 639 641 640 +f 643 644 641 +f 641 644 642 +f 643 645 644 +f 646 647 643 +f 643 647 645 +f 648 649 647 +f 646 648 647 +f 649 648 650 +f 651 652 650 +f 648 651 650 +f 652 651 653 +f 651 654 653 +f 654 655 653 +f 654 656 655 +f 637 656 654 +f 657 656 637 +f 658 659 546 +f 660 661 659 +f 662 661 660 +f 538 663 536 +f 556 664 665 +f 666 667 668 +f 669 670 671 +f 672 440 442 +f 668 667 673 +f 624 657 637 +f 674 668 673 +f 675 676 677 +f 665 667 666 +f 556 665 666 +f 442 441 557 +f 672 678 679 +f 442 678 672 +f 671 670 678 +f 680 676 675 +f 675 681 680 +f 677 676 682 +f 634 683 544 +f 677 682 669 +f 671 677 669 +f 679 678 670 +f 684 663 664 +f 664 663 665 +f 663 684 536 +f 557 556 666 +f 660 538 537 +f 660 537 662 +f 661 685 659 +f 686 634 546 +f 659 685 546 +f 658 546 545 +f 525 687 688 +f 689 544 683 +f 484 486 690 +f 488 485 691 +f 692 693 690 +f 690 693 484 +f 692 690 694 +f 694 695 692 +f 524 696 515 +f 527 697 528 +f 533 698 534 +f 698 699 534 +f 699 504 506 +f 700 701 505 +f 702 703 701 +f 704 705 703 +f 706 707 708 +f 709 710 697 +f 711 712 713 +f 710 528 697 +f 714 715 716 +f 526 525 528 +f 717 718 719 +f 720 524 526 +f 721 718 717 +f 720 696 524 +f 696 458 515 +f 722 470 469 +f 510 460 459 +f 723 724 725 +f 726 511 510 +f 695 511 726 +f 692 695 726 +f 727 614 728 +f 709 697 705 +f 525 688 527 +f 709 705 704 +f 704 703 729 +f 702 729 703 +f 701 700 702 +f 701 730 505 +f 506 505 730 +f 534 699 506 +f 533 535 731 +f 731 535 732 +f 535 688 732 +f 688 687 732 +f 727 612 614 +f 531 530 733 +f 734 735 736 +f 737 738 739 +f 740 741 742 +f 713 743 711 +f 744 745 746 +f 747 748 749 +f 750 751 744 +f 751 752 753 +f 754 755 756 +f 757 758 725 +f 757 742 758 +f 759 708 760 +f 760 708 737 +f 761 762 712 +f 722 763 764 +f 722 764 470 +f 765 733 766 +f 767 766 768 +f 469 471 762 +f 712 762 471 +f 712 769 761 +f 711 769 712 +f 711 743 770 +f 743 771 770 +f 772 773 771 +f 743 772 771 +f 773 772 774 +f 748 775 774 +f 772 748 774 +f 747 775 748 +f 776 777 747 +f 749 776 747 +f 778 777 776 +f 778 779 777 +f 707 706 779 +f 778 707 779 +f 706 708 759 +f 708 738 737 +f 738 530 739 +f 739 530 529 +f 531 733 765 +f 766 780 765 +f 767 780 766 +f 763 767 768 +f 763 768 764 +f 781 782 783 +f 784 721 785 +f 786 741 740 +f 787 786 740 +f 719 755 754 +f 788 789 787 +f 790 791 792 +f 793 794 795 +f 796 797 798 +f 798 799 796 +f 799 800 796 +f 801 802 800 +f 756 802 801 +f 717 785 721 +f 754 717 719 +f 801 800 799 +f 755 802 756 +f 803 804 805 +f 803 806 804 +f 807 808 809 +f 810 811 812 +f 798 797 813 +f 814 815 816 +f 813 797 789 +f 789 788 813 +f 740 788 787 +f 817 818 819 +f 757 740 742 +f 736 820 821 +f 821 820 822 +f 781 783 823 +f 724 757 725 +f 824 753 825 +f 723 826 827 +f 724 723 827 +f 827 826 828 +f 753 824 826 +f 826 824 828 +f 753 752 825 +f 750 752 751 +f 744 751 745 +f 746 745 823 +f 783 746 823 +f 829 830 831 +f 832 822 820 +f 716 833 834 +f 822 832 835 +f 836 815 837 +f 821 734 736 +f 735 838 736 +f 782 838 735 +f 781 838 782 +f 794 839 837 +f 791 790 795 +f 840 841 842 +f 816 843 814 +f 844 845 846 +f 847 843 812 +f 812 848 847 +f 849 810 808 +f 805 807 809 +f 805 809 803 +f 806 850 851 +f 850 852 851 +f 806 851 804 +f 853 854 852 +f 854 840 855 +f 841 856 842 +f 855 840 842 +f 854 853 840 +f 850 853 852 +f 808 807 849 +f 811 810 849 +f 848 812 811 +f 843 816 812 +f 836 816 815 +f 793 795 857 +f 837 839 836 +f 818 834 819 +f 794 858 839 +f 793 858 794 +f 795 790 857 +f 791 817 792 +f 817 791 818 +f 833 819 834 +f 829 859 830 +f 845 859 846 +f 845 844 860 +f 859 829 846 +f 829 831 714 +f 831 715 714 +f 715 833 716 +f 609 615 612 +f 633 615 609 +f 615 861 616 +f 614 612 615 +f 453 495 500 +f 453 456 495 +f 495 456 455 +f 18 445 8 +f 435 8 445 +f 9 436 18 +f 445 18 436 +f 2 430 9 +f 436 9 430 +f 10 437 2 +f 430 2 437 +f 11 438 10 +f 437 10 438 +f 7 434 11 +f 438 11 434 +f 12 439 7 +f 434 7 439 +f 16 443 12 +f 439 12 443 +f 17 444 16 +f 443 16 444 +f 1 428 17 +f 444 17 428 +f 3 429 1 +f 428 1 429 +f 8 435 3 +f 429 3 435 +f 76 503 60 +f 487 60 503 +f 62 489 76 +f 503 76 489 +f 20 448 62 +f 489 62 448 +f 19 446 20 +f 448 20 446 +f 27 452 19 +f 446 19 452 +f 28 453 27 +f 452 27 453 +f 30 456 28 +f 453 28 456 +f 29 454 30 +f 456 30 454 +f 31 455 29 +f 454 29 455 +f 48 476 31 +f 455 31 476 +f 47 474 48 +f 476 48 474 +f 32 457 47 +f 474 47 457 +f 4 431 32 +f 457 32 431 +f 67 492 4 +f 431 4 492 +f 65 491 67 +f 492 67 491 +f 64 465 65 +f 491 65 465 +f 38 490 64 +f 465 64 490 +f 42 467 38 +f 490 38 467 +f 63 472 42 +f 467 42 472 +f 51 478 63 +f 472 63 478 +f 50 477 51 +f 478 51 477 +f 53 479 50 +f 477 50 479 +f 56 483 53 +f 479 53 483 +f 60 487 56 +f 483 56 487 +f 55 482 75 +f 502 75 482 +f 54 480 55 +f 482 55 480 +f 52 481 54 +f 480 54 481 +f 481 52 473 +f 43 473 52 +f 473 43 468 +f 37 468 43 +f 468 37 466 +f 36 466 37 +f 466 36 464 +f 66 464 36 +f 6 432 66 +f 464 66 432 +f 5 433 6 +f 432 6 433 +f 49 475 5 +f 433 5 475 +f 68 493 49 +f 475 49 493 +f 69 494 68 +f 493 68 494 +f 70 495 69 +f 494 69 495 +f 74 500 70 +f 495 70 500 +f 22 499 74 +f 500 74 499 +f 499 22 501 +f 23 501 22 +f 21 447 23 +f 501 23 447 +f 75 502 21 +f 447 21 502 +f 550 124 552 +f 135 563 124 +f 552 124 563 +f 79 562 135 +f 563 135 562 +f 134 508 79 +f 562 79 508 +f 126 553 134 +f 508 134 553 +f 133 553 126 +f 89 461 133 +f 553 133 461 +f 132 561 89 +f 461 89 561 +f 131 560 132 +f 561 132 560 +f 92 516 131 +f 560 131 516 +f 94 517 92 +f 516 92 517 +f 97 521 94 +f 517 94 521 +f 99 522 97 +f 521 97 522 +f 129 558 99 +f 522 99 558 +f 24 449 129 +f 558 129 449 +f 26 450 24 +f 449 24 450 +f 25 451 26 +f 450 26 451 +f 122 547 25 +f 451 25 547 +f 123 548 122 +f 547 122 548 +f 121 549 123 +f 548 123 549 +f 86 514 121 +f 549 121 514 +f 85 512 86 +f 514 86 512 +f 115 542 85 +f 512 85 542 +f 124 550 115 +f 542 115 550 +f 87 541 114 +f 540 114 541 +f 541 87 513 +f 120 513 87 +f 513 120 554 +f 119 554 120 +f 554 119 555 +f 150 555 119 +f 555 150 539 +f 113 539 150 +f 539 113 543 +f 96 519 113 +f 543 113 519 +f 95 520 96 +f 519 96 520 +f 130 559 95 +f 520 95 559 +f 98 523 130 +f 559 130 523 +f 93 518 98 +f 523 98 518 +f 106 532 93 +f 518 93 532 +f 532 106 462 +f 88 462 106 +f 462 88 463 +f 90 463 88 +f 463 90 509 +f 78 509 90 +f 509 78 507 +f 77 507 78 +f 125 551 77 +f 507 77 551 +f 114 540 125 +f 551 125 540 +f 72 498 73 +f 497 73 498 +f 136 564 72 +f 498 72 564 +f 71 496 136 +f 564 136 496 +f 143 571 71 +f 496 71 571 +f 145 574 143 +f 571 143 574 +f 156 583 145 +f 574 145 583 +f 155 581 156 +f 583 156 581 +f 154 582 155 +f 581 155 582 +f 152 580 154 +f 582 154 580 +f 157 584 152 +f 580 152 584 +f 151 578 157 +f 584 157 578 +f 153 579 151 +f 578 151 579 +f 147 575 153 +f 579 153 575 +f 149 576 147 +f 575 147 576 +f 148 577 149 +f 576 149 577 +f 144 572 148 +f 577 148 572 +f 146 573 144 +f 572 144 573 +f 158 585 146 +f 573 146 585 +f 159 586 158 +f 585 158 586 +f 73 497 159 +f 586 159 497 +f 165 591 139 +f 566 139 591 +f 164 592 165 +f 591 165 592 +f 163 590 164 +f 592 164 590 +f 138 567 163 +f 590 163 567 +f 140 568 138 +f 567 138 568 +f 169 596 140 +f 568 140 596 +f 174 600 169 +f 596 169 600 +f 173 601 174 +f 600 174 601 +f 170 597 173 +f 601 173 597 +f 175 602 170 +f 597 170 602 +f 172 599 175 +f 602 175 599 +f 168 594 172 +f 599 172 594 +f 167 595 168 +f 594 168 595 +f 176 603 167 +f 595 167 603 +f 166 593 176 +f 603 176 593 +f 142 569 166 +f 593 166 569 +f 141 570 142 +f 569 142 570 +f 181 608 141 +f 570 141 608 +f 137 565 181 +f 608 181 565 +f 139 566 137 +f 565 137 566 +f 160 587 161 +f 589 161 587 +f 191 618 160 +f 587 160 618 +f 179 605 191 +f 618 191 605 +f 178 606 179 +f 605 179 606 +f 190 617 178 +f 606 178 617 +f 180 607 190 +f 617 190 607 +f 177 604 180 +f 607 180 604 +f 186 613 177 +f 604 177 613 +f 171 598 186 +f 613 186 598 +f 162 588 171 +f 598 171 588 +f 198 625 162 +f 588 162 625 +f 193 621 198 +f 625 198 621 +f 200 627 193 +f 621 193 627 +f 202 629 200 +f 627 200 629 +f 196 624 202 +f 629 202 624 +f 229 657 196 +f 624 196 657 +f 228 656 229 +f 657 229 656 +f 656 228 655 +f 226 653 228 +f 655 228 653 +f 225 652 226 +f 653 226 652 +f 223 650 225 +f 652 225 650 +f 222 649 223 +f 650 223 649 +f 220 647 222 +f 649 222 647 +f 218 645 220 +f 647 220 645 +f 217 644 218 +f 645 218 644 +f 215 642 217 +f 644 217 642 +f 213 640 215 +f 642 215 640 +f 211 638 213 +f 640 213 638 +f 209 636 211 +f 638 211 636 +f 208 623 209 +f 636 209 623 +f 197 623 208 +f 623 197 631 +f 203 630 197 +f 631 197 630 +f 201 628 203 +f 630 203 628 +f 199 626 201 +f 628 201 626 +f 192 619 199 +f 626 199 619 +f 194 620 192 +f 619 192 620 +f 161 589 194 +f 620 194 589 +f 195 622 210 +f 637 210 622 +f 207 635 195 +f 622 195 635 +f 212 639 207 +f 635 207 639 +f 214 641 212 +f 639 212 641 +f 216 643 214 +f 641 214 643 +f 219 646 216 +f 643 216 646 +f 221 648 219 +f 646 219 648 +f 224 651 221 +f 648 221 651 +f 227 654 224 +f 651 224 654 +f 210 637 227 +f 654 227 637 +f 116 544 261 +f 689 261 544 +f 118 545 116 +f 544 116 545 +f 230 658 118 +f 545 118 658 +f 231 659 230 +f 658 230 659 +f 232 660 231 +f 659 231 660 +f 111 538 232 +f 660 232 538 +f 235 663 111 +f 538 111 663 +f 236 665 235 +f 663 235 665 +f 240 667 236 +f 665 236 667 +f 245 673 240 +f 667 240 673 +f 246 674 245 +f 673 245 674 +f 239 668 246 +f 674 246 668 +f 238 666 239 +f 668 239 666 +f 128 557 238 +f 666 238 557 +f 14 442 128 +f 557 128 442 +f 251 678 14 +f 442 14 678 +f 242 671 251 +f 678 251 671 +f 248 677 242 +f 671 242 677 +f 247 675 248 +f 677 248 675 +f 253 681 247 +f 675 247 681 +f 252 680 253 +f 681 253 680 +f 249 676 252 +f 680 252 676 +f 254 682 249 +f 676 249 682 +f 241 669 254 +f 682 254 669 +f 243 670 241 +f 669 241 670 +f 250 679 243 +f 670 243 679 +f 244 672 250 +f 679 250 672 +f 13 440 244 +f 672 244 440 +f 15 441 13 +f 440 13 441 +f 127 556 15 +f 441 15 556 +f 237 664 127 +f 556 127 664 +f 256 684 237 +f 664 237 684 +f 110 536 256 +f 684 256 536 +f 112 537 110 +f 536 110 537 +f 234 662 112 +f 537 112 662 +f 233 661 234 +f 662 234 661 +f 257 685 233 +f 661 233 685 +f 117 546 257 +f 685 257 546 +f 258 686 117 +f 546 117 686 +f 206 634 258 +f 686 258 634 +f 255 683 206 +f 634 206 683 +f 261 689 255 +f 683 255 689 +f 264 692 298 +f 726 298 692 +f 265 693 264 +f 692 264 693 +f 57 484 265 +f 693 265 484 +f 59 485 57 +f 484 57 485 +f 263 691 59 +f 485 59 691 +f 61 488 263 +f 691 263 488 +f 58 486 61 +f 488 61 486 +f 262 690 58 +f 486 58 690 +f 266 694 262 +f 690 262 694 +f 267 695 266 +f 694 266 695 +f 84 511 267 +f 695 267 511 +f 34 460 84 +f 511 84 460 +f 91 515 34 +f 460 34 515 +f 100 524 91 +f 515 91 524 +f 102 525 100 +f 524 100 525 +f 260 687 102 +f 525 102 687 +f 303 732 260 +f 687 260 732 +f 732 303 731 +f 107 533 303 +f 731 303 533 +f 271 698 107 +f 533 107 698 +f 272 699 271 +f 698 271 699 +f 80 504 272 +f 699 272 504 +f 82 505 80 +f 504 80 505 +f 273 700 82 +f 505 82 700 +f 276 702 273 +f 700 273 702 +f 301 729 276 +f 702 276 729 +f 278 704 301 +f 729 301 704 +f 280 709 278 +f 704 278 709 +f 281 710 280 +f 709 280 710 +f 269 528 281 +f 710 281 528 +f 101 528 269 +f 528 101 526 +f 291 720 101 +f 526 101 720 +f 268 696 291 +f 720 291 696 +f 33 458 268 +f 696 268 458 +f 35 459 33 +f 458 33 459 +f 83 510 35 +f 459 35 510 +f 298 726 83 +f 510 83 726 +f 103 527 259 +f 688 259 527 +f 270 697 103 +f 527 103 697 +f 279 705 270 +f 697 270 705 +f 277 703 279 +f 705 279 703 +f 274 701 277 +f 703 277 701 +f 302 730 274 +f 701 274 730 +f 81 506 302 +f 730 302 506 +f 109 534 81 +f 506 81 534 +f 108 535 109 +f 534 109 535 +f 259 688 108 +f 535 108 688 +f 342 767 339 +f 763 339 767 +f 354 780 342 +f 767 342 780 +f 340 765 354 +f 780 354 765 +f 105 531 340 +f 765 340 531 +f 104 529 105 +f 531 105 529 +f 46 739 104 +f 529 104 739 +f 307 737 46 +f 739 46 737 +f 333 760 307 +f 737 307 760 +f 332 759 333 +f 760 333 759 +f 353 706 332 +f 759 332 706 +f 352 779 353 +f 706 353 779 +f 311 777 352 +f 779 352 777 +f 313 777 311 +f 282 747 313 +f 777 313 747 +f 351 775 282 +f 747 282 775 +f 350 774 351 +f 775 351 774 +f 322 773 350 +f 774 350 773 +f 349 771 322 +f 773 322 771 +f 348 770 349 +f 771 349 770 +f 346 711 348 +f 770 348 711 +f 345 769 346 +f 711 346 769 +f 336 761 345 +f 769 345 761 +f 337 762 336 +f 761 336 762 +f 39 469 337 +f 762 337 469 +f 294 722 39 +f 469 39 722 +f 293 722 294 +f 339 763 293 +f 722 293 763 +f 768 338 764 +f 41 470 338 +f 764 338 470 +f 40 471 41 +f 470 41 471 +f 471 40 712 +f 344 712 40 +f 712 344 713 +f 347 713 344 +f 713 347 743 +f 324 743 347 +f 743 324 772 +f 323 772 324 +f 319 748 323 +f 772 323 748 +f 284 749 319 +f 748 319 749 +f 283 749 284 +f 749 283 776 +f 312 778 283 +f 776 283 778 +f 334 707 312 +f 778 312 707 +f 707 334 708 +f 335 708 334 +f 708 335 738 +f 45 738 335 +f 738 45 530 +f 44 530 45 +f 530 44 733 +f 275 733 44 +f 341 766 275 +f 733 275 766 +f 343 768 341 +f 766 341 768 +f 338 768 343 +f 782 389 783 +f 315 746 389 +f 783 389 746 +f 314 744 315 +f 746 315 744 +f 320 750 314 +f 744 314 750 +f 326 752 320 +f 750 320 752 +f 391 825 326 +f 752 326 825 +f 390 824 391 +f 825 391 824 +f 394 828 390 +f 824 390 828 +f 392 827 394 +f 828 394 827 +f 297 724 392 +f 827 392 724 +f 318 757 297 +f 724 297 757 +f 308 757 318 +f 757 308 740 +f 330 740 308 +f 740 330 788 +f 377 813 330 +f 788 330 813 +f 365 798 377 +f 813 377 798 +f 367 799 365 +f 798 365 799 +f 328 801 367 +f 799 367 801 +f 801 328 756 +f 327 754 328 +f 756 328 754 +f 288 717 327 +f 754 327 717 +f 356 785 288 +f 717 288 785 +f 355 784 356 +f 785 356 784 +f 292 721 355 +f 784 355 721 +f 290 718 292 +f 721 292 718 +f 289 719 290 +f 718 290 719 +f 329 755 289 +f 719 289 755 +f 369 802 329 +f 755 329 802 +f 368 800 369 +f 802 369 800 +f 364 796 368 +f 800 368 796 +f 366 797 364 +f 796 364 797 +f 357 789 366 +f 797 366 789 +f 331 787 357 +f 789 357 787 +f 787 331 786 +f 310 741 331 +f 786 331 741 +f 309 742 310 +f 741 310 742 +f 317 758 309 +f 742 309 758 +f 296 725 317 +f 758 317 725 +f 295 723 296 +f 725 296 723 +f 393 826 295 +f 723 295 826 +f 325 753 393 +f 826 393 753 +f 321 751 325 +f 753 325 751 +f 316 745 321 +f 751 321 745 +f 388 823 316 +f 745 316 823 +f 387 781 388 +f 823 388 781 +f 403 838 387 +f 781 387 838 +f 305 736 403 +f 838 403 736 +f 385 820 305 +f 736 305 820 +f 398 832 385 +f 820 385 832 +f 400 835 398 +f 832 398 835 +f 386 822 400 +f 835 400 822 +f 384 821 386 +f 822 386 821 +f 304 734 384 +f 821 384 734 +f 306 735 304 +f 734 304 735 +f 389 782 306 +f 735 306 782 +f 715 287 833 +f 382 819 287 +f 833 287 819 +f 381 817 382 +f 819 382 817 +f 359 792 381 +f 817 381 792 +f 358 790 359 +f 792 359 790 +f 423 857 358 +f 790 358 857 +f 361 793 423 +f 857 423 793 +f 424 858 361 +f 793 361 858 +f 404 839 424 +f 858 424 839 +f 401 836 404 +f 839 404 836 +f 379 816 401 +f 836 401 816 +f 408 816 379 +f 816 408 812 +f 416 812 408 +f 812 416 810 +f 376 808 416 +f 810 416 808 +f 375 809 376 +f 808 376 809 +f 370 803 375 +f 809 375 803 +f 373 806 370 +f 803 370 806 +f 806 373 850 +f 419 853 373 +f 850 373 853 +f 405 840 419 +f 853 419 840 +f 407 841 405 +f 840 405 841 +f 422 856 407 +f 841 407 856 +f 406 842 422 +f 856 422 842 +f 421 855 406 +f 842 406 855 +f 420 854 421 +f 855 421 854 +f 418 852 420 +f 854 420 852 +f 417 851 418 +f 852 418 851 +f 372 804 417 +f 851 417 804 +f 371 805 372 +f 804 372 805 +f 374 807 371 +f 805 371 807 +f 415 849 374 +f 807 374 849 +f 414 811 415 +f 849 415 811 +f 811 414 848 +f 413 847 414 +f 848 414 847 +f 409 843 413 +f 847 413 843 +f 378 814 409 +f 843 409 814 +f 380 815 378 +f 814 378 815 +f 402 837 380 +f 815 380 837 +f 363 794 402 +f 837 402 794 +f 362 795 363 +f 794 363 795 +f 360 791 362 +f 795 362 791 +f 383 818 360 +f 791 360 818 +f 399 834 383 +f 818 383 834 +f 286 716 399 +f 834 399 716 +f 285 714 286 +f 716 286 714 +f 395 829 285 +f 714 285 829 +f 411 846 395 +f 829 395 846 +f 410 844 411 +f 846 411 844 +f 426 860 410 +f 844 410 860 +f 412 845 426 +f 860 426 845 +f 425 859 412 +f 845 412 859 +f 397 830 425 +f 859 425 830 +f 396 831 397 +f 830 397 831 +f 287 715 396 +f 831 396 715 +f 187 614 188 +f 616 188 614 +f 300 728 187 +f 614 187 728 +f 299 727 300 +f 728 300 727 +f 185 612 299 +f 727 299 612 +f 184 610 185 +f 612 185 610 +f 183 611 184 +f 610 184 611 +f 182 609 183 +f 611 183 609 +f 204 632 182 +f 609 182 632 +f 205 633 204 +f 632 204 633 +f 189 615 205 +f 633 205 615 +f 427 861 189 +f 615 189 861 +f 188 616 427 +f 861 427 616 diff --git a/src/slic3r/GUI/CameraUtils.cpp b/src/slic3r/GUI/CameraUtils.cpp index 29d0c32db..e39b06210 100644 --- a/src/slic3r/GUI/CameraUtils.cpp +++ b/src/slic3r/GUI/CameraUtils.cpp @@ -40,7 +40,10 @@ Points CameraUtils::project(const Camera & camera, Slic3r::Polygon CameraUtils::create_hull2d(const Camera & camera, const GLVolume &volume) { - const indexed_triangle_set &its = volume.convex_hull()->its; + // TODO: fix Negative volume doesnt have convex hull + const TriangleMesh *hull = volume.convex_hull(); + assert(hull != nullptr); + const indexed_triangle_set &its = hull->its; const Transform3d & trafoMat = volume.get_instance_transformation().get_matrix() * volume.get_volume_transformation().get_matrix(); diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 5af40eb59..21501d32d 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -490,7 +490,7 @@ wxMenu* MenuFactory::append_submenu_add_generic(wxMenu* menu, ModelVolumeType ty mng.open_gizmo(GLGizmosManager::Emboss)) && type != ModelVolumeType::INVALID) { GLGizmoEmboss *emboss = dynamic_cast(mng.get_current()); - if (emboss != nullptr) emboss->set_volume_type(type); + if (emboss != nullptr) emboss->create_volume(type); } }; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp index 8d31411aa..9b8444a16 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp @@ -20,6 +20,7 @@ #include "libslic3r/ClipperUtils.hpp" // union_ex #include "libslic3r/AppConfig.hpp" // store/load font list #include "libslic3r/MapUtils.hpp" +#include "libslic3r/Format/OBJ.hpp" // load obj file for default object #include "imgui/imgui_stdlib.h" // using std::string for inputs #include "nanosvg/nanosvg.h" // load SVG file @@ -189,6 +190,47 @@ public: #endif // __linux__ +class Priv +{ +public: + Priv() = delete; + + struct EmbossVolume + { + TriangleMesh mesh; + std::string name; + TextConfiguration cfg; + ModelVolumeType type; + size_t object_idx; + + EmbossVolume(TriangleMesh mesh, + std::string name, + TextConfiguration cfg) + : mesh(mesh) + , name(name) + , cfg(cfg) + , type(ModelVolumeType::MODEL_PART) + , object_idx(0) // not used + {} + + EmbossVolume(TriangleMesh mesh, + std::string name, + TextConfiguration cfg, + ModelVolumeType type, + size_t object_idx) + : mesh(mesh) + , name(name) + , cfg(cfg) + , type(type) + , object_idx(object_idx) + {} + }; + + // it is called after draw + static void create_emboss_object(EmbossVolume *data); + static void create_emboss_volume(EmbossVolume *data); +}; + } // namespace Slic3r using namespace Slic3r; @@ -204,12 +246,9 @@ GLGizmoEmboss::GLGizmoEmboss(GLCanvas3D &parent) , m_job(std::make_unique()) { // TODO: add suggestion to use https://fontawesome.com/ - // (copy & paste) unicode symbols from web - + // (copy & paste) unicode symbols from web } -GLGizmoEmboss::~GLGizmoEmboss() { m_job->stop(); } - void GLGizmoEmboss::set_fine_position() { const Selection & selection = m_parent.get_selection(); @@ -264,11 +303,18 @@ static void draw_fine_position(const Selection &selection) } #endif // ALLOW_DEBUG_MODE -void GLGizmoEmboss::set_volume_type(ModelVolumeType volume_type) +void GLGizmoEmboss::create_volume(ModelVolumeType volume_type) { - if (m_volume == nullptr) return; - m_volume->set_type(volume_type); - m_parent.reload_scene(true); + if (!m_is_initialized) initialize(); + const Selection &selection = m_parent.get_selection(); + if(selection.is_empty()) return; + + set_default_configuration(); + auto data = new Priv::EmbossVolume(m_default_mesh, create_volume_name(), + create_configuration(), volume_type, + selection.get_object_idx()); + wxGetApp().plater()->CallAfter( + [data]() { Priv::create_emboss_volume(data); }); } bool GLGizmoEmboss::on_init() @@ -287,7 +333,6 @@ void GLGizmoEmboss::on_render_input_window(float x, float y, float bottom_limit) { check_selection(); - ImVec2 min_window_size = m_gui_cfg->draw_advanced ? m_gui_cfg->minimal_window_size_with_advance : m_gui_cfg->minimal_window_size; @@ -333,32 +378,113 @@ void GLGizmoEmboss::on_set_state() return; } m_volume = nullptr; - m_job->stop(); - m_job->join(); // free thread resource remove_notification_not_valid_font(); } else if (GLGizmoBase::m_state == GLGizmoBase::On) { if (!m_is_initialized) initialize(); - set_fine_position(); + const Selection &selection = m_parent.get_selection(); + bool create_new_object = selection.is_empty(); // When add Text on empty plate, Create new object with volume - if (m_parent.get_selection().is_empty()) { - if (!create_default_model_object()) - GLGizmoBase::m_state = GLGizmoBase::Off; + if (create_new_object) { + set_default_configuration(); + // data are owen by lambda + auto data = new Priv::EmbossVolume(m_default_mesh, + create_volume_name(), + create_configuration()); + wxGetApp().plater()->CallAfter([data]() { + Priv::create_emboss_object(data); + }); + // gizmo will open when successfuly create new object + GLGizmoBase::m_state = GLGizmoBase::Off; return; } - // Try set selected volume - if (!load_configuration(get_selected_volume())) { - // No volume with text selected, create new one - set_default_configuration(); - process(); - } + // Try(when exist) set configuration by volume + load_configuration(get_selected_volume()); + + // change position of just opened emboss window + set_fine_position(); // when open by hyperlink it needs to show up m_parent.reload_scene(true); } } +void Priv::create_emboss_object(EmbossVolume *data) +{ + ScopeGuard sg([data]() { delete data; }); + + GUI_App & app = wxGetApp(); + Plater * plater = app.plater(); + ObjectList * obj_list = app.obj_list(); + GLCanvas3D * canvas = plater->canvas3D(); + GLGizmosManager &manager = canvas->get_gizmos_manager(); + + plater->take_snapshot(_L("Add Emboss text object")); + // Create new object and change selection + bool center = true; + obj_list->load_mesh_object(data->mesh, data->name, center, &data->cfg); + + // new object successfuly added so open gizmo + assert(manager.get_current_type() != GLGizmosManager::Emboss); + manager.open_gizmo(GLGizmosManager::Emboss); + + // redraw scene + canvas->reload_scene(true); + + // Gizmo is not open during time of creation object + // When cursor move and no one object is selected than Manager::reset_all() +} + +void Priv::create_emboss_volume(EmbossVolume* data) +{ + ScopeGuard sg([data]() { delete data; }); + + GUI_App & app = wxGetApp(); + Plater * plater = app.plater(); + ObjectList *obj_list = app.obj_list(); + GLCanvas3D *canvas = plater->canvas3D(); + + size_t object_idx = data->object_idx; + ModelVolumeType type = data->type; + + // create new volume inside of object + Model &model = plater->model(); + if (model.objects.size() <= object_idx) return; + ModelObject *obj = model.objects[object_idx]; + ModelVolume *volume = obj->add_volume(std::move(data->mesh)); + + // set a default extruder value, since user can't add it manually + volume->config.set_key_value("extruder", new ConfigOptionInt(0)); + + // do not allow model reload from disk + volume->source.is_from_builtin_objects = true; + volume->set_type(type); + volume->name = data->name; + volume->text_configuration = data->cfg; + + // update volume name in object list + // updata selection after new volume added + // change name of volume in right panel + // select only actual volume + // when new volume is created change selection to this volume + auto add_to_selection = [volume](const ModelVolume *vol) { + return vol == volume; + }; + wxDataViewItemArray sel = obj_list->reorder_volumes_and_get_selection((int)object_idx, add_to_selection); + if (!sel.IsEmpty()) obj_list->select_item(sel.front()); + + // update printable state on canvas + if (type == ModelVolumeType::MODEL_PART) + canvas->update_instance_printable_state_for_object(object_idx); + + obj_list->selection_changed(); + + // redraw scene + canvas->reload_scene(true); +} + + void GLGizmoEmboss::initialize() { if (m_is_initialized) return; @@ -389,16 +515,37 @@ void GLGizmoEmboss::initialize() load_font_list(); - m_font_selected = 0; + // try to load valid font + m_font_selected = 0; bool is_font_loaded = load_font(); while (!is_font_loaded && !m_font_list.empty()) { // can't load so erase it from list - m_font_list.erase(m_font_list.begin() + m_font_selected); - m_font_selected = 0; // select first - is_font_loaded = load_font(); + m_font_list.erase(m_font_list.begin()); + is_font_loaded = load_font(); } + set_default_configuration(); + + // create default mesh to faster add new volume + // solve state when no font loaded + if (is_font_loaded) { + // create default + ExPolygons shapes = Emboss::text2shapes(*m_font, m_text.c_str(), m_font_prop); + float scale = m_font_prop.size_in_mm / m_font->ascent; + float depth = m_font_prop.emboss / scale; + auto projectZ = std::make_unique(depth); + Emboss::ProjectScale project(std::move(projectZ), scale); + m_default_mesh = TriangleMesh(Emboss::polygons2model(shapes, project)); + } else { + // When cant load any font use default object loaded from file + std::string path = Slic3r::resources_dir() + + "/data/embossed_text.stl"; + if (!load_obj(path.c_str(), &m_default_mesh)) { + // when can't load mesh use cube + m_default_mesh = TriangleMesh(its_make_cube(36., 4., 2.5)); + } + } } FontList GLGizmoEmboss::create_default_font_list() { @@ -430,10 +577,10 @@ void GLGizmoEmboss::check_selection() if (m_volume != nullptr) ImGui::ClearActiveID(); // is select embossed volume? - if (load_configuration(vol)) { + if (load_configuration(vol)) // successfull load volume for editing return; - } + // behave like adding new text m_volume = nullptr; @@ -491,6 +638,8 @@ void GLGizmoEmboss::close() { // close gizmo == open it again m_parent.get_gizmos_manager().open_gizmo(GLGizmosManager::Emboss); + m_job->stop(); + m_job->join(); // free thread resource } void GLGizmoEmboss::draw_window() @@ -718,43 +867,6 @@ void GLGizmoEmboss::draw_advanced() #endif // ALLOW_DEBUG_MODE } -bool GLGizmoEmboss::create_default_model_object() -{ - set_default_configuration(); - // Is created default model? - if (process()) return true; - - // can't create object, - // e.g. selected font don't have letter for "Emboss text" - - // try select another font - for (size_t font_index = 0; font_index < m_font_list.size(); - ++font_index) { - if (!load_font(font_index)) continue; - // Is fixed by change to font from font list? - if (process()) return true; - } - - // try add system font and use it - size_t font_index = m_font_list.size(); - m_font_list.push_back(WxFontUtils::get_os_font()); - if (!load_font(font_index)) { - // TODO: Solve wrong os font !!! - return false; - } - // Is fixed by change font to os font? - if (process()) return true; - - // try change default text - // Do NOT translate it! - m_text = u8"text"; - // Is fixed by change translation of Emboss text? - if (process()) return true; - - // Bad os font can't process "text" with os default font - return false; -} - bool GLGizmoEmboss::load_font(size_t font_index) { std::swap(font_index, m_font_selected); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.hpp b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.hpp index 5de88de68..35aa1b78b 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.hpp @@ -27,9 +27,8 @@ class GLGizmoEmboss : public GLGizmoBase { public: GLGizmoEmboss(GLCanvas3D& parent); - virtual ~GLGizmoEmboss(); - void set_volume_type(ModelVolumeType volume_type); + void create_volume(ModelVolumeType volume_type); void set_fine_position(); protected: virtual bool on_init() override; @@ -57,8 +56,6 @@ private: void draw_text_input(); void draw_advanced(); - bool create_default_model_object(); - bool load_font(); // try to set font_index bool load_font(size_t font_index); @@ -120,6 +117,7 @@ private: std::shared_ptr m_font; std::string m_text; FontProp m_font_prop; + TriangleMesh m_default_mesh; // when add new text this shape is used // thread to process object on change text std::unique_ptr m_job; diff --git a/src/slic3r/GUI/Jobs/EmbossJob.cpp b/src/slic3r/GUI/Jobs/EmbossJob.cpp index 106e57789..50de6bf44 100644 --- a/src/slic3r/GUI/Jobs/EmbossJob.cpp +++ b/src/slic3r/GUI/Jobs/EmbossJob.cpp @@ -83,58 +83,39 @@ void EmbossJob::process(std::unique_ptr input, StopCondition is_stop void Priv::finalize(const EmbossData &input, const indexed_triangle_set &result) { + GUI_App & app = wxGetApp(); // may be move to input + Plater * plater = app.plater(); + GLCanvas3D * canvas = plater->canvas3D(); + GLGizmosManager &manager= canvas->get_gizmos_manager(); + + // TODO: Solve gizmo with empty selection first + // Check emboss gizmo is still open + //if (manager.get_current_type() != GLGizmosManager::Emboss) return; + // it is sad, but there is no move constructor --> copy TriangleMesh tm(std::move(result)); // center triangle mesh Vec3d shift = tm.bounding_box().center(); tm.translate(-shift.cast()); - - GUI_App & app = wxGetApp(); - Plater * plater = app.plater(); - GLCanvas3D * canvas = plater->canvas3D(); - const std::string &name = input.volume_name; + const std::string &name = input.volume_name; plater->take_snapshot(_L("Emboss text") + ": " + name); ModelVolume *volume = input.volume_ptr; - if (volume == nullptr) { - // decide to add as volume or new object - if (input.object_idx < 0) { - // create new object - app.obj_list()->load_mesh_object(tm, name, true, &input.text_configuration); - app.mainframe->update_title(); - - // TODO: find Why ??? - // load mesh cause close gizmo, on windows but not on linux - // Open gizmo again when it is closed - GLGizmosManager &mng = canvas->get_gizmos_manager(); - if (mng.get_current_type() != GLGizmosManager::Emboss) - mng.open_gizmo(GLGizmosManager::Emboss); - return; - } else { - // create new volume inside of object - Model &model = plater->model(); - if (model.objects.size() <= input.object_idx) return; - ModelObject *obj = model.objects[input.object_idx]; - volume = obj->add_volume(std::move(tm)); - // set a default extruder value, since user can't add it manually - volume->config.set_key_value("extruder", new ConfigOptionInt(0)); - } - } else { - // update volume - volume->set_mesh(std::move(tm)); - volume->set_new_unique_id(); - volume->calculate_convex_hull(); - volume->get_object()->invalidate_bounding_box(); - } + assert(volume != nullptr); + // update volume + volume->set_mesh(std::move(tm)); + volume->set_new_unique_id(); + volume->calculate_convex_hull(); + volume->get_object()->invalidate_bounding_box(); volume->name = name; volume->text_configuration = input.text_configuration; // update volume name in object list // updata selection after new volume added // change name of volume in right panel - select_volume(volume); + //select_volume(volume); // Job promiss to refresh is not working canvas->reload_scene(true); @@ -144,19 +125,25 @@ void Priv::select_volume(ModelVolume *volume) { if (volume == nullptr) return; - ObjectList *obj_list = wxGetApp().obj_list(); + GUI_App & app = wxGetApp(); + ObjectList *obj_list = app.obj_list(); + GLCanvas3D *canvas = app.plater()->canvas3D(); // select only actual volume // when new volume is created change selection to this volume auto add_to_selection = [volume](const ModelVolume *vol) { return vol == volume; }; - const Selection &selection = - wxGetApp().plater()->canvas3D()->get_selection(); - wxDataViewItemArray sel = - obj_list->reorder_volumes_and_get_selection(selection.get_object_idx(), - add_to_selection); + + const Selection &selection = canvas->get_selection(); + int obj_idx = selection.get_object_idx(); + wxDataViewItemArray sel = obj_list->reorder_volumes_and_get_selection(obj_idx, add_to_selection); if (!sel.IsEmpty()) obj_list->select_item(sel.front()); + + if (volume->type() == ModelVolumeType::MODEL_PART) + // update printable state on canvas + canvas->update_instance_printable_state_for_object((size_t)obj_idx); + obj_list->selection_changed(); } \ No newline at end of file diff --git a/src/slic3r/GUI/Jobs/StopableJob.hpp b/src/slic3r/GUI/Jobs/StopableJob.hpp index 0b0fb5958..4a30445ed 100644 --- a/src/slic3r/GUI/Jobs/StopableJob.hpp +++ b/src/slic3r/GUI/Jobs/StopableJob.hpp @@ -55,6 +55,8 @@ public: /// Free thread resources by join thread /// Be Carefull, it is blocking until join /// Suggest to call stop() before join + /// Thread join could throw exception + /// https://en.cppreference.com/w/cpp/thread/thread/join /// void join(); protected: