Merge commit 'e9c7135f5c71cf7342518cd8071e7b2531463b8d'
commit
de7dd5e255
6
README
6
README
|
@ -17,12 +17,12 @@ SkeinPyPy:
|
||||||
BUILDING
|
BUILDING
|
||||||
========
|
========
|
||||||
|
|
||||||
./build.sh
|
./package.sh
|
||||||
|
|
||||||
The build script defaults to building for Windows. If you want to build for Mac OS X or Linux, choose one of:
|
The build script defaults to building for Windows. If you want to build for Mac OS X or Linux, choose one of:
|
||||||
|
|
||||||
./build.sh osx64
|
./package.sh osx64
|
||||||
./build.sh linux
|
./package.sh linux
|
||||||
|
|
||||||
Note that Mac OS X currently requires the manual installation of wxPython, PySerial, and PyOpenGL:
|
Note that Mac OS X currently requires the manual installation of wxPython, PySerial, and PyOpenGL:
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,8 @@ class Stk500v2(ispBase.IspBase):
|
||||||
self.serial = Serial(port, speed, timeout=1)
|
self.serial = Serial(port, speed, timeout=1)
|
||||||
except SerialException as e:
|
except SerialException as e:
|
||||||
raise ispBase.IspError("Failed to open serial port")
|
raise ispBase.IspError("Failed to open serial port")
|
||||||
|
except:
|
||||||
|
raise ispBase.IspError("Unexpected error while connecting to serial port:" + port + ":" + str(sys.exc_info()[0]))
|
||||||
self.seq = 1
|
self.seq = 1
|
||||||
|
|
||||||
#Reset the controller
|
#Reset the controller
|
||||||
|
|
|
@ -1,104 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
|
|
||||||
<defs>
|
|
||||||
<font horiz-adv-x="1025"><font-face font-family="Gentium Basic" units-per-em="2048" panose-1="2 0 5 3 6 0 0 2 0 4" ascent="1790" descent="-580" alphabetic="0"/>
|
|
||||||
<missing-glyph horiz-adv-x="1400" d="M150 50H1250V1750H150V50ZM100 1800H1300V0H100V1800Z"/>
|
|
||||||
<glyph unicode=" " glyph-name="space" horiz-adv-x="451"/>
|
|
||||||
<glyph unicode="!" glyph-name="exclam" horiz-adv-x="557" d="M390 123Q390 88 380 59T351 7T307 -27T252 -40Q198 -40 175 -11T152 72Q152 106 163 135T193 187T237 223T291 236Q341 236 365 207T390 123ZM326 389Q307 375 292 367T252 350L223 371L176 1398Q214 1423 256 1444T332 1480L375 1455L326 389Z"/>
|
|
||||||
<glyph unicode=""" glyph-name="quotedbl" horiz-adv-x="870" d="M309 834Q301 830 290 826T265 819T239 815T213 813L160 1426Q171 1432 192 1440T235 1457T278 1471T309 1480L352 1459L309 834ZM668 834Q660 830 649 826T624 819T597 815T571 813L518 1426Q529 1432 549 1440T593 1457T636 1471T668 1480L711 1459L668 834Z"/>
|
|
||||||
<glyph unicode="#" glyph-name="numbersign" horiz-adv-x="961" d="M399 590H588L661 846H473L399 590ZM806 961H957L982 936Q977 914 968 889T951 846H773L700 590H851L873 563Q868 543 861 518T845 475H667L580 170Q562 156 538 146T488 127L462 147L555 475H366L279 170Q261 156 238 146T189 127L163 147L256 475H109L87 500Q92 520 100 545T117 590H289L362 846H218L193 870Q198 892 207 916T224 961H395L478 1251Q500 1267 522 1275T566 1292L595 1270L506 961H694L777 1251Q799 1267 821 1275T867 1292L894 1270L806 961Z"/>
|
|
||||||
<glyph unicode="$" glyph-name="dollar" horiz-adv-x="961" d="M225 958Q225 920 241 892T285 840T351 799T432 763V1115Q374 1113 335 1099T271 1062T236 1013T225 958ZM727 324Q727 371 711 407T667 470T602 519T522 558V113Q562 118 599 135T664 180T710 244T727 324ZM522 -143Q513 -151 507 -155T494 -163T479 -168T459 -174L432 -152V-10Q384 -9 343 -3T263 16T185 48T102 96Q95 101 92 129T88 195T91 272T102 340L145 336Q193 233 267 180T432 114V593Q370 616 311 641T204 701T127 787T98 911Q98 953 114 1001T170 1092T273 1167T432 1210V1356Q446 1364 452 1368T463 1374T474 1378T496 1384L522 1362V1214Q568 1213 611 1207T693 1188T761 1160T811 1124Q817 1117 810 1099T788 1059T757 1016T727 983L688 991Q648 1037 606 1065T522 1105V728Q584 704 645 676T754 608T832 512T862 377Q862 317 841 255T776 140T670 48T522 -4V-143Z"/>
|
|
||||||
<glyph unicode="%" glyph-name="percent" horiz-adv-x="1413" d="M1194 289Q1194 359 1182 411T1148 497T1100 548T1044 565Q1022 565 1001 551T962 507T935 435T924 332Q924 260 935 207T965 120T1012 68T1071 51Q1096 51 1118 66T1157 111T1184 185T1194 289ZM1337 309Q1337 240 1313 179T1249 71T1156 -3T1044 -30Q986 -30 937 -3T853 70T798 178T778 309Q778 378 802 439T867 547T961 619T1071 646Q1131 646 1180 620T1264 548T1318 441T1337 309ZM358 17Q349 10 332 3T294 -11T255 -24T223 -34L199 1L1055 1188Q1083 1205 1120 1217T1188 1237L1217 1204L358 17ZM492 877Q492 948 480 1000T446 1086T398 1136T342 1153Q320 1153 299 1139T260 1095T232 1023T221 920Q221 848 232 795T262 708T309 656T369 639Q393 639 415 654T455 699T482 773T492 877ZM637 897Q637 828 613 767T549 659T455 585T342 558Q283 558 235 585T151 658T96 766T76 897Q76 966 100 1027T164 1134T258 1207T369 1234Q429 1234 478 1208T562 1135T617 1028T637 897Z"/>
|
|
||||||
<glyph unicode="&" glyph-name="ampersand" horiz-adv-x="1366" d="M444 1130Q444 1072 461 1009T508 879Q576 918 619 956T686 1031T720 1103T729 1171Q729 1206 720 1237T694 1291T650 1329T588 1343Q552 1343 525 1325T480 1276T453 1208T444 1130ZM528 84Q613 84 684 111T812 183Q762 235 709 295T606 422T509 560T425 703Q374 659 339 618T283 537T252 456T242 373Q242 303 266 249T330 159T421 103T528 84ZM1346 748Q1321 717 1297 697T1247 659Q1229 668 1206 675T1160 687T1114 696T1075 700Q1086 682 1092 667T1102 633T1107 594T1108 543Q1108 472 1077 393T989 239Q1058 173 1116 127Q1154 95 1198 85T1300 88L1309 45Q1222 7 1163 -11T1081 -30Q1059 -30 1004 10T877 119Q799 53 703 12T498 -30Q405 -30 328 -6T196 67T111 186T80 352Q80 408 100 466T158 581T252 693T380 799Q351 870 334 938T317 1073Q317 1154 344 1223T416 1342T519 1421T641 1450Q705 1450 748 1430T818 1375T856 1297T868 1204Q868 1099 803 1008T618 842Q599 830 582 819T549 796Q584 731 627 666T719 538T819 416T922 305Q954 355 970 406T987 502Q987 544 973 581T937 645T885 689T827 705L805 733Q816 746 837 761T879 784H1323L1346 748Z"/>
|
|
||||||
<glyph unicode="'" glyph-name="quotesingle" horiz-adv-x="512" d="M309 834Q301 830 290 826T265 819T239 815T213 813L160 1426Q171 1432 192 1440T235 1457T278 1471T309 1480L352 1459L309 834Z"/>
|
|
||||||
<glyph unicode="(" glyph-name="parenleft" horiz-adv-x="649" d="M578 -315Q465 -263 380 -170T237 47T150 317T121 623Q121 787 153 940T246 1222T390 1448T578 1600L610 1555Q545 1501 487 1413T386 1209T317 952T291 651Q291 505 312 367T374 108T474 -110T610 -270L578 -315Z"/>
|
|
||||||
<glyph unicode=")" glyph-name="parenright" horiz-adv-x="649" d="M530 664Q530 499 497 346T404 63T260 -163T72 -315L41 -270Q105 -216 163 -128T265 76T334 333T360 635Q360 780 339 918T278 1178T178 1396T41 1555L72 1600Q185 1549 270 1456T414 1239T501 970T530 664Z"/>
|
|
||||||
<glyph unicode="*" glyph-name="asterisk" horiz-adv-x="915" d="M489 1188L750 1384Q771 1370 799 1352T844 1317L846 1276L520 1135L821 1006Q819 981 818 947T809 891L772 868L490 1079L528 756Q517 750 504 743T477 729T449 717T424 709L385 727L427 1079L166 883Q155 890 142 898T115 916T91 933T72 950L70 993L396 1133L94 1262Q95 1274 95 1289T97 1321T100 1351T106 1376L141 1399L426 1187L387 1513Q398 1519 412 1526T440 1540T469 1552T494 1561L530 1540L489 1188Z"/>
|
|
||||||
<glyph unicode="+" glyph-name="plus" horiz-adv-x="840" d="M477 236Q457 226 433 218T387 205L362 227V507H86L61 531Q66 551 74 574T92 617H362V891Q381 897 406 906T453 920L477 897V617H754L778 593Q773 573 765 549T748 507H477V236Z"/>
|
|
||||||
<glyph unicode="," glyph-name="comma" horiz-adv-x="469" d="M390 70Q390 31 375 -18T330 -118T260 -217T166 -305L121 -270Q149 -238 168 -208T201 -146T220 -79T226 0Q226 44 197 70T104 92L88 139Q97 151 126 166T189 196T257 220T309 229Q357 206 373 167T390 70Z"/>
|
|
||||||
<glyph unicode="-" glyph-name="hyphen" horiz-adv-x="690" d="M629 546Q623 524 615 498T598 455H86L61 479Q66 501 74 525T92 570H604L629 546Z"/>
|
|
||||||
<glyph unicode="." glyph-name="period" horiz-adv-x="469" d="M369 123Q369 88 359 59T330 7T286 -27T231 -40Q177 -40 154 -11T131 72Q131 106 142 135T172 187T216 223T270 236Q320 236 344 207T369 123Z"/>
|
|
||||||
<glyph unicode="/" glyph-name="slash" horiz-adv-x="961" d="M211 -284Q201 -291 185 -298T151 -312T116 -325T86 -335L49 -310L750 1551Q777 1568 810 1580T872 1600L909 1578L211 -284Z"/>
|
|
||||||
<glyph unicode="0" glyph-name="zero" horiz-adv-x="961" d="M721 565Q721 702 700 806T642 979T559 1084T461 1120Q410 1120 369 1093T300 1008T256 860T240 645Q240 508 260 403T314 228T396 121T500 85Q552 85 593 112T662 198T706 347T721 565ZM885 602Q885 473 855 358T769 157T635 21T461 -30Q366 -30 294 20T174 157T101 358T76 602Q76 731 107 846T193 1047T327 1184T500 1235Q595 1235 667 1185T787 1049T860 848T885 602Z"/>
|
|
||||||
<glyph unicode="1" glyph-name="one" horiz-adv-x="961" d="M170 0V53Q248 62 300 73T383 97T427 120T440 143V940Q440 980 437 1002T422 1038Q416 1044 399 1048T351 1051T273 1044T160 1024L139 1075Q181 1087 238 1108T355 1153T467 1202T553 1245L590 1210V143Q590 133 601 122T640 98T716 74T840 53V0H170Z"/>
|
|
||||||
<glyph unicode="2" glyph-name="two" horiz-adv-x="961" d="M821 0H127L98 74Q217 212 305 318T457 505T561 648T626 758T659 846T668 924Q668 970 657 1010T622 1081T560 1128T467 1145Q426 1145 392 1125T333 1075T294 1007T280 934Q263 925 250 917T222 903T192 892T152 885L125 915Q125 967 160 1023T253 1127T384 1204T535 1235Q595 1235 647 1218T739 1167T800 1079T823 952Q823 907 810 862T770 765T699 650T593 511T450 337T266 121H684Q701 121 714 128T738 148T756 177T769 210Q781 249 786 299L836 287L821 0Z"/>
|
|
||||||
<glyph unicode="3" glyph-name="three" horiz-adv-x="961" d="M825 381Q825 297 798 222T718 91T587 3T406 -30Q367 -30 326 -23T243 1T157 47T68 119L102 186Q147 152 184 130T255 95T322 76T393 70Q454 70 504 89T590 145T645 232T665 348Q665 423 642 475T582 561T500 608T410 623H389Q383 623 378 622T365 620T342 616L328 676Q420 701 475 734T559 802T598 873T608 940Q608 974 598 1010T565 1077T508 1126T426 1145Q386 1145 355 1131T302 1093T273 1038T270 973Q236 956 205 947T131 934L104 965Q104 1007 135 1054T218 1142T338 1208T483 1235Q558 1235 611 1211T700 1148T751 1059T768 958Q768 920 753 883T711 812T644 749T555 698Q612 691 661 664T747 594T804 497T825 381Z"/>
|
|
||||||
<glyph unicode="4" glyph-name="four" horiz-adv-x="961" d="M585 1040L213 460H585V1040ZM874 430Q853 398 836 383T795 350H725V104Q725 96 731 90T753 76T796 60T864 43V0H375V43Q440 54 481 63T545 81T576 98T585 115V350H88L55 383L551 1174Q593 1192 626 1211T688 1245L725 1210V460H848L874 430Z"/>
|
|
||||||
<glyph unicode="5" glyph-name="five" horiz-adv-x="961" d="M836 410Q836 323 810 244T733 103T608 6T440 -30Q347 -30 256 4T78 119L113 186Q166 149 209 127T290 92T358 75T418 70Q483 70 531 95T612 161T660 256T676 367Q676 435 660 491T610 586T525 648T403 670Q382 670 355 665T299 650T240 625T184 590L137 623Q143 659 151 706T167 807T184 915T200 1023T212 1123T219 1205H655Q684 1205 706 1207T744 1214Q762 1218 776 1223L805 1194Q794 1178 780 1161T750 1127T721 1098T694 1075H307Q305 1046 300 1001T289 908T275 818T264 754Q304 766 358 773T463 780Q554 780 623 750T740 668T811 550T836 410Z"/>
|
|
||||||
<glyph unicode="6" glyph-name="six" horiz-adv-x="961" d="M500 660Q449 660 388 632T270 536Q270 417 289 331T345 187T432 103T545 75Q599 75 634 100T691 165T722 253T731 348Q731 442 709 502T652 598T578 646T500 660ZM881 412Q881 365 871 314T839 214T786 121T713 44T619 -10T506 -30Q424 -30 352 6T226 109T141 267T110 473Q110 614 150 743T275 977T486 1152T788 1249L807 1190Q689 1163 598 1109T441 982T335 825T279 650Q314 684 350 707T421 744T487 764T541 770Q622 770 685 745T791 674T858 561T881 412Z"/>
|
|
||||||
<glyph unicode="7" glyph-name="seven" horiz-adv-x="961" d="M885 1167Q839 1059 792 949T701 732T615 524T540 334T477 171T432 44Q397 19 359 1T270 -30L229 3Q316 156 385 295T513 564T625 821T733 1075H279Q264 1075 250 1074T221 1061T189 1018T150 930L104 948Q107 971 112 1006T123 1077T135 1148T147 1205H852L885 1167Z"/>
|
|
||||||
<glyph unicode="8" glyph-name="eight" horiz-adv-x="961" d="M275 950Q275 906 296 874T354 816T436 769T533 725Q606 778 636 831T667 938Q667 990 652 1028T608 1092T540 1129T451 1141Q406 1141 373 1124T319 1080T286 1018T275 950ZM707 309Q707 375 684 422T622 503T535 562T434 610Q386 575 352 542T297 473T265 399T254 315Q254 263 271 218T320 140T397 89T500 70Q555 70 594 91T659 146T695 222T707 309ZM867 352Q867 274 834 205T744 84T612 1T451 -30Q365 -30 299 -4T187 66T118 166T94 285Q94 339 112 389T165 485T248 571T357 644Q314 664 276 688T208 744T162 817T145 915Q145 984 172 1043T248 1144T361 1211T502 1235Q577 1235 635 1215T734 1160T796 1076T817 969Q817 927 802 890T759 818T695 751T613 688Q663 664 709 635T790 565T846 473T867 352Z"/>
|
|
||||||
<glyph unicode="9" glyph-name="nine" horiz-adv-x="961" d="M481 555Q550 555 608 593T709 694Q707 819 684 903T625 1037T548 1109T465 1130Q414 1130 374 1110T307 1053T265 966T250 856Q250 764 272 706T329 614T403 568T481 555ZM870 731Q870 579 829 449T704 218T492 50T190 -43L172 16Q305 49 401 103T562 228T660 388T705 577Q678 547 646 523T580 481T509 455T438 445Q358 445 296 471T190 545T123 656T100 795Q100 845 113 897T152 999T214 1091T296 1166T394 1216T506 1235Q576 1235 641 1206T758 1116T839 959T870 731Z"/>
|
|
||||||
<glyph unicode=":" glyph-name="colon" horiz-adv-x="469" d="M369 123Q369 88 359 59T330 7T286 -27T231 -40Q177 -40 154 -11T131 72Q131 106 142 135T172 187T216 223T270 236Q320 236 344 207T369 123ZM369 848Q369 813 359 784T330 732T286 698T231 685Q177 685 154 714T131 797Q131 831 142 860T172 912T216 948T270 961Q320 961 344 932T369 848Z"/>
|
|
||||||
<glyph unicode=";" glyph-name="semicolon" horiz-adv-x="469" d="M390 70Q390 31 375 -18T330 -118T260 -217T166 -305L121 -270Q149 -238 168 -208T201 -146T220 -79T226 0Q226 44 197 70T104 92L88 139Q97 151 126 166T189 196T257 220T309 229Q357 206 373 167T390 70ZM369 848Q369 813 359 784T330 732T286 698T231 685Q177 685 154 714T131 797Q131 831 142 860T172 912T216 948T270 961Q320 961 344 932T369 848Z"/>
|
|
||||||
<glyph unicode="<" glyph-name="less" horiz-adv-x="899" d="M838 322Q827 312 819 304T801 289T780 273T754 256L86 506L61 530Q61 532 61 533T62 536L65 545Q65 547 67 553L70 566L73 574Q74 577 74 580T77 587L79 595L85 613L90 625L92 629L813 899L838 874Q835 863 832 850T824 823T816 796T809 774L254 568L821 358L838 322Z"/>
|
|
||||||
<glyph unicode="=" glyph-name="equal" horiz-adv-x="899" d="M838 440Q833 419 824 397T809 355H86L61 382Q66 402 74 423T92 465H813L838 440ZM838 740Q833 720 824 696T809 655H86L61 680Q66 700 74 723T92 765H813L838 740Z"/>
|
|
||||||
<glyph unicode=">" glyph-name="greater" horiz-adv-x="899" d="M838 625Q833 606 825 577T807 524L86 256L61 281Q64 291 68 304T76 331T84 357T92 379L643 585L78 795L61 834Q84 852 105 868T145 899L815 649L838 625Z"/>
|
|
||||||
<glyph unicode="?" glyph-name="question" horiz-adv-x="887" d="M806 1165Q806 1090 783 1030T723 918T645 819T566 721T501 613T469 485L463 389Q444 375 430 366T387 348L362 369L354 485Q351 542 371 598T423 709T493 817T565 922T620 1022T642 1120Q642 1244 586 1314T424 1384Q388 1384 356 1368T298 1324T259 1261T244 1186Q244 1172 247 1157T256 1128Q224 1111 189 1103T109 1090L82 1120Q80 1128 80 1136V1153Q80 1223 114 1283T207 1387T342 1455T502 1480Q575 1480 632 1457T727 1393T786 1293T806 1165ZM539 123Q539 88 529 59T500 7T456 -27T401 -40Q347 -40 324 -11T301 72Q301 106 312 135T342 187T386 223T440 236Q490 236 514 207T539 123Z"/>
|
|
||||||
<glyph unicode="@" glyph-name="at" horiz-adv-x="1653" d="M1014 731Q986 787 952 818T858 850Q803 850 758 827T679 756T628 639T610 475Q610 390 630 321T682 202T752 127T825 100Q844 100 862 106T901 130T949 176T1014 250V731ZM1583 549Q1583 462 1564 386T1511 245T1434 130T1343 44T1248 -11T1157 -30Q1133 -30 1111 -20T1071 14T1040 73T1020 162Q979 105 948 68T886 9T825 -21T754 -30Q703 -30 651 2T556 96T487 245T460 444Q460 501 473 562T513 680T577 788T662 877T767 938T889 960Q912 960 931 957T968 943T1008 915T1055 868Q1081 884 1108 906T1163 960L1194 930Q1185 901 1179 868Q1173 839 1169 802T1164 723V285Q1164 195 1194 152T1272 109Q1297 109 1330 140T1392 226T1442 354T1463 512Q1463 680 1420 811T1301 1031T1118 1166T885 1213Q783 1213 694 1187T531 1115T400 1004T302 864T241 701T220 524Q220 403 245 299T316 108T425 -46T565 -160T727 -231T903 -255Q987 -255 1067 -238T1217 -194T1339 -138T1423 -82L1450 -137Q1414 -175 1357 -217T1224 -294T1055 -352T854 -375Q682 -375 538 -316T290 -148T128 117T70 465Q70 578 100 686T187 891T321 1069T494 1208T698 1300T924 1333Q1073 1333 1194 1283T1402 1133T1536 888T1583 549Z"/>
|
|
||||||
<glyph unicode="A" glyph-name="A" horiz-adv-x="1219" d="M758 535L582 1049L411 535H758ZM381 445L270 111Q260 80 297 66T416 43V0H0V43Q68 55 108 68T158 111L530 1237Q553 1262 587 1282T647 1317L1067 111Q1072 97 1081 86T1105 67T1143 53T1198 43V0H776V43Q854 48 884 63T903 111L789 445H381Z"/>
|
|
||||||
<glyph unicode="B" glyph-name="B" horiz-adv-x="1126" d="M413 1206Q399 1206 385 1206T355 1204V725H389Q503 725 573 747T683 805T736 884T750 971Q750 1021 734 1064T678 1138T575 1188T413 1206ZM520 650Q472 650 432 646T355 635V104Q355 96 364 89Q381 83 403 80T448 74T494 71T537 70Q609 70 667 88T766 140T830 219T852 322Q852 377 833 435T773 541T670 619T520 650ZM1016 356Q1016 271 983 203T889 86T744 12T559 -14Q537 -14 507 -14T441 -12T369 -10T297 -7Q214 -4 123 0H50V43Q118 57 156 73T195 104V1190Q157 1185 121 1180T50 1168L41 1230Q80 1241 131 1251T240 1270T356 1284T469 1290Q569 1290 650 1272T787 1218T874 1133T905 1020Q905 912 854 835T715 723Q779 711 834 678T929 597T993 487T1016 356Z"/>
|
|
||||||
<glyph unicode="C" glyph-name="C" horiz-adv-x="1098" d="M1018 211Q954 143 896 97T783 22T676 -18T571 -30Q478 -30 389 12T228 133T114 326T70 586Q70 746 118 876T250 1098T443 1240T676 1290Q784 1290 865 1261T999 1190Q1005 1185 996 1170T972 1136T939 1098T909 1067L874 1073Q823 1120 753 1150T592 1180Q558 1180 518 1168T436 1128T357 1058T290 952T243 809T225 623Q225 490 263 390T362 224T497 124T643 90Q697 90 784 127T981 256Q986 254 991 248T1002 234T1011 221T1018 211Z"/>
|
|
||||||
<glyph unicode="D" glyph-name="D" horiz-adv-x="1214" d="M453 1206Q403 1206 355 1203V154Q355 132 365 118Q379 101 419 93T537 84Q606 84 679 117T814 219T914 392T953 637Q953 770 920 875T824 1054T667 1167T453 1206ZM1123 676Q1123 551 1098 453T1029 279T930 151T810 65T683 16T559 0H50V43Q118 57 156 73T195 104V1188Q155 1183 119 1178T50 1168L41 1230Q85 1242 142 1253T264 1272T393 1285T518 1290Q657 1290 769 1249T959 1128T1080 935T1123 676Z"/>
|
|
||||||
<glyph unicode="E" glyph-name="E" horiz-adv-x="1016" d="M954 244Q946 158 934 94T913 0H50V43Q118 57 156 73T195 104V1155Q195 1167 159 1185T50 1217V1260H856L889 1235Q887 1209 883 1178T873 1116T861 1057T848 1010H803Q801 1056 795 1087T778 1136T754 1162T721 1170H355V735H760L786 707Q778 693 767 677T743 646T718 617T694 596Q679 611 662 621T622 638T569 648T496 651H355V154Q355 139 362 128T391 108T453 95T559 90H688Q734 90 766 95T824 117T869 169T911 262L954 244Z"/>
|
|
||||||
<glyph unicode="F" glyph-name="F" horiz-adv-x="979" d="M50 0V43Q118 57 156 73T195 104V1155Q195 1167 159 1185T50 1217V1260H866L897 1235Q896 1209 892 1178T883 1116T871 1057T858 1010H811Q809 1056 804 1087T788 1136T763 1162T729 1170H355V735H729L758 707Q749 693 737 677T712 646T687 617T664 596Q649 611 632 621T593 638T540 648T467 651H355V104Q355 92 393 77T530 43V0H50Z"/>
|
|
||||||
<glyph unicode="G" glyph-name="G" horiz-adv-x="1194" d="M1042 1188Q1049 1183 1040 1169T1015 1136T979 1101T946 1071L913 1077Q880 1108 845 1128T772 1160T690 1175T598 1180Q573 1180 536 1169T457 1132T374 1065T300 963T246 822T225 637Q225 498 262 395T359 225T494 124T645 90Q718 90 779 104T890 146V485Q890 496 881 506T848 527T785 547T684 567V610H1145V567Q1088 553 1064 531T1040 485V154Q966 93 908 57T800 2T707 -24T618 -30Q517 -30 419 7T244 121T118 312T70 582Q70 748 122 879T266 1102T478 1242T737 1290Q770 1290 809 1283T890 1263T970 1231T1042 1188Z"/>
|
|
||||||
<glyph unicode="H" glyph-name="H" horiz-adv-x="1339" d="M50 0V43Q118 57 156 73T195 104V1155Q195 1167 159 1185T50 1217V1260H500V1217Q432 1203 394 1186T355 1155V705H965V1155Q965 1167 929 1185T820 1217V1260H1270V1217Q1202 1203 1164 1186T1125 1155V104Q1125 92 1161 75T1270 43V0H820V43Q888 57 926 73T965 104V615H355V104Q355 92 391 75T500 43V0H50Z"/>
|
|
||||||
<glyph unicode="I" glyph-name="I" horiz-adv-x="610" d="M70 0V43Q138 57 176 73T215 104V1155Q215 1167 179 1185T70 1217V1260H520V1217Q452 1203 414 1186T375 1155V104Q375 92 411 75T520 43V0H70Z"/>
|
|
||||||
<glyph unicode="J" glyph-name="J" horiz-adv-x="625" d="M555 1217Q487 1203 449 1186T410 1155V205Q410 86 394 7T350 -128T286 -219T211 -288Q184 -310 152 -327T86 -356T24 -374T-25 -380Q-55 -380 -85 -371T-138 -349T-175 -323T-190 -300Q-190 -292 -177 -277T-146 -247T-108 -219T-74 -200Q-46 -218 -25 -229T14 -247T48 -255T84 -257Q110 -257 139 -240T193 -180T234 -60T250 133V1155Q250 1161 242 1168T213 1183T153 1199T55 1217V1260H555V1217Z"/>
|
|
||||||
<glyph unicode="K" glyph-name="K" horiz-adv-x="1184" d="M50 0V43Q118 57 156 73T195 104V1155Q195 1167 159 1185T50 1217V1260H500V1217Q432 1203 394 1186T355 1155V646L764 1128Q787 1155 793 1171T789 1196T754 1209T690 1217V1260H1110V1217Q1078 1213 1053 1209T1008 1199T972 1182T940 1155L502 671L985 127Q1003 107 1023 96T1067 81T1116 76T1167 80L1174 37Q1115 18 1056 2T948 -14Q919 -14 897 -5T854 29L355 639V104Q355 92 391 75T500 43V0H50Z"/>
|
|
||||||
<glyph unicode="L" glyph-name="L" horiz-adv-x="975" d="M944 244Q936 157 924 93T903 0H50V43Q118 57 156 73T195 104V1155Q195 1167 159 1185T50 1217V1260H500V1217Q432 1203 394 1186T355 1155V164Q355 146 363 133T393 110T450 95T541 90H684Q730 90 761 95T817 117T860 169T901 262L944 244Z"/>
|
|
||||||
<glyph unicode="M" glyph-name="M" horiz-adv-x="1651" d="M1550 1217Q1521 1217 1486 1208T1415 1181L1425 104Q1425 92 1461 75T1570 43V0H1115V43Q1183 57 1226 73T1270 104L1261 1040L823 0H774L329 1033L320 104Q320 92 356 75T465 43V0H60V43Q129 57 167 73T205 104L215 1177Q177 1199 139 1208T70 1217V1260H356Q366 1260 373 1257T386 1245T400 1220T420 1176L818 274L1200 1176Q1213 1206 1221 1223T1235 1248T1248 1258T1264 1260H1550V1217Z"/>
|
|
||||||
<glyph unicode="N" glyph-name="N" horiz-adv-x="1329" d="M50 0V43Q124 52 159 71T195 104V1149Q162 1180 126 1195T50 1217V1260H262Q277 1260 286 1258T306 1247T327 1224T358 1182L1015 276V1155Q1015 1167 983 1186T870 1217V1260H1280V1217Q1208 1207 1172 1188T1135 1155V-30Q1085 -24 1057 -10T1016 21L315 993V104Q315 92 348 73T460 43V0H50Z"/>
|
|
||||||
<glyph unicode="O" glyph-name="O" horiz-adv-x="1229" d="M983 629Q983 698 971 765T935 893T879 1005T803 1094T711 1153T604 1175Q515 1175 445 1138T326 1031T251 862T225 641Q225 529 255 429T337 254T458 134T604 90Q687 90 756 124T876 227T955 396T983 629ZM1138 647Q1138 511 1093 389T971 173T791 25T575 -30Q455 -30 361 23T203 165T104 370T70 612Q70 748 114 871T234 1087T412 1235T633 1290Q757 1290 851 1236T1009 1091T1105 885T1138 647Z"/>
|
|
||||||
<glyph unicode="P" glyph-name="P" horiz-adv-x="1071" d="M50 0V43Q118 57 156 73T195 104V1190Q158 1185 122 1180T50 1168L41 1230Q89 1243 145 1254T263 1273T386 1285T510 1290Q618 1290 705 1267T853 1199T948 1088T982 936Q982 867 963 810T911 709T836 632T749 578T658 546T573 535Q479 535 412 565L389 640Q431 621 469 616T543 610Q589 610 639 628T731 682T800 771T827 895Q827 977 798 1036T717 1132T598 1188T453 1206Q428 1206 404 1206T355 1204V104Q355 98 363 91T390 76T444 60T530 43V0H50Z"/>
|
|
||||||
<glyph unicode="Q" glyph-name="Q" horiz-adv-x="1229" d="M983 629Q983 698 971 765T935 893T879 1005T803 1094T711 1153T604 1175Q515 1175 445 1138T326 1031T251 862T225 641Q225 529 255 429T337 254T458 134T604 90Q687 90 756 124T876 227T955 396T983 629ZM1282 -117Q1258 -161 1233 -195T1184 -254T1139 -292T1102 -305Q1040 -305 980 -275T859 -201T740 -110T620 -27Q597 -30 575 -30Q465 -30 372 21T212 159T108 363T70 612Q70 748 114 871T234 1087T412 1235T633 1290Q757 1290 851 1236T1009 1091T1105 885T1138 647Q1138 541 1110 442T1032 260T914 112T765 12Q811 -12 856 -42T945 -98T1030 -142T1108 -160Q1120 -160 1133 -156T1164 -143T1203 -119T1255 -82L1282 -117Z"/>
|
|
||||||
<glyph unicode="R" glyph-name="R" horiz-adv-x="1149" d="M50 0V43Q118 57 156 73T195 104V1189Q160 1184 124 1179T50 1168L41 1230Q88 1242 136 1252T236 1271T345 1285T469 1290Q585 1290 671 1267T814 1203T899 1107T927 987Q927 915 907 857T849 753T759 676T645 625L948 139Q963 117 980 104T1019 85T1067 78T1128 80L1139 37Q1073 15 1014 1T915 -14Q886 -14 859 2T817 41L514 602Q501 600 488 600H461Q435 600 409 602T355 611V104Q355 92 391 75T500 43V0H50ZM432 1206Q394 1206 355 1203V691Q382 686 402 685T444 684Q602 684 687 753T772 956Q772 1011 753 1057T692 1136T586 1187T432 1206Z"/>
|
|
||||||
<glyph unicode="S" glyph-name="S" horiz-adv-x="975" d="M885 377Q885 332 873 285T837 193T776 107T690 36T578 -12T440 -30Q407 -30 368 -23T288 -4T207 27T131 68Q124 72 121 102T117 172T120 255T131 324L172 319Q195 260 229 217T306 146T396 104T496 90Q541 90 586 108T668 159T727 233T750 324Q750 385 723 429T653 507T553 568T439 622T324 679T225 749T154 841T127 967Q127 998 136 1034T165 1106T216 1175T292 1234T395 1275T526 1290Q571 1290 616 1283T701 1264T773 1235T823 1198Q830 1192 824 1175T804 1137T774 1096T745 1065L709 1071Q681 1104 651 1126T589 1163T526 1184T467 1190Q411 1190 372 1173T307 1131T269 1074T257 1014Q257 967 284 931T355 864T455 806T571 750T686 686T787 608T858 508T885 377Z"/>
|
|
||||||
<glyph unicode="T" glyph-name="T" horiz-adv-x="1128" d="M307 0V43Q353 52 384 62T435 81T462 99T471 115V1170H172Q157 1170 145 1165T120 1141T91 1088T53 995L10 1014Q15 1073 23 1140T43 1260H1053L1083 1235Q1081 1184 1073 1124T1053 1000H1008Q998 1046 991 1078T973 1131T950 1161T915 1170H631V115Q631 102 667 82T795 43V0H307Z"/>
|
|
||||||
<glyph unicode="U" glyph-name="U" horiz-adv-x="1339" d="M1275 1217Q1207 1203 1169 1186T1130 1155V524Q1130 393 1098 290T1006 116T860 8T666 -30Q563 -30 477 -2T328 85T230 233T195 444V1155Q195 1167 159 1185T50 1217V1260H500V1217Q432 1203 394 1186T355 1155V494Q355 398 377 322T444 194T554 113T705 85Q776 85 831 119T923 210T980 337T1000 483V1155Q1000 1167 964 1185T855 1217V1260H1275V1217Z"/>
|
|
||||||
<glyph unicode="V" glyph-name="V" horiz-adv-x="1331" d="M1290 1217Q1222 1204 1184 1192T1135 1151L752 59Q744 37 725 22T682 -4T637 -21T602 -30L162 1151Q152 1177 118 1193T20 1217V1260H455V1217Q375 1211 346 1197T327 1153L680 203L1016 1151Q1027 1180 992 1193T874 1217V1260H1290V1217Z"/>
|
|
||||||
<glyph unicode="W" glyph-name="W" horiz-adv-x="1741" d="M1702 1217Q1658 1208 1629 1200T1583 1185T1559 1170T1550 1155L1321 59Q1316 38 1300 23T1262 -3T1219 -20T1182 -30L856 944L569 59Q562 38 545 23T507 -2T462 -19T418 -30L158 1147Q153 1172 122 1188T20 1217V1260H449V1217Q400 1212 372 1205T330 1188T314 1169T313 1147L512 250L836 1260H891L1245 250L1432 1155Q1434 1167 1423 1176T1391 1192T1341 1205T1278 1217V1260H1702V1217Z"/>
|
|
||||||
<glyph unicode="X" glyph-name="X" horiz-adv-x="1260" d="M778 0V43Q822 47 849 53T888 69T899 93T883 127L604 535L352 127Q324 83 356 66T481 43V0H31V43Q96 48 142 66T213 127L530 644L197 1133Q182 1155 168 1169T137 1192T97 1206T41 1217V1260H492V1217Q407 1209 381 1193T385 1133L632 770L858 1133Q872 1156 870 1170T851 1194T803 1209T727 1217V1260H1180V1217Q1144 1213 1116 1208T1065 1193T1027 1169T997 1133L706 662L1071 127Q1086 106 1101 92T1135 68T1177 53T1229 43V0H778Z"/>
|
|
||||||
<glyph unicode="Y" glyph-name="Y" horiz-adv-x="1217" d="M360 0V43Q451 62 487 81T524 115V537Q487 618 440 706T344 877T249 1031T168 1151Q159 1162 148 1172T118 1189T73 1201T4 1206L0 1249Q59 1257 118 1263T219 1270Q265 1270 297 1231Q334 1183 377 1118T463 979T547 829T623 680L891 1151Q906 1177 882 1192T780 1217V1260H1176V1217Q1107 1204 1071 1191T1020 1151L684 541V115Q684 109 692 101T720 82T771 62T850 43V0H360Z"/>
|
|
||||||
<glyph unicode="Z" glyph-name="Z" horiz-adv-x="1071" d="M991 293Q989 261 988 222T985 144T982 67T979 0H88L59 45L770 1160H311Q295 1160 276 1149T239 1114T205 1053T178 963L121 975L150 1276Q177 1270 199 1267T243 1262T288 1260H956L981 1217L276 100H799Q820 100 837 109T869 142T901 205T936 307L991 293Z"/>
|
|
||||||
<glyph unicode="[" glyph-name="bracketleft" horiz-adv-x="631" d="M590 -249Q585 -269 577 -293T561 -335H140V1600H555L588 1574Q583 1549 575 1523T561 1485H280V-220H555L590 -249Z"/>
|
|
||||||
<glyph unicode="\" glyph-name="backslash" horiz-adv-x="961" d="M870 -335Q858 -331 842 -325T810 -313T780 -299T756 -284L55 1578L92 1600Q150 1585 205 1551L905 -310L870 -335Z"/>
|
|
||||||
<glyph unicode="]" glyph-name="bracketright" horiz-adv-x="631" d="M76 -335L43 -306Q46 -283 53 -258T68 -220H350V1485H76L41 1511Q44 1533 52 1558T68 1600H490V-335H76Z"/>
|
|
||||||
<glyph unicode="^" glyph-name="asciicircum" horiz-adv-x="1008" d="M907 635Q882 612 859 597T801 565L764 592L481 1315L231 635Q220 625 206 615T177 595T148 578T123 565L100 592L422 1462Q434 1474 451 1486T487 1511T523 1533T555 1550L907 635Z"/>
|
|
||||||
<glyph unicode="_" glyph-name="underscore" horiz-adv-x="961" d="M897 -156Q892 -177 884 -202T868 -246H86L61 -219Q66 -199 74 -175T92 -131H874L897 -156Z"/>
|
|
||||||
<glyph unicode="`" glyph-name="grave" horiz-adv-x="653" d="M438 1078Q429 1070 414 1061T382 1047L30 1424L52 1465Q62 1467 81 1470T122 1478T165 1485T198 1489L438 1078Z"/>
|
|
||||||
<glyph unicode="a" glyph-name="a" horiz-adv-x="940" d="M352 100Q412 100 479 130T623 227V486Q539 472 485 459T395 433T339 404T302 372Q276 345 260 311T244 229Q244 189 256 164T285 125T320 105T352 100ZM926 82Q841 23 786 -3T702 -30Q669 -30 647 16T623 143Q578 98 533 65T445 11T364 -20T293 -30Q257 -30 219 -18T151 20T100 87T80 186Q80 262 106 313T170 401Q194 425 224 446T305 488T432 526T623 561V702Q623 736 615 765T588 816T537 849T455 860Q423 859 392 849T338 821T302 779T292 724Q293 715 272 704T221 683T163 669T122 667L108 706Q131 756 178 802T285 883T413 939T544 960Q654 960 713 903T773 742V178Q773 136 784 118T813 100Q827 100 849 105T911 127L926 82Z"/>
|
|
||||||
<glyph unicode="b" glyph-name="b" horiz-adv-x="1040" d="M950 492Q950 434 935 373T891 254T820 144T725 54T607 -7T469 -30Q450 -30 417 -22T340 3T245 42T140 96V1296Q140 1342 135 1367T116 1404T77 1421T10 1430V1470Q76 1486 136 1502T253 1550L263 1540Q269 1534 275 1529Q282 1523 290 1516V727Q340 787 389 831T484 903T569 946T637 960Q705 960 762 928T861 836T926 688T950 492ZM815 408Q815 508 795 585T740 716T660 797T567 825Q549 825 520 815T453 780T374 714T290 610V203Q330 173 371 153T450 122T518 105T567 100Q628 100 674 126T751 196T799 295T815 408Z"/>
|
|
||||||
<glyph unicode="c" glyph-name="c" horiz-adv-x="895" d="M840 190Q775 113 726 70T634 4T552 -24T465 -30Q392 -30 323 2T199 96T113 245T80 444Q80 552 119 646T227 809T389 919T590 960Q623 960 657 955T723 939T781 914T825 881Q827 869 822 847T808 801T788 754T768 717L731 727Q723 745 705 766T659 806T591 837T500 850Q447 850 399 827T313 756T253 639T230 475Q230 390 255 321T323 202T421 127T537 100Q565 100 589 102T641 118T707 157T801 231L840 190Z"/>
|
|
||||||
<glyph unicode="d" glyph-name="d" horiz-adv-x="1065" d="M1051 84Q1005 53 970 32T908 -3T862 -23T829 -30Q796 -30 775 15T747 169Q709 123 672 86T595 24T511 -16T416 -30Q360 -30 301 2T193 96T112 245T80 444Q80 501 95 562T140 680T211 788T305 877T419 938T551 960Q598 960 644 949T745 897V1274Q745 1329 742 1361T725 1411T682 1435T600 1446V1485Q682 1496 747 1514T864 1550L895 1520V254Q895 219 896 194T901 152T908 124T918 106Q927 95 952 99T1038 127L1051 84ZM745 261V730Q712 787 652 818T520 850Q456 850 403 827T312 756T252 639T230 475Q230 390 254 321T317 202T400 127T487 100Q521 100 554 114T619 150T682 202T745 261Z"/>
|
|
||||||
<glyph unicode="e" glyph-name="e" horiz-adv-x="946" d="M496 855Q444 855 401 835T324 779T268 692T236 580H664Q687 580 694 587T702 616Q702 643 695 683T665 762T602 828T496 855ZM866 557Q848 537 818 520T756 490H230Q231 412 251 342T310 218T403 132T526 100Q557 100 586 104T650 122T725 163T823 236Q836 229 845 216T860 195Q793 122 743 78T648 9T560 -22T465 -30Q388 -30 319 3T196 96T112 242T80 434Q80 501 95 566T138 689T208 796T301 881Q323 896 350 910T408 936T467 953T524 960Q589 960 640 942T729 894T793 823T835 737T859 646T866 557Z"/>
|
|
||||||
<glyph unicode="f" glyph-name="f" horiz-adv-x="637" d="M817 1454Q817 1446 803 1430T768 1397T727 1365T690 1343Q666 1364 642 1379T595 1405T553 1420T520 1425Q494 1425 465 1408T410 1344T367 1219T350 1016V930H608L637 901Q628 887 615 871T588 841T561 816T539 800Q516 812 473 823T350 835V102Q350 96 360 90T396 78T460 63T559 43V0H60V43Q129 55 164 72T200 102V835H66L45 863L123 930H200V961Q200 1079 216 1159T259 1295T323 1388T399 1458Q426 1480 458 1497T521 1526T581 1544T629 1550Q660 1550 693 1538T753 1511T799 1479T817 1454Z"/>
|
|
||||||
<glyph unicode="g" glyph-name="g" horiz-adv-x="999" d="M690 600Q690 653 673 700T621 783T535 839T416 860Q391 860 361 847T303 809T258 746T240 659Q240 606 256 559T306 476T391 421T514 400Q543 400 574 412T631 450T673 513T690 600ZM518 -4Q480 0 448 5T388 16Q316 -23 275 -54T212 -109T186 -154T180 -190Q180 -232 208 -269T283 -334T392 -378T522 -395Q589 -395 644 -377T738 -328T798 -253T820 -157Q820 -129 807 -106T760 -63T668 -29T518 -4ZM830 641Q830 564 796 501T705 392T578 321T434 295H430Q382 255 364 229T346 196Q346 184 356 173T395 151T474 130T602 110Q711 98 782 74T895 19T953 -49T970 -120Q970 -175 949 -224T892 -316T807 -392T702 -450T586 -487T467 -500Q420 -500 370 -494T271 -473T179 -438T102 -386T50 -317T30 -229Q30 -203 39 -175T78 -113T159 -42T297 42Q232 65 207 94T182 153Q182 161 187 174T207 207T251 252T326 309Q275 323 234 349T163 413T117 498T100 602Q100 675 133 740T220 854T343 931T485 960Q545 960 597 943T693 895Q745 900 787 908T862 925T922 943T969 960L989 930Q977 902 966 879T932 830Q894 823 858 819T775 813Q801 775 815 732T830 641Z"/>
|
|
||||||
<glyph unicode="h" glyph-name="h" horiz-adv-x="1130" d="M670 0V43Q742 62 776 76T810 104V633Q810 694 803 732T779 792T739 822T682 830Q647 830 607 812T522 759T433 672T345 549V104Q345 89 382 73T485 43V0H55V43Q121 60 158 73T195 104V1298Q195 1340 192 1363T174 1400T131 1418T55 1430V1470Q97 1478 131 1486T195 1503T252 1524T308 1550L345 1516V684Q388 748 440 799T546 886T649 941T739 960Q782 960 822 947T892 907T941 839T960 741V104Q960 90 990 77T1100 43V0H670Z"/>
|
|
||||||
<glyph unicode="i" glyph-name="i" horiz-adv-x="555" d="M70 0V43Q138 57 174 73T210 104V670Q210 721 208 752T193 801T152 827T70 840V880Q101 886 135 894T204 913T269 936T326 960H360V104Q360 92 393 75T500 43V0H70ZM390 1261Q390 1233 381 1208T357 1165T320 1135T274 1124Q229 1124 210 1149T190 1220Q190 1248 199 1273T224 1316T260 1345T305 1356Q390 1356 390 1261Z"/>
|
|
||||||
<glyph unicode="j" glyph-name="j" horiz-adv-x="530" d="M355 99Q355 -16 341 -96T301 -233T240 -329T165 -400Q138 -421 108 -439T48 -471T-8 -492T-54 -500Q-85 -500 -114 -493T-167 -474T-205 -451T-220 -431Q-220 -422 -206 -407T-171 -374T-130 -342T-93 -320Q-61 -348 -27 -356T45 -365Q74 -365 102 -347T154 -282T191 -157T205 43V670Q205 721 203 752T187 800T146 826T65 840V880Q107 887 139 896T201 914T258 935T318 960H355V99ZM385 1261Q385 1233 376 1208T352 1165T315 1135T270 1124Q225 1124 205 1149T185 1220Q185 1248 194 1273T218 1316T255 1345T300 1356Q385 1356 385 1261Z"/>
|
|
||||||
<glyph unicode="k" glyph-name="k" horiz-adv-x="1024" d="M55 0V43Q121 60 158 73T195 104V1296Q195 1342 190 1367T169 1404T126 1421T55 1430V1470Q124 1484 190 1502T308 1550L345 1516V530L653 799Q686 828 693 845T691 872T659 884T610 887V930H989V887Q945 882 908 871T829 825L488 552L864 111Q878 95 893 85T926 68T966 61T1018 61L1024 18Q995 11 967 6T914 -2T870 -8T840 -10Q798 -10 773 2T725 43L345 522V104Q345 96 348 90T363 78T396 63T455 43V0H55Z"/>
|
|
||||||
<glyph unicode="l" glyph-name="l" horiz-adv-x="555" d="M60 0V43Q103 50 132 57T178 72T202 88T210 104V1296Q210 1341 204 1366T182 1403T139 1420T70 1430V1470Q142 1484 202 1501T324 1550L360 1516V104Q360 89 394 73T510 43V0H60Z"/>
|
|
||||||
<glyph unicode="m" glyph-name="m" horiz-adv-x="1645" d="M1186 0V43Q1258 62 1291 76T1325 104V633Q1325 694 1319 734T1299 798T1264 830T1212 840Q1179 840 1142 822T1066 769T988 685T910 573V104Q910 90 941 77T1051 43V0H621V43Q693 62 726 76T760 104V633Q760 694 754 734T735 798T700 830T647 840Q579 840 505 770T345 573V104Q345 89 382 73T485 43V0H55V43Q121 60 158 73T195 104V711Q195 751 192 774T174 809T131 828T55 840V880Q93 886 125 894T186 913T241 935T295 960L330 925L341 696Q386 762 432 811T523 894T610 943T688 960Q736 960 776 949T846 910T893 837T910 725V704Q952 767 997 814T1086 894T1173 943T1253 960Q1301 960 1341 947T1411 907T1458 839T1475 741V104Q1475 90 1506 77T1616 43V0H1186Z"/>
|
|
||||||
<glyph unicode="n" glyph-name="n" horiz-adv-x="1130" d="M670 0V43Q742 62 776 76T810 104V633Q810 694 803 732T781 792T742 822T682 830Q651 830 613 815T532 767T441 681T345 549V104Q345 89 382 73T485 43V0H55V43Q121 60 158 73T195 104V711Q195 750 192 773T176 809T134 828T55 840V880Q123 891 181 911T295 960L330 925L341 676Q385 743 438 795T545 884T649 940T739 960Q782 960 822 947T892 907T941 839T960 741V104Q960 90 990 77T1100 43V0H670Z"/>
|
|
||||||
<glyph unicode="o" glyph-name="o" horiz-adv-x="1030" d="M795 455Q795 534 769 605T702 731T609 818T506 850Q430 850 378 821T295 742T249 622T235 473Q235 394 263 323T333 197T427 112T524 80Q595 80 646 106T730 182T779 300T795 455ZM950 485Q950 418 933 354T886 233T814 128T722 44T614 -10T496 -30Q401 -30 325 6T194 105T110 255T80 444Q80 510 96 574T142 695T213 801T305 885T414 940T535 960Q629 960 705 924T836 825T920 674T950 485Z"/>
|
|
||||||
<glyph unicode="p" glyph-name="p" horiz-adv-x="1085" d="M870 426Q870 513 850 588T795 718T716 804T623 835Q605 835 576 824T510 787T431 718T345 610V213Q390 179 428 157T500 123T564 105T621 100Q675 100 720 121T799 183T851 285T870 426ZM1005 492Q1005 434 990 373T949 254T887 144T809 54T719 -7T623 -30Q564 -30 490 3T345 98V-375Q345 -391 382 -407T514 -437V-480H55V-437Q121 -421 158 -407T195 -375V711Q195 748 191 772T173 810T131 831T55 840V880Q89 887 120 895T180 913T237 934T295 960L330 925L339 727Q389 787 439 831T536 903T621 946T690 960Q758 960 816 928T916 836T981 688T1005 492Z"/>
|
|
||||||
<glyph unicode="q" glyph-name="q" horiz-adv-x="1055" d="M487 100Q521 100 554 114T619 150T682 202T745 261V730Q712 787 652 818T520 850Q464 850 412 827T320 756T255 639T230 475Q230 390 254 321T317 202T400 127T487 100ZM575 -480V-437Q669 -423 707 -408T745 -375V166Q707 120 670 84T594 23T511 -16T416 -30Q360 -30 301 2T193 96T112 245T80 444Q80 532 108 606T176 737T263 835T344 895Q401 926 457 943T551 960Q578 960 605 957T660 943T718 915T782 867Q797 876 813 888T844 913T872 938T895 960L926 930Q917 902 910 869Q904 840 900 801T895 717V-375Q895 -391 926 -407T1034 -437V-480H575Z"/>
|
|
||||||
<glyph unicode="r" glyph-name="r" horiz-adv-x="811" d="M770 923Q779 917 779 888T771 821T751 743T727 676H684Q678 716 667 744T642 788T610 812T573 820Q551 820 522 802T461 744T400 643T345 496V104Q345 89 382 73T514 43V0H55V43Q121 58 158 72T195 104V686Q195 719 193 741T188 778T181 800T172 813Q165 820 157 824T135 832T102 836T55 840V880Q120 897 182 914T295 960L330 925L343 698Q370 753 401 801T469 884T544 940T627 960Q659 960 696 952T770 923Z"/>
|
|
||||||
<glyph unicode="s" glyph-name="s" horiz-adv-x="791" d="M700 283Q700 212 680 162T628 76T557 20T480 -12T409 -26T356 -30Q308 -30 241 -12T106 43Q99 46 97 75T95 143T101 221T113 283L156 272Q158 230 178 193T231 129T309 86T406 70Q442 70 472 81T524 113T558 163T570 227Q570 267 549 298T492 354T413 402T322 449Q280 470 241 494T172 548T123 615T104 700Q104 762 129 810T195 892T290 942T401 960Q432 960 469 955T543 939T612 915T664 883Q670 877 666 856T652 810T631 763T614 733L575 741Q527 813 476 841T375 870Q342 870 316 859T272 831T244 792T234 750Q234 718 253 693T303 645T373 602T455 559Q498 537 542 512T621 455T678 381T700 283Z"/>
|
|
||||||
<glyph unicode="t" glyph-name="t" horiz-adv-x="705" d="M676 117Q627 81 579 54T488 8T407 -20T344 -30Q309 -30 278 -17T222 25T184 103T170 221V835H41L20 863L98 930H170V1176L289 1280L320 1255V930H647L676 901Q667 887 654 871T626 841T599 816T575 800Q551 812 502 823T372 835H320V307Q320 247 325 207T344 144T377 110T428 100Q463 100 516 114T647 168L676 117Z"/>
|
|
||||||
<glyph unicode="u" glyph-name="u" horiz-adv-x="1085" d="M1069 82Q1032 58 998 38T935 2T884 -21T850 -30Q815 -30 793 16T765 166Q703 104 652 66T557 6T477 -22T408 -30Q361 -30 318 -17T242 30T190 125T170 279V711Q170 759 167 785T152 825T113 844T41 854V894Q77 898 108 904T169 918T229 936T292 960L320 921V334Q320 264 330 217T360 142T408 102T473 90Q505 90 538 99T607 129T682 182T765 262V711Q765 756 761 783T741 825T699 846T625 854V894Q697 903 763 922T885 960L915 921V254Q915 192 919 153T938 104Q950 96 979 100T1059 127L1069 82Z"/>
|
|
||||||
<glyph unicode="v" glyph-name="v" horiz-adv-x="1010" d="M989 887Q959 880 940 874T909 861T891 844T879 819L596 59Q587 37 570 22T533 -4T494 -21T461 -30L131 819Q122 847 96 861T20 887V930H406V887Q367 882 343 877T305 865T289 846T293 819L539 178L770 819Q775 834 774 844T760 862T726 875T666 887V930H989V887Z"/>
|
|
||||||
<glyph unicode="w" glyph-name="w" horiz-adv-x="1446" d="M1425 887Q1394 880 1376 874T1348 861T1333 846T1325 825L1104 59Q1098 37 1081 22T1042 -4T1001 -21T967 -30L729 648L524 59Q516 36 500 21T463 -5T424 -21T391 -30L129 825Q120 864 20 887V930H406V887Q357 882 330 876T291 861T279 843T281 825L469 190L715 930H784L1044 190L1217 825Q1223 848 1196 862T1100 887V930H1425V887Z"/>
|
|
||||||
<glyph unicode="x" glyph-name="x" horiz-adv-x="1030" d="M614 0V43Q639 45 661 49T695 62T708 87T688 131L490 400L301 131Q282 104 286 88T307 62T349 49T399 43V0H20V43Q60 49 88 58T135 80T168 107T193 137L436 475L201 797Q188 815 175 830T144 857T98 876T31 887V930H451V887Q420 884 398 879T364 864T353 839T373 799L534 577L688 799Q706 823 708 839T700 864T667 879T614 887V930H995V887Q914 881 870 858T799 797L589 502L856 137Q868 122 882 108T914 80T958 57T1016 43V0H614Z"/>
|
|
||||||
<glyph unicode="y" glyph-name="y" horiz-adv-x="1010" d="M989 887Q959 880 940 874T909 861T891 844T879 819L545 -82Q503 -193 452 -272T345 -401T233 -476T127 -500Q89 -500 57 -495T2 -483T-34 -466T-47 -447Q-47 -441 -35 -423T-5 -384T33 -342T70 -312Q118 -340 165 -342T250 -330Q268 -324 292 -302T340 -248T388 -176T430 -92L459 -23L131 819Q122 847 96 861T20 887V930H406V887Q367 882 343 877T305 865T289 846T293 819L539 182L770 819Q775 834 772 844T755 862T717 875T655 887V930H989V887Z"/>
|
|
||||||
<glyph unicode="z" glyph-name="z" horiz-adv-x="905" d="M829 248Q829 216 828 180T826 110T822 47T817 0H102L76 45L631 840H285Q269 840 253 834T221 812T192 766T168 690L119 702L137 946Q159 940 177 937T214 932T257 930H805L827 887L270 90H692Q717 90 738 128T782 258L829 248Z"/>
|
|
||||||
<glyph unicode="{" glyph-name="braceleft" horiz-adv-x="688" d="M649 1553Q610 1529 577 1498T518 1430T479 1348T465 1252Q465 1194 471 1157T485 1088T499 1018T506 923Q506 881 494 841T458 765T402 700T326 653Q376 644 410 622T466 565T496 486T506 385Q506 325 500 283T486 204T472 130T465 43Q465 -12 472 -54T499 -131T552 -195T639 -254L616 -315Q532 -281 472 -244T374 -160T317 -57T299 72Q299 131 305 169T319 243T333 319T340 422Q340 503 300 544T184 586H163Q157 586 152 586T141 584T119 580L102 633Q220 664 280 726T340 863Q340 903 337 932T330 984T320 1028T310 1072T302 1124T299 1195Q299 1262 321 1321T386 1431T488 1524T623 1600L649 1553Z"/>
|
|
||||||
<glyph unicode="|" glyph-name="bar" horiz-adv-x="469" d="M320 -353Q302 -369 271 -383T215 -405L180 -382V1621Q208 1638 231 1650T284 1670L320 1648V-353Z"/>
|
|
||||||
<glyph unicode="}" glyph-name="braceright" horiz-adv-x="688" d="M588 651Q469 620 410 560T350 422Q350 381 353 353T360 301T369 258T379 215T386 162T389 92Q389 24 367 -35T302 -145T200 -238T66 -315L39 -266Q78 -242 111 -212T170 -144T209 -62T223 35Q223 93 217 129T204 198T190 268T184 365Q184 406 196 446T231 521T288 584T365 631Q314 641 280 663T224 720T193 800T184 902Q184 961 190 1003T203 1082T217 1156T223 1242Q223 1298 216 1341T189 1418T135 1481T49 1539L72 1600Q156 1567 216 1530T315 1446T371 1344T389 1215Q389 1156 383 1117T370 1043T356 967T350 865Q350 784 390 742T506 700H525Q531 700 536 700T548 702L571 707L588 651Z"/>
|
|
||||||
<glyph unicode="~" glyph-name="asciitilde" horiz-adv-x="999" d="M950 774Q929 725 897 673T826 577T741 505T647 477Q605 477 558 502T463 557T367 612T276 637Q227 637 186 598T102 475L49 502Q70 551 102 603T174 699T259 771T352 799Q398 799 446 774T542 719T635 664T721 639Q769 639 812 678T897 799L950 774Z"/>
|
|
||||||
</font>
|
|
||||||
</defs>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 40 KiB |
|
@ -1,5 +0,0 @@
|
||||||
P6
|
|
||||||
# CREATOR: The GIMP's PNM Filter Version 1.0
|
|
||||||
27 27
|
|
||||||
255
|
|
||||||
痿麴篌痼箴篌痼箴篌痼箴篌痼箴篌痼箴篌痼箴篌痼箴篌痼箴篌痼箴篌痼箴篌痼箴篌痼箴篌痼箴篌铗蝾蝌铗蝾蝌铗蝾蝌铗蝾蝌铗蝾蝌铗蝾蝌铗蝾蝌铗蝾蝌铗蝾蝌铗蝾蝌铗蝾蝌铗蝾蝌铗蝾蝌痼箢蝌铗蝾蝌铗蝾蝌铗蝾蝌铗蝽耨儇Z溻H铎M躞P黪R趄R盱c彘殚眄眈耦蝌铗蝾蝌铗蝾蝌铗蝾蝌痼箢蝌铗蝾蝌铗蝾蝌铗蝽耨苻<EFBFBD>訡驿H镯M黪R<EFBFBD>V<EFBFBD><EFBFBD>\<5C><>k<EFBFBD><6B>\躞T徕︿梃腼镯耨铗蝾蝌铗蝾蝌铗蝠篌铗蝾蝌铗蝾蝌铗蝾蝌腼镂虭噢E腴K躞P<E8BA9E>V<EFBFBD><56>~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>~躞T性糟珑腼镱蝌铗蝾蝌铗蝾蝌痼箢蝌铗蝾蝌铗蝾蝌眈衲肦终@汜F铎L<E9938E>S<EFBFBD><53>\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\邃\性凿梃眈耦蝌铗蝾蝌铗蝠篌铗蝾蝌铗蝾蝌铗蜷眄拿:字@溻G镯M<E995AF>T<EFBFBD><54>k<EFBFBD><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>齓<EFBFBD><E9BD93><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>k蝠Q航劫苘轫眍蝌铗蝾蝌铗蝠篌铗蝾蝌铗蝾蝌铗蝈殚瞧:终@汜F铎L<E9938E>S<EFBFBD><53>\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\躞Qⅴニ舷彘轭蝌铗蝾蝌铗蝠篌铗蝾蝌铗蝾蝌铗蜞滗颇9砸?噢E腴K躞P<E8BA9E>V<EFBFBD><56>~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>~<7E>V躞P敆椕破噤漕蝌铗蝾蝌铗蝠篌铗蝾蝌铗蝾蝌铗蜣忖烤6贤=圪B驿H镯M黪R<E9BBAA>V<EFBFBD><56>\<5C><>k<EFBFBD><6B>\<5C>V黪R礻K帎惥侣掴忸蝌铗蝾蝌铗蝠篌铗蝾蝌铗蝾蝌铗蜣忖悲4惹:沼?咻D桄I镯M躞P<E8BA9E>S<EFBFBD>T<EFBFBD>S躞P镯M噢E帎惥侣掴忸蝌铗蝾蝌铗蝠篌铗蝾蝌铗蝾蝌铗蜣忖ⅱC揽7淌<终@咻D驿H腴K铎L镯M铎L腴K驿H颇G帎惥侣掴忸蝌铗蝾蝌铗蝠篌铗蝾蝌铗蝾蝌铗蜞滗闷譬<E997B7>2吕8淌<沼?圪B噢E汜F溻G汜F噢E严@rtt敆椕破噤漕蝌铗蝾蝌铗蝠篌铗蝾蝌铗蝾蝌铗蝈殚讼蠝漺é2研@篑R<E7AF91>齓趄S驽W<E9A9BD>齓趄S汕=妸V}ⅴニ舷彘轭蝌铗蝾蝌铗蝠篌铗蝾蝌铗蝾蝌铗蜷眄佘芎浇摉栟蹸驿H痤N<E797A4>W蝌t<E89D8C><74>祖錖fggwyy摉柡浇佘荛眄铗蝾蝌铗蝾蝌痼箢蝌铗蝾蝌铗蝾蝌眈皲梃性辕膊捃C腴J鲷Q<E9B2B7>齓<EFBFBD><E9BD93><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>齓rtt帎惎膊性凿梃眈耦蝌铗蝾蝌铗蝠篌铗蝾蝌铗蝾蝌铗蝾蝌腼镢珑释娃蹸腴J鲷Q<E9B2B7>齓<EFBFBD><E9BD93><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>齓亙儴<E4BA99>释豌珑腼镱蝌铗蝾蝌铗蝾蝌痼箢蝌铗蝾蝌铗蝾蝌铗蝽耨腼镔苘捃C腴J鲷Q<E9B2B7>齓<EFBFBD><E9BD93><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>齓墝尫汉佘茈镲眈耦蝌铗蝾蝌铗蝾蝌痼箢蝌铗蝾蝌铗蝾蝌铗蝾蝌铗蜣忖儍儧洓北蹦哪佑狱<E4BD91>佑訋悙搅赁忖铗蝾蝌铗蝾蝌铗蝾蝌铗蝠篌铗蝾蝌铗蝾蝌铗蝾蝌铗蝾蝌掴鈲帋櫄毈<E6AB84><E6AF88><EFBFBD>汉仝诮浇悞捒妹掴忸蝌铗蝾蝌铗蝾蝌铗蝾蝌痼箢蝌铗蝾蝌铗蝾蝌铗蝾蝌铗蜻沣媼嫐殮<E5AB90><E6AEAE>浇怂笋耨烫虛晻烂眠沣铗蝾蝌铗蝾蝌铗蝾蝌铗蝠篌铗蝾蝌铗蝾蝌铗蝾蝌铗蝾蝌噤鋺拻殯洡い抖叮い醒崖妹櫆溍破噤漕蝌铗蝾蝌铗蝾蝌铗蝾蝌痼箢蝌铗蝾蝌铗蝾蝌铗蝾蝌铗蜮骀陡笡洓<E7ACA1><E6B493>览旅娩滗Ж<E6BB97>牋粕舍邋铗蝾蝌铗蝾蝌铗蝾蝌铗蝠篌铗蝾蝌铗蝾蝌铗蝾蝌铗蝾蝌彘樯屯洓洷北哪挠佑<E68CA0>鼨湝Ι┧舷沌珙蝌铗蝾蝌铗蝾蝌铗蝾蝌痼箢蝌铗蝾蝌铗蝾蝌铗蝾蝌铗蜩祆肇氐父摃晙倐z||剢啎槝驳涤种珀觐蝌铗蝾蝌铗蝾蝌铗蝾蝌痼箢蝌铗蝾蝌铗蝾蝌铗蝾蝌铗蜢痧咩闳怂<E997B3>疀灋敆棞灋<E6A39E><E7818B>热茑嚓铑铗蝾蝌铗蝾蝌铗蝾蝌铗蝠篌铗蝾蝌铗蝾蝌铗蝾蝌铗蝾蝌眈耒腚茑嗤蜒闷瓶妹闷铺行谵捩殚眈耦蝌铗蝾蝌铗蝾蝌铗蝾蝌
|
|
|
@ -1,5 +0,0 @@
|
||||||
P6
|
|
||||||
# CREATOR: The GIMP's PNM Filter Version 1.0
|
|
||||||
16 16
|
|
||||||
255
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>檖<EFBFBD>嵂<EFBFBD>忔<EFBFBD>擄<EFBFBD>擄<EFBFBD>忔<EFBFBD>嵂<EFBFBD>檖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>籗<EFBFBD>渟<EFBFBD>メ灩碙殏蜣嵃欳棦嵎阺噾媱渟<EFBFBD>籗<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>籗<EFBFBD>趷<EFBFBD>貤藞楀鳻嚧籗廴㺨爎觶╝濎珆硩塛趷<EFBFBD>籗<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>渟<EFBFBD>貤藰筄蠲<EFBFBD><EFBFBD><EFBFBD>穱㬫齖薃呭籫<EFBFBD><EFBFBD><EFBFBD>鼭虋枅阺寲<EFBFBD><EFBFBD><EFBFBD><EFBFBD>檖<EFBFBD>メ墻楀蠲<EFBFBD><EFBFBD><EFBFBD>錥╚檉鴄╕爁緮鸃瀄<EFBFBD><EFBFBD><EFBFBD>鼭鬮奻贊纍<EFBFBD>嵂<EFBFBD>倎鍞旚<EFBFBD><EFBFBD><EFBFBD>錥╚檉Y<EFBFBD>鴄╒瀊蝍轛忄蜵<EFBFBD><EFBFBD><EFBFBD>崵蝩拶嵂<EFBFBD>忔<EFBFBD>婓碥籗鐖晳錤S<EFBFBD>Y<EFBFBD>槴鷾儗N{幾忄摠虀蘠膬鷇褐忔<E8A490>擄<EFBFBD>婐惢爎潞鑮<E6BD9E>R<EFBFBD>X忄蝍譹z蛉z幃𠸉蝍攢檉╮𦶡陌擄<E9998C>擄<EFBFBD>袀釸爎曒𦴩耯Q<E880AF>碼忄潞鑱<E6BD9E>P~釉<>楴攠錤嚬𤪦帚擄<E5B89A>忔<EFBFBD>倜蜍齁譐崘薕Y櫶Y𤥻魛攠錤X忄X扌塉羻齖詏麍頂忔<E9A082>嵂<EFBFBD>枘錆樦秔<E6A8A6>摠毊檉\霱楴巕儗蝍酄𧤤筘蘡桝褫硉譎嵂<E8AD8E>檖<EFBFBD>囀黰朊艚<E69C8A><E8899A><EFBFBD>楴攡艖塉爚翭筘爚翭秔<E7BFAD>塤鵂店戰謽<E688B0><E8ACBD><EFBFBD><EFBFBD>渟<EFBFBD>屺頝嬴鴅鏿<E9B485>濻𡷹錤魛爟齖𠻝𡛁儋𡓨牴幵渟<E5B9B5><E6B89F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>籗<EFBFBD>趷<EFBFBD>籤銆蜀㈱圔黓譐芇齖粖竀證𤪓首⺈趷<E2BA88>籗<EFBFBD><E7B197><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>籗<EFBFBD>渟<EFBFBD>氈繴纖辛<E7BA96><E8BE9B><EFBFBD>𧁋玟捫邾逄渟<E98084>籗<EFBFBD><E7B197><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>檖<EFBFBD>嵂<EFBFBD>忔<EFBFBD>擄<EFBFBD>擄<EFBFBD>忔<EFBFBD>嵂<EFBFBD>檖<EFBFBD><E6AA96><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
@ -1,5 +0,0 @@
|
||||||
P6
|
|
||||||
# CREATOR: The GIMP's PNM Filter Version 1.0
|
|
||||||
16 16
|
|
||||||
255
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>檖<EFBFBD>嵂<EFBFBD>忔<EFBFBD>擄<EFBFBD>擄<EFBFBD>忔<EFBFBD>嵂<EFBFBD>檖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>籗<EFBFBD>渟<EFBFBD>メ灩碙殏蜣嵃欳棦嵎阺噾媱渟<EFBFBD>籗<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>籗<EFBFBD>趷<EFBFBD>貤藞楀鳻嚧籗廴㺨爎觶╝濎珆硩塛趷<EFBFBD>籗<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>渟<EFBFBD>貤藰筄蠲<EFBFBD><EFBFBD><EFBFBD>穱㬫齖薃呭籫<EFBFBD><EFBFBD><EFBFBD>鼭虋枅阺寲<EFBFBD><EFBFBD><EFBFBD><EFBFBD>檖<EFBFBD>メ墻楀蠲<EFBFBD><EFBFBD><EFBFBD>塉纈蹠鴄╕爁筘籓霟<EFBFBD><EFBFBD><EFBFBD>鼭鬮奻贊纍<EFBFBD>嵂<EFBFBD>倎鍞旚<EFBFBD><EFBFBD><EFBFBD>錥鑯<EFBFBD>筘纇爁緮驖<EFBFBD>涳鵽檉<EFBFBD><EFBFBD><EFBFBD>崵蝩拶嵂<EFBFBD>忔<EFBFBD>婓碥籗鐖矅爁S<EFBFBD>S<EFBFBD>嵒醵薕R<EFBFBD>R<EFBFBD>婈鵨蘠膬鷇褐忔<EFBFBD>擄<EFBFBD>婐惢爎曒㪫爁R<EFBFBD>R<EFBFBD>V<EFBFBD>貁飁<EFBFBD>R<EFBFBD>U<EFBFBD>貁蘮廴垠紋<EFBFBD>擄<EFBFBD>袀釸爎錥╝霟R<EFBFBD>U䄱R<EFBFBD>曒拟<EFBFBD>鋁<EFBFBD>Q<EFBFBD>趣譓嚬𤪦帚擄<EFBFBD>忔<EFBFBD>倜蜍齁譐崐檉U䄱R<EFBFBD>曒𥝲瀄T<EFBFBD>Q<EFBFBD>趟夒閷厠儌炯銅<EFBFBD>嵂<EFBFBD>枘錆樦秔<EFBFBD>摠襱<EFBFBD>曒厮儗楴譻賡蹠筘蘡桝褫硉譎嵂<EFBFBD>檖<EFBFBD>囀黰朊艚<EFBFBD><EFBFBD><EFBFBD>錥╔儗塉爚翭潞裏殦秔<EFBFBD>塤鵂店戰謽<EFBFBD><EFBFBD><EFBFBD><EFBFBD>渟<EFBFBD>屺頝嬴鴅鏿<EFBFBD>濻𡷹錤魛爟齖𠻝𡛁儋𡓨牴幵渟<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>籗<EFBFBD>趷<EFBFBD>籤銆蜀㈱圔黓譐芇齖粖竀證𤪓首⺈趷<EFBFBD>籗<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>籗<EFBFBD>渟<EFBFBD>氈繴纖辛<EFBFBD><EFBFBD><EFBFBD>𧁋玟捫邾逄渟<EFBFBD>籗<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>檖<EFBFBD>嵂<EFBFBD>忔<EFBFBD>擄<EFBFBD>擄<EFBFBD>忔<EFBFBD>嵂<EFBFBD>檖<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
@ -1,5 +0,0 @@
|
||||||
P6
|
|
||||||
# CREATOR: The GIMP's PNM Filter Version 1.0
|
|
||||||
16 16
|
|
||||||
255
|
|
||||||
˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ůâáďłŻíŞ¦íŞĄí¨¤ë¤ží©Ą÷ŮŘţüü˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙řáŕňą˛üÓÂ˙ÖÁ˙Ń˝˙Ď»˙ÎąüČ·íź<EFBFBD>ňĹĂ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙řáŕđ·±üÔÄ˙ÂŁ˙Ż‹˙«‰˙§„˙ ~˙®‘űĂ´í˘śöÖŐ˙˙˙˙˙˙˙˙˙řáßńµŻüŃÁ˙ż ˙ކ˙§…˙˘<CB99>˙ť|˙<>x˙<78>o˙ˇ…űş¬ę—<C499>öÓŇ˙˙˙˙˙˙üÍĽ˙»ś˙Ą<CB99>˙˘<CB99>˙ž|˙™x˙“t˙Žo˙‰i˙€`˙“xűžĺ…˙˙˙˙˙˙ęť<C499>˙͸˙ }˙ť|˙™x˙“s˙Žn˙‰i˙<69>e˙~`˙xY˙pO˙Ş<CB99>ârk˙˙˙˙˙˙éš•˙ı˙<C2B1>v˙“s˙Žn˙‰i˙<69>e˙~_˙yZ˙sU˙nO˙gH˙ˇ<CB99>áoh˙˙˙˙˙˙č”<C48D>˙ľ«˙Ťm˙‰i˙<69>e˙~_˙yZ˙tU˙oP˙iK˙cF˙\?˙›Šßib˙˙˙˙˙˙抄˙»¦˙_˙~_˙yZ˙sU˙nP˙iK˙dF˙^A˙Y;˙O1˙™‡Ý^V˙˙˙˙˙˙čŽ<C48D>ü˛˘˙Źs˙pO˙nO˙iK˙dF˙^A˙Z<˙U7˙K,˙gNú“„Ţf_˙˙˙˙˙˙őŇĐ鎇űź˙<C5BA>g˙^@˙^@˙Y<˙U7˙P3ýF(ýeJö–‰áneňĂÁ˙˙˙˙˙˙˙˙˙ôĚĘç†~úĄ–˙tZ˙P2˙O0ţI,úB%ů`Hô”†âpińŔ˝˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙óČĆç|tú—‰˙•„ü<E2809E>úŽ}÷Ť}ň‹}ÝYQęź›˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙óĆÄŕkeÜYRÜ[SÚXPÚRIÜ`Yđş·ţúú˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙
|
|
Binary file not shown.
Binary file not shown.
|
@ -1,5 +0,0 @@
|
||||||
P6
|
|
||||||
# CREATOR: The GIMP's PNM Filter Version 1.0
|
|
||||||
16 16
|
|
||||||
255
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>綮茌脩耶m烯e围c楔j倩岓柃<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>燔吭皃追}嫜<>疱鲲滗维噎w獭g缬<67><E7BCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>綮茉皃逑<E79A83><E98091>秕<EFBFBD>蝥塍<E89DA5>鳆<EFBFBD><E9B386>牛蓻c矜<63><E79F9C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>萋懽秨鼹<E7A7A8>篾桉<E7AFBE>蝙轵<E89D99>蝥铛<E89DA5><E9939B>亭q耶<71><E880B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>噎l嫜<6C>鳆桉<E9B386>蝙轵<E89D99>蝥塍<E89DA5>篾蝼<E7AFBE>魔脪[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>熄c黠咫篾轵<E7AFBE>蝥牝<E89DA5>篾g禱a癢\≧綦饪婸<E9A5AA><E5A9B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>挺b鲲潇篾牝<E7AFBE>蝥塍<E89DA5>篾_璙φ漇濳綦饩嘙<E9A5A9><E59899><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>艇h涮<68>鼽塍<E9BCBD>篾c瞃^玊v穖炑昸琧D<E790A7>=><3E>7<EFBFBD><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>毓嬔獀<E5AC94><E78D80>觖祠鶿≧熞棜蠏喤}愂垕苾5y0<79><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蜱偈焑弈y<E5BC88>篪黃濳M朎e<E69C8E>嬊匷汼3v..o)阃<><E99883><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嫜谷歚薁o廾<6F>脞綦<E8849E>><3E>7偮}2t,闾欈膷純O<E7B494><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>皴匮珒翉Z緡M絽L5y00q+*k&枵i抓诨€琫?黢<><E9BBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>馑沽嶺吲忕訝嗲撋沘梐F<E6A290><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嵘讣凲椎}值脩V秢Q<E7A7A2><51><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嵘府mH箑H穣R<E7A9A3><52><EFBFBD><EFBFBD><EFBFBD>
|
|
|
@ -1,5 +0,0 @@
|
||||||
P6
|
|
||||||
# CREATOR: The GIMP's PNM Filter Version 1.0
|
|
||||||
16 16
|
|
||||||
255
|
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>綮茌脩耶m烯e围c楔j倩岓柃<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>燔吭皃追}嫜<>疱鲲滗维噎w獭g缬<67><E7BCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>綮茉皃逑<E79A83><E98091>秕<EFBFBD>蝥塍<E89DA5>鳆<EFBFBD><E9B386>牛蓻c矜<63><E79F9C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>萋懽秨鼹<E7A7A8>篾桉<E7AFBE>蝙轵<E89D99>蝥铛<E89DA5><E9939B>亭q耶<71><E880B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>噎l嫜<6C>鳆桉<E9B386>蝙轵<E89D99>蝥塍<E89DA5>篾蝼<E7AFBE>魔脪[<5B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>熄c黠咫篾轵<E7AFBE>蝥牝<E89DA5>篾塍<E7AFBE>篾铛<E7AFBE>脞繈P<E7B988><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>挺b鲲潇篾牝<E7AFBE>蝥塍<E89DA5>篾祗<E7AFBE>酊秕<E9858A>脞緡M<E7B7A1><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>艇h涮<68>鼽塍<E9BCBD>篾䎬t黲m鷆b鱐V鬍H<E9AC8D>5:<3A>&.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>毓嬔獀<E5AC94><E78D80>觖祠<E8A796>om<6F>亏婪龆<E5A9AA><E9BE86>鬆涭#<23><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蜱偈焑弈y<E5BC88>篪<EFBFBD>cb鱐V鬍H<E9AC8D>5:<3A>&.<2E>#<23>阃<><E99883><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嫜谷歚薁o廾<6F>脞綦廛兢翇S执y闾欈膷純O<E7B494><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>皴匮珒翉Z緡M絽L粏R粊L劭囪眨樽ペ粈琫?黢<><E9BBA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>馑沽嶺吲忕訝嗲撋沘梐F<E6A290><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嵘讣凲椎}值脩V眗E<E79C97><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嗲顶\3箑H硈K<E7A188><4B><EFBFBD><EFBFBD><EFBFBD>
|
|
|
@ -18,6 +18,8 @@ def DEFSET(setting):
|
||||||
|
|
||||||
def storedSetting(name):
|
def storedSetting(name):
|
||||||
return lambda setting: profile.getProfileSetting(name)
|
return lambda setting: profile.getProfileSetting(name)
|
||||||
|
def storedPreference(name):
|
||||||
|
return lambda setting: profile.getPreference(name)
|
||||||
|
|
||||||
def ifSettingAboveZero(name):
|
def ifSettingAboveZero(name):
|
||||||
return lambda setting: float(profile.getProfileSetting(name)) > 0
|
return lambda setting: float(profile.getProfileSetting(name)) > 0
|
||||||
|
@ -25,12 +27,17 @@ def ifSettingAboveZero(name):
|
||||||
def ifSettingIs(name, value):
|
def ifSettingIs(name, value):
|
||||||
return lambda setting: profile.getProfileSetting(name) == value
|
return lambda setting: profile.getProfileSetting(name) == value
|
||||||
|
|
||||||
|
def raftLayerCount(setting):
|
||||||
|
if profile.getProfileSetting('enable_raft') == "True":
|
||||||
|
return '1'
|
||||||
|
return '0'
|
||||||
|
|
||||||
def storedPercentSetting(name):
|
def storedPercentSetting(name):
|
||||||
return lambda setting: float(profile.getProfileSetting(name)) / 100
|
return lambda setting: float(profile.getProfileSetting(name)) / 100
|
||||||
|
|
||||||
def calculateEdgeWidth(setting):
|
def calculateEdgeWidth(setting):
|
||||||
wallThickness = float(profile.getProfileSetting('wall_thickness'))
|
wallThickness = float(profile.getProfileSetting('wall_thickness'))
|
||||||
nozzleSize = float(profile.getProfileSetting('nozzle_size'))
|
nozzleSize = float(profile.getPreference('nozzle_size'))
|
||||||
|
|
||||||
if wallThickness < nozzleSize:
|
if wallThickness < nozzleSize:
|
||||||
return wallThickness
|
return wallThickness
|
||||||
|
@ -49,7 +56,7 @@ def calculateShellsBase(setting):
|
||||||
return calculateShellsImp(float(profile.getProfileSetting('wall_thickness')) + float(profile.getProfileSetting('extra_base_wall_thickness')))
|
return calculateShellsImp(float(profile.getProfileSetting('wall_thickness')) + float(profile.getProfileSetting('extra_base_wall_thickness')))
|
||||||
|
|
||||||
def calculateShellsImp(wallThickness):
|
def calculateShellsImp(wallThickness):
|
||||||
nozzleSize = float(profile.getProfileSetting('nozzle_size'))
|
nozzleSize = float(profile.getPreference('nozzle_size'))
|
||||||
|
|
||||||
if wallThickness < nozzleSize:
|
if wallThickness < nozzleSize:
|
||||||
return 0
|
return 0
|
||||||
|
@ -145,7 +152,7 @@ def getSkeinPyPyProfileInformation():
|
||||||
'Line': ifSettingIs('infill_type', 'Line'),
|
'Line': ifSettingIs('infill_type', 'Line'),
|
||||||
'Infill_Perimeter_Overlap_ratio': storedPercentSetting('fill_overlap'),
|
'Infill_Perimeter_Overlap_ratio': storedPercentSetting('fill_overlap'),
|
||||||
'Infill_Solidity_ratio': storedPercentSetting('fill_density'),
|
'Infill_Solidity_ratio': storedPercentSetting('fill_density'),
|
||||||
'Infill_Width': storedSetting("nozzle_size"),
|
'Infill_Width': storedPreference("nozzle_size"),
|
||||||
'Solid_Surface_Thickness_layers': calculateSolidLayerCount,
|
'Solid_Surface_Thickness_layers': calculateSolidLayerCount,
|
||||||
'Start_From_Choice': DEFSET,
|
'Start_From_Choice': DEFSET,
|
||||||
'Surrounding_Angle_degrees': DEFSET,
|
'Surrounding_Angle_degrees': DEFSET,
|
||||||
|
@ -161,8 +168,8 @@ def getSkeinPyPyProfileInformation():
|
||||||
},'speed': {
|
},'speed': {
|
||||||
'Activate_Speed': "True",
|
'Activate_Speed': "True",
|
||||||
'Add_Flow_Rate': "True",
|
'Add_Flow_Rate': "True",
|
||||||
'Bridge_Feed_Rate_Multiplier_ratio': DEFSET,
|
'Bridge_Feed_Rate_Multiplier_ratio': storedPercentSetting('bridge_speed'),
|
||||||
'Bridge_Flow_Rate_Multiplier_ratio': DEFSET,
|
'Bridge_Flow_Rate_Multiplier_ratio': storedPercentSetting('bridge_material_amount'),
|
||||||
'Duty_Cyle_at_Beginning_portion': DEFSET,
|
'Duty_Cyle_at_Beginning_portion': DEFSET,
|
||||||
'Duty_Cyle_at_Ending_portion': DEFSET,
|
'Duty_Cyle_at_Ending_portion': DEFSET,
|
||||||
'Feed_Rate_mm/s': storedSetting("print_speed"),
|
'Feed_Rate_mm/s': storedSetting("print_speed"),
|
||||||
|
@ -193,28 +200,28 @@ def getSkeinPyPyProfileInformation():
|
||||||
'Activate_Raft': "True",
|
'Activate_Raft': "True",
|
||||||
'Add_Raft,_Elevate_Nozzle,_Orbit': DEFSET,
|
'Add_Raft,_Elevate_Nozzle,_Orbit': DEFSET,
|
||||||
'Base_Feed_Rate_Multiplier_ratio': DEFSET,
|
'Base_Feed_Rate_Multiplier_ratio': DEFSET,
|
||||||
'Base_Flow_Rate_Multiplier_ratio': DEFSET,
|
'Base_Flow_Rate_Multiplier_ratio': storedPercentSetting('raft_base_material_amount'),
|
||||||
'Base_Infill_Density_ratio': DEFSET,
|
'Base_Infill_Density_ratio': DEFSET,
|
||||||
'Base_Layer_Thickness_over_Layer_Thickness': DEFSET,
|
'Base_Layer_Thickness_over_Layer_Thickness': DEFSET,
|
||||||
'Base_Layers_integer': '0',
|
'Base_Layers_integer': raftLayerCount,
|
||||||
'Base_Nozzle_Lift_over_Base_Layer_Thickness_ratio': DEFSET,
|
'Base_Nozzle_Lift_over_Base_Layer_Thickness_ratio': DEFSET,
|
||||||
'Initial_Circling': DEFSET,
|
'Initial_Circling': DEFSET,
|
||||||
'Infill_Overhang_over_Extrusion_Width_ratio': DEFSET,
|
'Infill_Overhang_over_Extrusion_Width_ratio': DEFSET,
|
||||||
'Interface_Feed_Rate_Multiplier_ratio': DEFSET,
|
'Interface_Feed_Rate_Multiplier_ratio': DEFSET,
|
||||||
'Interface_Flow_Rate_Multiplier_ratio': DEFSET,
|
'Interface_Flow_Rate_Multiplier_ratio': storedPercentSetting('raft_interface_material_amount'),
|
||||||
'Interface_Infill_Density_ratio': DEFSET,
|
'Interface_Infill_Density_ratio': DEFSET,
|
||||||
'Interface_Layer_Thickness_over_Layer_Thickness': DEFSET,
|
'Interface_Layer_Thickness_over_Layer_Thickness': DEFSET,
|
||||||
'Interface_Layers_integer': '0',
|
'Interface_Layers_integer': raftLayerCount,
|
||||||
'Interface_Nozzle_Lift_over_Interface_Layer_Thickness_ratio': DEFSET,
|
'Interface_Nozzle_Lift_over_Interface_Layer_Thickness_ratio': DEFSET,
|
||||||
'Name_of_Support_End_File': DEFSET,
|
'Name_of_Support_End_File': DEFSET,
|
||||||
'Name_of_Support_Start_File': DEFSET,
|
'Name_of_Support_Start_File': DEFSET,
|
||||||
'Operating_Nozzle_Lift_over_Layer_Thickness_ratio': DEFSET,
|
'Operating_Nozzle_Lift_over_Layer_Thickness_ratio': DEFSET,
|
||||||
'Raft_Additional_Margin_over_Length_%': DEFSET,
|
'Raft_Additional_Margin_over_Length_%': DEFSET,
|
||||||
'Raft_Margin_mm': DEFSET,
|
'Raft_Margin_mm': storedSetting('raft_margin'),
|
||||||
'Support_Cross_Hatch': 'False',
|
'Support_Cross_Hatch': 'False',
|
||||||
'Support_Flow_Rate_over_Operating_Flow_Rate_ratio': storedPercentSetting('support_rate'),
|
'Support_Flow_Rate_over_Operating_Flow_Rate_ratio': storedPercentSetting('support_rate'),
|
||||||
'Support_Gap_over_Perimeter_Extrusion_Width_ratio': calcSupportDistanceRatio,
|
'Support_Gap_over_Perimeter_Extrusion_Width_ratio': calcSupportDistanceRatio,
|
||||||
'Support_Material_Choice_': storedSetting("support"),
|
'Support_Material_Choice_': storedSetting('support'),
|
||||||
'Support_Minimum_Angle_degrees': DEFSET,
|
'Support_Minimum_Angle_degrees': DEFSET,
|
||||||
},'skirt': {
|
},'skirt': {
|
||||||
'Skirt_line_count': storedSetting("skirt_line_count"),
|
'Skirt_line_count': storedSetting("skirt_line_count"),
|
||||||
|
@ -278,6 +285,7 @@ def getSkeinPyPyProfileInformation():
|
||||||
'Orbital_Outset_millimeters': DEFSET,
|
'Orbital_Outset_millimeters': DEFSET,
|
||||||
'Turn_Fan_On_at_Beginning': DEFSET,
|
'Turn_Fan_On_at_Beginning': DEFSET,
|
||||||
'Turn_Fan_Off_at_Ending': DEFSET,
|
'Turn_Fan_Off_at_Ending': DEFSET,
|
||||||
|
'Minimum_feed_rate_mm/s': storedSetting("cool_min_feedrate"),
|
||||||
},'hop': {
|
},'hop': {
|
||||||
'Activate_Hop': "False",
|
'Activate_Hop': "False",
|
||||||
'Hop_Over_Layer_Thickness_ratio': DEFSET,
|
'Hop_Over_Layer_Thickness_ratio': DEFSET,
|
||||||
|
|
|
@ -26,6 +26,17 @@ class advancedConfigWindow(configBase.configWindowBase):
|
||||||
c = configBase.SettingRow(left, "Print order sequence", 'sequence', ['Loops > Perimeter > Infill', 'Loops > Infill > Perimeter', 'Infill > Loops > Perimeter', 'Infill > Perimeter > Loops', 'Perimeter > Infill > Loops', 'Perimeter > Loops > Infill'], 'Sequence of printing. The perimeter is the outer print edge, the loops are the insides of the walls, and the infill is the insides.');
|
c = configBase.SettingRow(left, "Print order sequence", 'sequence', ['Loops > Perimeter > Infill', 'Loops > Infill > Perimeter', 'Infill > Loops > Perimeter', 'Infill > Perimeter > Loops', 'Perimeter > Infill > Loops', 'Perimeter > Loops > Infill'], 'Sequence of printing. The perimeter is the outer print edge, the loops are the insides of the walls, and the infill is the insides.');
|
||||||
c = configBase.SettingRow(left, "Force first layer sequence", 'force_first_layer_sequence', True, 'This setting forces the order of the first layer to be \'Perimeter > Loops > Infill\'')
|
c = configBase.SettingRow(left, "Force first layer sequence", 'force_first_layer_sequence', True, 'This setting forces the order of the first layer to be \'Perimeter > Loops > Infill\'')
|
||||||
|
|
||||||
|
configBase.TitleRow(left, "Cool")
|
||||||
|
c = configBase.SettingRow(left, "Minimum feedrate (mm/s)", 'cool_min_feedrate', '5', 'The minimal layer time can cause the print to slow down so much it starts to ooze. The minimal feedrate protects against this. Even if a print gets slown down it will never be slower then this minimal feedrate.')
|
||||||
|
|
||||||
|
configBase.TitleRow(left, "Joris")
|
||||||
|
c = configBase.SettingRow(left, "Joris the outer edge", 'joris', False, '[Joris] is a code name for smoothing out the Z move of the outer edge. This will create a steady Z increase over the whole print. It is intended to be used with a single walled wall thickness to make cups/vases.')
|
||||||
|
|
||||||
|
configBase.TitleRow(left, "Raft (if enabled)")
|
||||||
|
c = configBase.SettingRow(left, "Raft extra margin (mm)", 'raft_margin', '3.0', 'If the raft is enabled, this is the extra raft area around the object which is also rafted. Increasing this margin will create a stronger raft.')
|
||||||
|
c = configBase.SettingRow(left, "Raft base material amount (%)", 'raft_base_material_amount', '100', 'The base layer is the first layer put down as a raft. This layer has thick strong lines and is put firmly on the bed to prevent warping. This setting adjust the amount of material used for the base layer.')
|
||||||
|
c = configBase.SettingRow(left, "Raft interface material amount (%)", 'raft_interface_material_amount', '100', 'The interface layer is a weak thin layer between the base layer and the printed object. It is designed to has little material to make it easy to break the base off the printed object. This setting adjusts the amount of material used for the interface layer.')
|
||||||
|
|
||||||
configBase.TitleRow(right, "Infill")
|
configBase.TitleRow(right, "Infill")
|
||||||
c = configBase.SettingRow(right, "Infill pattern", 'infill_type', ['Line', 'Grid Circular', 'Grid Hexagonal', 'Grid Rectangular'], 'Pattern of the none-solid infill. Line is default, but grids can provide a strong print.')
|
c = configBase.SettingRow(right, "Infill pattern", 'infill_type', ['Line', 'Grid Circular', 'Grid Hexagonal', 'Grid Rectangular'], 'Pattern of the none-solid infill. Line is default, but grids can provide a strong print.')
|
||||||
c = configBase.SettingRow(right, "Solid infill top", 'solid_top', True, 'Create a solid top surface, if set to false the top is filled with the fill percentage. Useful for cups/vases.')
|
c = configBase.SettingRow(right, "Solid infill top", 'solid_top', True, 'Create a solid top surface, if set to false the top is filled with the fill percentage. Useful for cups/vases.')
|
||||||
|
@ -35,8 +46,9 @@ class advancedConfigWindow(configBase.configWindowBase):
|
||||||
c = configBase.SettingRow(right, "Support material amount (%)", 'support_rate', '100', 'Amount of material used for support, less material gives a weaker support structure which is easier to remove.')
|
c = configBase.SettingRow(right, "Support material amount (%)", 'support_rate', '100', 'Amount of material used for support, less material gives a weaker support structure which is easier to remove.')
|
||||||
c = configBase.SettingRow(right, "Support distance from object (mm)", 'support_distance', '0.5', 'Distance between the support structure and the object.')
|
c = configBase.SettingRow(right, "Support distance from object (mm)", 'support_distance', '0.5', 'Distance between the support structure and the object.')
|
||||||
|
|
||||||
configBase.TitleRow(left, "Joris")
|
configBase.TitleRow(right, "Bridge")
|
||||||
c = configBase.SettingRow(left, "Joris the outer edge", 'joris', False, '[Joris] is a code name for smoothing out the Z move of the outer edge. This will create a steady Z increase over the whole print. It is intended to be used with a single walled wall thickness to make cups/vases.')
|
c = configBase.SettingRow(right, "Bridge speed (%)", 'bridge_speed', '100', 'Speed at which bridges are printed, compared to normal printing speed.')
|
||||||
|
c = configBase.SettingRow(right, "Bridge material (%)", 'bridge_material_amount', '100', 'Amount of material used for bridges, increase go extrude more material when printing a bridge.')
|
||||||
|
|
||||||
main.Fit()
|
main.Fit()
|
||||||
self.Fit()
|
self.Fit()
|
||||||
|
|
|
@ -97,17 +97,17 @@ class MachineSelectPage(InfoPage):
|
||||||
profile.putPreference('machine_width', '205')
|
profile.putPreference('machine_width', '205')
|
||||||
profile.putPreference('machine_depth', '205')
|
profile.putPreference('machine_depth', '205')
|
||||||
profile.putPreference('machine_height', '200')
|
profile.putPreference('machine_height', '200')
|
||||||
profile.putProfileSetting('nozzle_size', '0.4')
|
profile.putPreference('nozzle_size', '0.4')
|
||||||
profile.putProfileSetting('machine_center_x', '100')
|
profile.putProfileSetting('machine_center_x', '100')
|
||||||
profile.putProfileSetting('machine_center_y', '100')
|
profile.putProfileSetting('machine_center_y', '100')
|
||||||
else:
|
else:
|
||||||
profile.putPreference('machine_width', '80')
|
profile.putPreference('machine_width', '80')
|
||||||
profile.putPreference('machine_depth', '80')
|
profile.putPreference('machine_depth', '80')
|
||||||
profile.putPreference('machine_height', '60')
|
profile.putPreference('machine_height', '60')
|
||||||
profile.putProfileSetting('nozzle_size', '0.5')
|
profile.putPreference('nozzle_size', '0.5')
|
||||||
profile.putProfileSetting('machine_center_x', '40')
|
profile.putProfileSetting('machine_center_x', '40')
|
||||||
profile.putProfileSetting('machine_center_y', '40')
|
profile.putProfileSetting('machine_center_y', '40')
|
||||||
profile.putProfileSetting('wall_thickness', float(profile.getProfileSetting('nozzle_size')) * 2)
|
profile.putProfileSetting('wall_thickness', float(profile.getPreference('nozzle_size')) * 2)
|
||||||
|
|
||||||
class FirmwareUpgradePage(InfoPage):
|
class FirmwareUpgradePage(InfoPage):
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
|
|
|
@ -9,6 +9,8 @@ from avr_isp import stk500v2
|
||||||
from avr_isp import ispBase
|
from avr_isp import ispBase
|
||||||
from avr_isp import intelHex
|
from avr_isp import intelHex
|
||||||
|
|
||||||
|
from newui import profile
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import _winreg
|
import _winreg
|
||||||
except:
|
except:
|
||||||
|
@ -28,8 +30,11 @@ def serialList():
|
||||||
return baselist+glob.glob('/dev/ttyUSB*') + glob.glob('/dev/ttyACM*') +glob.glob("/dev/tty.usb*")+glob.glob("/dev/cu.*")+glob.glob("/dev/rfcomm*")
|
return baselist+glob.glob('/dev/ttyUSB*') + glob.glob('/dev/ttyACM*') +glob.glob("/dev/tty.usb*")+glob.glob("/dev/cu.*")+glob.glob("/dev/rfcomm*")
|
||||||
|
|
||||||
class InstallFirmware(wx.Dialog):
|
class InstallFirmware(wx.Dialog):
|
||||||
def __init__(self, filename, port = 'AUTO'):
|
def __init__(self, filename, port = None):
|
||||||
super(InstallFirmware, self).__init__(parent=None, title="Firmware install", size=(250, 100))
|
super(InstallFirmware, self).__init__(parent=None, title="Firmware install", size=(250, 100))
|
||||||
|
if port == None:
|
||||||
|
port = profile.getPreference('serial_port')
|
||||||
|
|
||||||
sizer = wx.BoxSizer(wx.VERTICAL)
|
sizer = wx.BoxSizer(wx.VERTICAL)
|
||||||
|
|
||||||
self.progressLabel = wx.StaticText(self, -1, 'Reading firmware...')
|
self.progressLabel = wx.StaticText(self, -1, 'Reading firmware...')
|
||||||
|
@ -99,7 +104,11 @@ class InstallFirmware(wx.Dialog):
|
||||||
self.Destroy()
|
self.Destroy()
|
||||||
|
|
||||||
class MachineCom():
|
class MachineCom():
|
||||||
def __init__(self, port = 'AUTO', baudrate = 250000):
|
def __init__(self, port = None, baudrate = None):
|
||||||
|
if port == None:
|
||||||
|
port = profile.getPreference('serial_port')
|
||||||
|
if baudrate == None:
|
||||||
|
baudrate = profile.getPreference('serial_baud')
|
||||||
self.serial = None
|
self.serial = None
|
||||||
if port == 'AUTO':
|
if port == 'AUTO':
|
||||||
programmer = stk500v2.Stk500v2()
|
programmer = stk500v2.Stk500v2()
|
||||||
|
@ -111,9 +120,14 @@ class MachineCom():
|
||||||
break
|
break
|
||||||
except ispBase.IspError:
|
except ispBase.IspError:
|
||||||
pass
|
pass
|
||||||
|
except:
|
||||||
|
print "Unexpected error while connecting to serial port:" + port, sys.exc_info()[0]
|
||||||
programmer.close()
|
programmer.close()
|
||||||
else:
|
else:
|
||||||
self.serial = Serial(port, baudrate, timeout=5)
|
try:
|
||||||
|
self.serial = Serial(port, baudrate, timeout=5)
|
||||||
|
except:
|
||||||
|
print "Unexpected error while connecting to serial port:" + port, sys.exc_info()[0]
|
||||||
|
|
||||||
def readline(self):
|
def readline(self):
|
||||||
if self.serial == None:
|
if self.serial == None:
|
||||||
|
|
|
@ -84,11 +84,10 @@ class mainWindow(configBase.configWindowBase):
|
||||||
configBase.TitleRow(left, "Accuracy")
|
configBase.TitleRow(left, "Accuracy")
|
||||||
c = configBase.SettingRow(left, "Layer height (mm)", 'layer_height', '0.2', 'Layer height in millimeters.\n0.2 is a good value for quick prints.\n0.1 gives high quality prints.')
|
c = configBase.SettingRow(left, "Layer height (mm)", 'layer_height', '0.2', 'Layer height in millimeters.\n0.2 is a good value for quick prints.\n0.1 gives high quality prints.')
|
||||||
validators.validFloat(c, 0.0)
|
validators.validFloat(c, 0.0)
|
||||||
validators.warningAbove(c, 0.31, "Thicker layers then 0.3mm usually give bad results and are not recommended.")
|
validators.warningAbove(c, lambda : (float(profile.getPreference('nozzle_size')) * 80 / 100), "Thicker layers then %.2fmm (80%% nozzle size) usually give bad results and are not recommended.")
|
||||||
c = configBase.SettingRow(left, "Wall thickness (mm)", 'wall_thickness', '0.8', 'Thickness of the walls.\nThis is used in combination with the nozzle size to define the number\nof perimeter lines and the thickness of those perimeter lines.')
|
c = configBase.SettingRow(left, "Wall thickness (mm)", 'wall_thickness', '0.8', 'Thickness of the walls.\nThis is used in combination with the nozzle size to define the number\nof perimeter lines and the thickness of those perimeter lines.')
|
||||||
validators.validFloat(c, 0.0)
|
validators.validFloat(c, 0.0)
|
||||||
validators.wallThicknessValidator(c)
|
validators.wallThicknessValidator(c)
|
||||||
configBase.settingNotify(c, self.preview3d.updateWallLineWidth)
|
|
||||||
|
|
||||||
configBase.TitleRow(left, "Fill")
|
configBase.TitleRow(left, "Fill")
|
||||||
c = configBase.SettingRow(left, "Bottom/Top thickness (mm)", 'solid_layer_thickness', '0.6', 'This controls the thickness of the bottom and top layers, the amount of solid layers put down is calculated by the layer thickness and this value.\nHaving this value a multiply of the layer thickness makes sense. And keep it near your wall thickness to make an evenly strong part.')
|
c = configBase.SettingRow(left, "Bottom/Top thickness (mm)", 'solid_layer_thickness', '0.6', 'This controls the thickness of the bottom and top layers, the amount of solid layers put down is calculated by the layer thickness and this value.\nHaving this value a multiply of the layer thickness makes sense. And keep it near your wall thickness to make an evenly strong part.')
|
||||||
|
@ -106,6 +105,7 @@ class mainWindow(configBase.configWindowBase):
|
||||||
c = configBase.SettingRow(right, "Print speed (mm/s)", 'print_speed', '50', 'Speed at which printing happens. A well adjusted Ultimaker can reach 150mm/s, but for good quality prints you want to print slower. Printing speed depends on a lot of factors. So you will be experimenting with optimal settings for this.')
|
c = configBase.SettingRow(right, "Print speed (mm/s)", 'print_speed', '50', 'Speed at which printing happens. A well adjusted Ultimaker can reach 150mm/s, but for good quality prints you want to print slower. Printing speed depends on a lot of factors. So you will be experimenting with optimal settings for this.')
|
||||||
validators.validFloat(c, 1.0)
|
validators.validFloat(c, 1.0)
|
||||||
validators.warningAbove(c, 150.0, "It is highly unlikely that your machine can achieve a printing speed above 150mm/s")
|
validators.warningAbove(c, 150.0, "It is highly unlikely that your machine can achieve a printing speed above 150mm/s")
|
||||||
|
validators.printSpeedValidator(c)
|
||||||
|
|
||||||
configBase.TitleRow(right, "Temperature")
|
configBase.TitleRow(right, "Temperature")
|
||||||
c = configBase.SettingRow(right, "Printing temperature", 'print_temperature', '0', 'Temperature used for printing. Set at 0 to pre-heat yourself')
|
c = configBase.SettingRow(right, "Printing temperature", 'print_temperature', '0', 'Temperature used for printing. Set at 0 to pre-heat yourself')
|
||||||
|
@ -114,6 +114,7 @@ class mainWindow(configBase.configWindowBase):
|
||||||
|
|
||||||
configBase.TitleRow(right, "Support")
|
configBase.TitleRow(right, "Support")
|
||||||
c = configBase.SettingRow(right, "Support type", 'support', ['None', 'Exterior Only', 'Everywhere', 'Empty Layers Only'], 'Type of support structure build.\nNone does not do any support.\nExterior only only creates support on the outside.\nEverywhere creates support even on the insides of the model.\nOnly on empty layers is for stacked objects.')
|
c = configBase.SettingRow(right, "Support type", 'support', ['None', 'Exterior Only', 'Everywhere', 'Empty Layers Only'], 'Type of support structure build.\nNone does not do any support.\nExterior only only creates support on the outside.\nEverywhere creates support even on the insides of the model.\nOnly on empty layers is for stacked objects.')
|
||||||
|
c = configBase.SettingRow(right, "Add raft", 'enable_raft', False, 'A raft is a few layers of lines below the bottom of the object. It prevents warping. Full raft settings can be found in the advanced settings.\nFor PLA this is usually not required. But if you print with ABS it is almost required.')
|
||||||
|
|
||||||
configBase.TitleRow(right, "Filament")
|
configBase.TitleRow(right, "Filament")
|
||||||
c = configBase.SettingRow(right, "Diameter (mm)", 'filament_diameter', '2.89', 'Diameter of your filament, as accurately as possible.\nIf you cannot measure this value you will have to callibrate it, a higher number means less extrusion, a smaller number generates more extrusion.')
|
c = configBase.SettingRow(right, "Diameter (mm)", 'filament_diameter', '2.89', 'Diameter of your filament, as accurately as possible.\nIf you cannot measure this value you will have to callibrate it, a higher number means less extrusion, a smaller number generates more extrusion.')
|
||||||
|
@ -132,12 +133,6 @@ class mainWindow(configBase.configWindowBase):
|
||||||
validators.validInt(c, 10)
|
validators.validInt(c, 10)
|
||||||
configBase.settingNotify(c, self.preview3d.updateCenterY)
|
configBase.settingNotify(c, self.preview3d.updateCenterY)
|
||||||
|
|
||||||
configBase.TitleRow(left, "Machine nozzle")
|
|
||||||
c = configBase.SettingRow(left, "Nozzle size (mm)", 'nozzle_size', '0.4', 'The nozzle size is very important, this is used to calculate the line width of the infill, and used to calculate the amount of outside wall lines and thickness for the wall thickness you entered in the print settings.')
|
|
||||||
validators.validFloat(c, 0.1, 1.0)
|
|
||||||
configBase.settingNotify(c, self.preview3d.updateWallLineWidth)
|
|
||||||
configBase.settingNotify(c, self.preview3d.updateInfillLineWidth)
|
|
||||||
|
|
||||||
configBase.TitleRow(left, "Retraction")
|
configBase.TitleRow(left, "Retraction")
|
||||||
c = configBase.SettingRow(left, "Minimal travel (mm)", 'retraction_min_travel', '5.0', 'Minimal amount of travel needed for a retraction to happen at all. To make sure you do not get a lot of retractions in a small area')
|
c = configBase.SettingRow(left, "Minimal travel (mm)", 'retraction_min_travel', '5.0', 'Minimal amount of travel needed for a retraction to happen at all. To make sure you do not get a lot of retractions in a small area')
|
||||||
validators.validFloat(c, 0.0)
|
validators.validFloat(c, 0.0)
|
||||||
|
@ -213,6 +208,7 @@ class mainWindow(configBase.configWindowBase):
|
||||||
self.updateProfileToControls()
|
self.updateProfileToControls()
|
||||||
|
|
||||||
self.Fit()
|
self.Fit()
|
||||||
|
self.SetMinSize(self.GetSize())
|
||||||
self.Centre()
|
self.Centre()
|
||||||
self.Show(True)
|
self.Show(True)
|
||||||
|
|
||||||
|
@ -241,7 +237,7 @@ class mainWindow(configBase.configWindowBase):
|
||||||
prefDialog.Show(True)
|
prefDialog.Show(True)
|
||||||
|
|
||||||
def OnDefaultMarlinFirmware(self, e):
|
def OnDefaultMarlinFirmware(self, e):
|
||||||
machineCom.InstallFirmware(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../firmware/default.hex"), profile.getPreference('serial_port'))
|
machineCom.InstallFirmware(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../firmware/default.hex"))
|
||||||
|
|
||||||
def OnCustomFirmware(self, e):
|
def OnCustomFirmware(self, e):
|
||||||
dlg=wx.FileDialog(self, "Open firmware to upload", self.lastPath, style=wx.FD_OPEN|wx.FD_FILE_MUST_EXIST)
|
dlg=wx.FileDialog(self, "Open firmware to upload", self.lastPath, style=wx.FD_OPEN|wx.FD_FILE_MUST_EXIST)
|
||||||
|
@ -251,7 +247,7 @@ class mainWindow(configBase.configWindowBase):
|
||||||
if not(os.path.exists(filename)):
|
if not(os.path.exists(filename)):
|
||||||
return
|
return
|
||||||
#For some reason my Ubuntu 10.10 crashes here.
|
#For some reason my Ubuntu 10.10 crashes here.
|
||||||
machineCom.InstallFirmware(filename, profile.getPreference('serial_port'))
|
machineCom.InstallFirmware(filename)
|
||||||
|
|
||||||
def OnFirstRunWizard(self, e):
|
def OnFirstRunWizard(self, e):
|
||||||
configWizard.configWizard()
|
configWizard.configWizard()
|
||||||
|
|
|
@ -16,13 +16,15 @@ class preferencesDialog(configBase.configWindowBase):
|
||||||
|
|
||||||
left, right, main = self.CreateConfigPanel(self)
|
left, right, main = self.CreateConfigPanel(self)
|
||||||
configBase.TitleRow(left, 'Machine settings')
|
configBase.TitleRow(left, 'Machine settings')
|
||||||
|
c = configBase.SettingRow(left, "Nozzle size (mm)", 'nozzle_size', '0.4', 'The nozzle size is very important, this is used to calculate the line width of the infill, and used to calculate the amount of outside wall lines and thickness for the wall thickness you entered in the print settings.', type = 'preference')
|
||||||
|
validators.validFloat(c, 0.1, 1.0)
|
||||||
c = configBase.SettingRow(left, 'Steps per E', 'steps_per_e', '0', 'Amount of steps per mm filament extrusion', type = 'preference')
|
c = configBase.SettingRow(left, 'Steps per E', 'steps_per_e', '0', 'Amount of steps per mm filament extrusion', type = 'preference')
|
||||||
validators.validFloat(c, 0.1)
|
validators.validFloat(c, 0.1)
|
||||||
c = configBase.SettingRow(left, 'Machine width', 'machine_width', '205', 'Size of the machine in mm', type = 'preference')
|
c = configBase.SettingRow(left, 'Machine width (mm)', 'machine_width', '205', 'Size of the machine in mm', type = 'preference')
|
||||||
validators.validFloat(c, 10.0)
|
validators.validFloat(c, 10.0)
|
||||||
c = configBase.SettingRow(left, 'Machine depth', 'machine_depth', '205', 'Size of the machine in mm', type = 'preference')
|
c = configBase.SettingRow(left, 'Machine depth (mm)', 'machine_depth', '205', 'Size of the machine in mm', type = 'preference')
|
||||||
validators.validFloat(c, 10.0)
|
validators.validFloat(c, 10.0)
|
||||||
c = configBase.SettingRow(left, 'Machine height', 'machine_height', '200', 'Size of the machine in mm', type = 'preference')
|
c = configBase.SettingRow(left, 'Machine height (mm)', 'machine_height', '200', 'Size of the machine in mm', type = 'preference')
|
||||||
validators.validFloat(c, 10.0)
|
validators.validFloat(c, 10.0)
|
||||||
|
|
||||||
configBase.TitleRow(left, 'Communication settings')
|
configBase.TitleRow(left, 'Communication settings')
|
||||||
|
|
|
@ -19,7 +19,6 @@ from newui import profile
|
||||||
from newui import gcodeInterpreter
|
from newui import gcodeInterpreter
|
||||||
from newui import util3d
|
from newui import util3d
|
||||||
|
|
||||||
from fabmetheus_utilities import settings
|
|
||||||
from fabmetheus_utilities.fabmetheus_tools import fabmetheus_interpret
|
from fabmetheus_utilities.fabmetheus_tools import fabmetheus_interpret
|
||||||
from fabmetheus_utilities.vector3 import Vector3
|
from fabmetheus_utilities.vector3 import Vector3
|
||||||
|
|
||||||
|
@ -34,6 +33,7 @@ class previewPanel(wx.Panel):
|
||||||
self.init = 0
|
self.init = 0
|
||||||
self.triangleMesh = None
|
self.triangleMesh = None
|
||||||
self.gcode = None
|
self.gcode = None
|
||||||
|
self.modelFilename = None
|
||||||
self.machineSize = Vector3(float(profile.getPreference('machine_width')), float(profile.getPreference('machine_depth')), float(profile.getPreference('machine_height')))
|
self.machineSize = Vector3(float(profile.getPreference('machine_width')), float(profile.getPreference('machine_depth')), float(profile.getPreference('machine_height')))
|
||||||
self.machineCenter = Vector3(0, 0, 0)
|
self.machineCenter = Vector3(0, 0, 0)
|
||||||
|
|
||||||
|
@ -92,49 +92,61 @@ class previewPanel(wx.Panel):
|
||||||
self.moveModel()
|
self.moveModel()
|
||||||
self.glCanvas.Refresh()
|
self.glCanvas.Refresh()
|
||||||
|
|
||||||
def updateWallLineWidth(self, setting):
|
|
||||||
#TODO: this shouldn't be needed, you can calculate the line width from the E values combined with the steps_per_E and the filament diameter (reverse volumatric)
|
|
||||||
self.glCanvas.lineWidth = settings.calculateEdgeWidth(setting)
|
|
||||||
|
|
||||||
def updateInfillLineWidth(self, setting):
|
|
||||||
#TODO: this shouldn't be needed, you can calculate the line width from the E values combined with the steps_per_E and the filament diameter (reverse volumatric)
|
|
||||||
self.glCanvas.infillLineWidth = profile.getProfileSetting('nozzle_size')
|
|
||||||
|
|
||||||
def loadModelFile(self, filename):
|
def loadModelFile(self, filename):
|
||||||
|
if self.modelFilename != filename:
|
||||||
|
self.modelFileTime = None
|
||||||
|
self.gcodeFileTime = None
|
||||||
|
self.logFileTime = None
|
||||||
|
|
||||||
self.modelFilename = filename
|
self.modelFilename = filename
|
||||||
self.gcodeFilename = filename[: filename.rfind('.')] + "_export.gcode"
|
self.gcodeFilename = filename[: filename.rfind('.')] + "_export.gcode"
|
||||||
|
self.logFilename = filename[: filename.rfind('.')] + "_export.log"
|
||||||
#Do the STL file loading in a background thread so we don't block the UI.
|
#Do the STL file loading in a background thread so we don't block the UI.
|
||||||
thread = threading.Thread(target=self.DoModelLoad)
|
threading.Thread(target=self.doFileLoad).start()
|
||||||
thread.start()
|
|
||||||
|
|
||||||
def loadGCodeFile(self, filename):
|
def loadReModelFile(self, filename):
|
||||||
self.gcodeFilename = filename
|
#Only load this again if the filename matches the file we have already loaded (for auto loading GCode after slicing)
|
||||||
#Do the STL file loading in a background thread so we don't block the UI.
|
if self.modelFilename != filename:
|
||||||
thread = threading.Thread(target=self.DoGCodeLoad)
|
return
|
||||||
thread.start()
|
threading.Thread(target=self.doFileLoad).start()
|
||||||
|
|
||||||
def DoModelLoad(self):
|
def doFileLoad(self):
|
||||||
self.modelDirty = False
|
if os.path.isfile(self.modelFilename) and self.modelFileTime != os.stat(self.modelFilename).st_mtime:
|
||||||
triangleMesh = fabmetheus_interpret.getCarving(self.modelFilename)
|
self.modelFileTime = os.stat(self.modelFilename).st_mtime
|
||||||
triangleMesh.origonalVertexes = list(triangleMesh.vertexes)
|
triangleMesh = fabmetheus_interpret.getCarving(self.modelFilename)
|
||||||
for i in xrange(0, len(triangleMesh.origonalVertexes)):
|
triangleMesh.origonalVertexes = list(triangleMesh.vertexes)
|
||||||
triangleMesh.origonalVertexes[i] = triangleMesh.origonalVertexes[i].copy()
|
for i in xrange(0, len(triangleMesh.origonalVertexes)):
|
||||||
triangleMesh.getMinimumZ()
|
triangleMesh.origonalVertexes[i] = triangleMesh.origonalVertexes[i].copy()
|
||||||
self.triangleMesh = triangleMesh
|
triangleMesh.getMinimumZ()
|
||||||
self.updateModelTransform()
|
self.modelDirty = False
|
||||||
wx.CallAfter(self.updateToolbar)
|
self.errorList = []
|
||||||
wx.CallAfter(self.glCanvas.Refresh)
|
self.triangleMesh = triangleMesh
|
||||||
|
self.updateModelTransform()
|
||||||
|
wx.CallAfter(self.updateToolbar)
|
||||||
|
wx.CallAfter(self.glCanvas.Refresh)
|
||||||
|
|
||||||
if os.path.isfile(self.gcodeFilename):
|
if os.path.isfile(self.gcodeFilename) and self.gcodeFileTime != os.stat(self.gcodeFilename).st_mtime:
|
||||||
self.DoGCodeLoad()
|
self.gcodeFileTime = os.stat(self.gcodeFilename).st_mtime
|
||||||
|
gcode = gcodeInterpreter.gcode(self.gcodeFilename)
|
||||||
|
self.gcodeDirty = False
|
||||||
|
self.errorList = []
|
||||||
|
self.gcode = gcode
|
||||||
|
self.gcodeDirty = True
|
||||||
|
wx.CallAfter(self.updateToolbar)
|
||||||
|
wx.CallAfter(self.glCanvas.Refresh)
|
||||||
|
elif not os.path.isfile(self.gcodeFilename):
|
||||||
|
self.gcode = None
|
||||||
|
|
||||||
def DoGCodeLoad(self):
|
if os.path.isfile(self.logFilename):
|
||||||
gcode = gcodeInterpreter.gcode(self.gcodeFilename)
|
errorList = []
|
||||||
self.gcodeDirty = False
|
for line in open(self.logFilename, "rt"):
|
||||||
self.gcode = gcode
|
res = re.search('Model error\(([a-z ]*)\): \(([0-9\.\-e]*), ([0-9\.\-e]*), ([0-9\.\-e]*)\) \(([0-9\.\-e]*), ([0-9\.\-e]*), ([0-9\.\-e]*)\)', line)
|
||||||
self.gcodeDirty = True
|
if res != None:
|
||||||
wx.CallAfter(self.updateToolbar)
|
v1 = util3d.Vector3(float(res.group(2)), float(res.group(3)), float(res.group(4)))
|
||||||
wx.CallAfter(self.glCanvas.Refresh)
|
v2 = util3d.Vector3(float(res.group(5)), float(res.group(6)), float(res.group(7)))
|
||||||
|
errorList.append([v1, v2])
|
||||||
|
self.errorList = errorList
|
||||||
|
wx.CallAfter(self.glCanvas.Refresh)
|
||||||
|
|
||||||
def updateToolbar(self):
|
def updateToolbar(self):
|
||||||
self.layerSpin.Show(self.gcode != None)
|
self.layerSpin.Show(self.gcode != None)
|
||||||
|
@ -216,8 +228,6 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
|
||||||
self.zoom = 150
|
self.zoom = 150
|
||||||
self.offsetX = 0
|
self.offsetX = 0
|
||||||
self.offsetY = 0
|
self.offsetY = 0
|
||||||
self.lineWidth = 0.4
|
|
||||||
self.fillLineWidth = 0.4
|
|
||||||
self.view3D = True
|
self.view3D = True
|
||||||
self.modelDisplayList = None
|
self.modelDisplayList = None
|
||||||
self.gcodeDisplayList = None
|
self.gcodeDisplayList = None
|
||||||
|
@ -315,7 +325,22 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
|
||||||
if self.parent.gcodeDirty:
|
if self.parent.gcodeDirty:
|
||||||
self.parent.gcodeDirty = False
|
self.parent.gcodeDirty = False
|
||||||
glNewList(self.gcodeDisplayList, GL_COMPILE)
|
glNewList(self.gcodeDisplayList, GL_COMPILE)
|
||||||
|
prevLayerZ = 0.0
|
||||||
|
curLayerZ = 0.0
|
||||||
|
|
||||||
|
layerThickness = 0.0
|
||||||
|
filamentRadius = float(profile.getProfileSetting('filament_diameter')) / 2
|
||||||
|
filamentArea = math.pi * filamentRadius * filamentRadius
|
||||||
|
lineWidth = float(profile.getPreference('nozzle_size')) / 2
|
||||||
|
|
||||||
|
curLayerNum = 0
|
||||||
for path in self.parent.gcode.pathList:
|
for path in self.parent.gcode.pathList:
|
||||||
|
if path['layerNr'] != curLayerNum:
|
||||||
|
prevLayerZ = curLayerZ
|
||||||
|
curLayerZ = path['list'][1].z
|
||||||
|
curLayerNum = path['layerNr']
|
||||||
|
layerThickness = curLayerZ - prevLayerZ
|
||||||
|
|
||||||
c = 1.0
|
c = 1.0
|
||||||
if path['layerNr'] != self.parent.layerSpin.GetValue():
|
if path['layerNr'] != self.parent.layerSpin.GetValue():
|
||||||
if path['layerNr'] < self.parent.layerSpin.GetValue():
|
if path['layerNr'] < self.parent.layerSpin.GetValue():
|
||||||
|
@ -336,17 +361,16 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
|
||||||
if path['type'] == 'retract':
|
if path['type'] == 'retract':
|
||||||
glColor3f(0,c,c)
|
glColor3f(0,c,c)
|
||||||
if c > 0.4 and path['type'] == 'extrude':
|
if c > 0.4 and path['type'] == 'extrude':
|
||||||
if path['pathType'] == 'FILL':
|
|
||||||
lineWidth = self.fillLineWidth / 2
|
|
||||||
else:
|
|
||||||
lineWidth = self.lineWidth / 2
|
|
||||||
for i in xrange(0, len(path['list'])-1):
|
for i in xrange(0, len(path['list'])-1):
|
||||||
v0 = path['list'][i]
|
v0 = path['list'][i]
|
||||||
v1 = path['list'][i+1]
|
v1 = path['list'][i+1]
|
||||||
|
|
||||||
|
# Calculate line width from ePerDistance (needs layer thickness and filament diameter)
|
||||||
dist = (v0 - v1).vsize()
|
dist = (v0 - v1).vsize()
|
||||||
if dist > 0:
|
if dist > 0 and layerThickness > 0:
|
||||||
extrusionMMperDist = (v1.e - v0.e) / (v0 - v1).vsize() / self.parent.gcode.stepsPerE
|
extrusionMMperDist = (v1.e - v0.e) / (v0 - v1).vsize()
|
||||||
#TODO: Calculate line width from ePerDistance (needs layer thickness, steps_per_E and filament diameter)
|
lineWidth = extrusionMMperDist * filamentArea / layerThickness / 2
|
||||||
|
|
||||||
normal = (v0 - v1).cross(util3d.Vector3(0,0,1))
|
normal = (v0 - v1).cross(util3d.Vector3(0,0,1))
|
||||||
normal.normalize()
|
normal.normalize()
|
||||||
v2 = v0 + normal * lineWidth
|
v2 = v0 + normal * lineWidth
|
||||||
|
@ -394,12 +418,12 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
|
||||||
modelSize = self.parent.triangleMesh.getCarveCornerMaximum() - self.parent.triangleMesh.getCarveCornerMinimum()
|
modelSize = self.parent.triangleMesh.getCarveCornerMaximum() - self.parent.triangleMesh.getCarveCornerMinimum()
|
||||||
glNewList(self.modelDisplayList, GL_COMPILE)
|
glNewList(self.modelDisplayList, GL_COMPILE)
|
||||||
glPushMatrix()
|
glPushMatrix()
|
||||||
glTranslate(-(modelSize.x+self.lineWidth*15)*(multiX-1)/2,-(modelSize.y+self.lineWidth*15)*(multiY-1)/2, 0)
|
glTranslate(-(modelSize.x+10)*(multiX-1)/2,-(modelSize.y+10)*(multiY-1)/2, 0)
|
||||||
for mx in xrange(0, multiX):
|
for mx in xrange(0, multiX):
|
||||||
for my in xrange(0, multiY):
|
for my in xrange(0, multiY):
|
||||||
for face in self.parent.triangleMesh.faces:
|
for face in self.parent.triangleMesh.faces:
|
||||||
glPushMatrix()
|
glPushMatrix()
|
||||||
glTranslate((modelSize.x+self.lineWidth*15)*mx,(modelSize.y+self.lineWidth*15)*my, 0)
|
glTranslate((modelSize.x+10)*mx,(modelSize.y+10)*my, 0)
|
||||||
glBegin(GL_TRIANGLES)
|
glBegin(GL_TRIANGLES)
|
||||||
v1 = self.parent.triangleMesh.vertexes[face.vertexIndexes[0]]
|
v1 = self.parent.triangleMesh.vertexes[face.vertexIndexes[0]]
|
||||||
v2 = self.parent.triangleMesh.vertexes[face.vertexIndexes[1]]
|
v2 = self.parent.triangleMesh.vertexes[face.vertexIndexes[1]]
|
||||||
|
@ -475,6 +499,16 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
|
||||||
elif self.viewMode == "Model - Normal":
|
elif self.viewMode == "Model - Normal":
|
||||||
glEnable(GL_LIGHTING)
|
glEnable(GL_LIGHTING)
|
||||||
glCallList(self.modelDisplayList)
|
glCallList(self.modelDisplayList)
|
||||||
|
|
||||||
|
glDisable(GL_LIGHTING)
|
||||||
|
glDisable(GL_DEPTH_TEST)
|
||||||
|
glColor3f(1,0,0)
|
||||||
|
glTranslate(self.parent.machineCenter.x, self.parent.machineCenter.y, 0)
|
||||||
|
glBegin(GL_LINES)
|
||||||
|
for err in self.parent.errorList:
|
||||||
|
glVertex3f(err[0].x, err[0].y, err[0].z)
|
||||||
|
glVertex3f(err[1].x, err[1].y, err[1].z)
|
||||||
|
glEnd()
|
||||||
glFlush()
|
glFlush()
|
||||||
|
|
||||||
def InitGL(self):
|
def InitGL(self):
|
||||||
|
|
|
@ -21,7 +21,6 @@ profileDefaultSettings = {
|
||||||
'filament_density': '1.00',
|
'filament_density': '1.00',
|
||||||
'machine_center_x': '100',
|
'machine_center_x': '100',
|
||||||
'machine_center_y': '100',
|
'machine_center_y': '100',
|
||||||
'nozzle_size': '0.4',
|
|
||||||
'retraction_min_travel': '5.0',
|
'retraction_min_travel': '5.0',
|
||||||
'retraction_speed': '13.5',
|
'retraction_speed': '13.5',
|
||||||
'retraction_amount': '0.0',
|
'retraction_amount': '0.0',
|
||||||
|
@ -46,6 +45,13 @@ profileDefaultSettings = {
|
||||||
'support_rate': '100',
|
'support_rate': '100',
|
||||||
'support_distance': '0.5',
|
'support_distance': '0.5',
|
||||||
'joris': 'False',
|
'joris': 'False',
|
||||||
|
'enable_raft': 'False',
|
||||||
|
'cool_min_feedrate': '5',
|
||||||
|
'bridge_speed': '100',
|
||||||
|
'bridge_material_amount': '100',
|
||||||
|
'raft_margin': '5',
|
||||||
|
'raft_base_material_amount': '100',
|
||||||
|
'raft_interface_material_amount': '100',
|
||||||
}
|
}
|
||||||
preferencesDefaultSettings = {
|
preferencesDefaultSettings = {
|
||||||
'wizardDone': 'False',
|
'wizardDone': 'False',
|
||||||
|
@ -53,6 +59,7 @@ preferencesDefaultSettings = {
|
||||||
'machine_width': '205',
|
'machine_width': '205',
|
||||||
'machine_depth': '205',
|
'machine_depth': '205',
|
||||||
'machine_height': '200',
|
'machine_height': '200',
|
||||||
|
'nozzle_size': '0.4',
|
||||||
'steps_per_e': '0',
|
'steps_per_e': '0',
|
||||||
'serial_port': 'AUTO',
|
'serial_port': 'AUTO',
|
||||||
'serial_baud': '250000',
|
'serial_baud': '250000',
|
||||||
|
|
|
@ -75,14 +75,16 @@ class sliceProgessPanel(wx.Panel):
|
||||||
|
|
||||||
def OnSliceDone(self, result):
|
def OnSliceDone(self, result):
|
||||||
self.progressGauge.Destroy()
|
self.progressGauge.Destroy()
|
||||||
|
self.abortButton.Destroy()
|
||||||
self.progressLog = result.progressLog
|
self.progressLog = result.progressLog
|
||||||
self.sizer.Remove(self.abortButton)
|
|
||||||
self.logButton = wx.Button(self, -1, "Show Log")
|
self.logButton = wx.Button(self, -1, "Show Log")
|
||||||
|
self.abortButton = wx.Button(self, -1, "X", style=wx.BU_EXACTFIT)
|
||||||
self.Bind(wx.EVT_BUTTON, self.OnShowLog, self.logButton)
|
self.Bind(wx.EVT_BUTTON, self.OnShowLog, self.logButton)
|
||||||
|
self.Bind(wx.EVT_BUTTON, self.OnAbort, self.abortButton)
|
||||||
self.sizer.Add(self.logButton, 0)
|
self.sizer.Add(self.logButton, 0)
|
||||||
if result.returnCode == 0:
|
if result.returnCode == 0:
|
||||||
self.statusText.SetLabel("Ready.")
|
self.statusText.SetLabel("Ready.")
|
||||||
self.showButton = wx.Button(self, -1, "Show GCode")
|
self.showButton = wx.Button(self, -1, "Show result")
|
||||||
self.Bind(wx.EVT_BUTTON, self.OnShowGCode, self.showButton)
|
self.Bind(wx.EVT_BUTTON, self.OnShowGCode, self.showButton)
|
||||||
self.sizer.Add(self.showButton, 0)
|
self.sizer.Add(self.showButton, 0)
|
||||||
else:
|
else:
|
||||||
|
@ -91,6 +93,7 @@ class sliceProgessPanel(wx.Panel):
|
||||||
self.sizer.Layout()
|
self.sizer.Layout()
|
||||||
self.Layout()
|
self.Layout()
|
||||||
self.abort = True
|
self.abort = True
|
||||||
|
self.mainWindow.preview3d.loadReModelFile(self.filename)
|
||||||
|
|
||||||
def SetProgress(self, stepName, layer, maxLayer):
|
def SetProgress(self, stepName, layer, maxLayer):
|
||||||
if self.prevStep != stepName:
|
if self.prevStep != stepName:
|
||||||
|
@ -133,7 +136,6 @@ class WorkerThread(threading.Thread):
|
||||||
return
|
return
|
||||||
line = p.stdout.readline()
|
line = p.stdout.readline()
|
||||||
self.returnCode = p.wait()
|
self.returnCode = p.wait()
|
||||||
self.gcodeFilename = self.filename[: self.filename.rfind('.')] + "_export.gcode"
|
|
||||||
logfile = open(self.filename[: self.filename.rfind('.')] + "_export.log", "w")
|
logfile = open(self.filename[: self.filename.rfind('.')] + "_export.log", "w")
|
||||||
for logLine in self.progressLog:
|
for logLine in self.progressLog:
|
||||||
logfile.write(logLine)
|
logfile.write(logLine)
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import __init__
|
import __init__
|
||||||
|
|
||||||
|
import types
|
||||||
|
import math
|
||||||
|
|
||||||
from newui import profile
|
from newui import profile
|
||||||
|
|
||||||
SUCCESS = 0
|
SUCCESS = 0
|
||||||
|
@ -53,8 +56,12 @@ class warningAbove():
|
||||||
def validate(self):
|
def validate(self):
|
||||||
try:
|
try:
|
||||||
f = float(self.setting.GetValue())
|
f = float(self.setting.GetValue())
|
||||||
if f >= self.minValueForWarning:
|
if isinstance(self.minValueForWarning, types.FunctionType):
|
||||||
return WARNING, self.warningMessage
|
if f >= self.minValueForWarning():
|
||||||
|
return WARNING, self.warningMessage % (self.minValueForWarning())
|
||||||
|
else:
|
||||||
|
if f >= self.minValueForWarning:
|
||||||
|
return WARNING, self.warningMessage
|
||||||
return SUCCESS, ''
|
return SUCCESS, ''
|
||||||
except ValueError:
|
except ValueError:
|
||||||
#We already have an error by the int/float validator in this case.
|
#We already have an error by the int/float validator in this case.
|
||||||
|
@ -68,7 +75,7 @@ class wallThicknessValidator():
|
||||||
def validate(self):
|
def validate(self):
|
||||||
try:
|
try:
|
||||||
wallThickness = float(self.setting.GetValue())
|
wallThickness = float(self.setting.GetValue())
|
||||||
nozzleSize = float(profile.getProfileSetting('nozzle_size'))
|
nozzleSize = float(profile.getPreference('nozzle_size'))
|
||||||
if wallThickness <= nozzleSize * 0.5:
|
if wallThickness <= nozzleSize * 0.5:
|
||||||
return ERROR, 'Trying to print walls thinner then the half of your nozzle size, this will not produce anything usable'
|
return ERROR, 'Trying to print walls thinner then the half of your nozzle size, this will not produce anything usable'
|
||||||
if wallThickness <= nozzleSize * 0.85:
|
if wallThickness <= nozzleSize * 0.85:
|
||||||
|
@ -86,3 +93,27 @@ class wallThicknessValidator():
|
||||||
#We already have an error by the int/float validator in this case.
|
#We already have an error by the int/float validator in this case.
|
||||||
return SUCCESS, ''
|
return SUCCESS, ''
|
||||||
|
|
||||||
|
class printSpeedValidator():
|
||||||
|
def __init__(self, setting):
|
||||||
|
self.setting = setting
|
||||||
|
self.setting.validators.append(self)
|
||||||
|
|
||||||
|
def validate(self):
|
||||||
|
try:
|
||||||
|
nozzleSize = float(profile.getPreference('nozzle_size'))
|
||||||
|
layerHeight = float(profile.getProfileSetting('layer_height'))
|
||||||
|
printSpeed = float(profile.getProfileSetting('print_speed'))
|
||||||
|
|
||||||
|
printVolumePerMM = layerHeight * nozzleSize
|
||||||
|
printVolumePerSecond = printVolumePerMM * printSpeed
|
||||||
|
#Using 10mm3 per second with a 0.4mm nozzle (normal max according to Joergen Geerds)
|
||||||
|
maxPrintVolumePerSecond = 10 / (math.pi*(0.2*0.2)) * (math.pi*(nozzleSize/2*nozzleSize/2))
|
||||||
|
|
||||||
|
if printVolumePerSecond > maxPrintVolumePerSecond:
|
||||||
|
return WARNING, 'You are trying to print more then %.1fmm^3 of filament per second. This might cause filament slipping. (You are printing at %0.1fmm^3 per second)' % (maxPrintVolumePerSecond, printVolumePerSecond)
|
||||||
|
|
||||||
|
return SUCCESS, ''
|
||||||
|
except ValueError:
|
||||||
|
#We already have an error by the int/float validator in this case.
|
||||||
|
return SUCCESS, ''
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
M104 S0 ;extruder heat off
|
M104 S0 ;extruder heat off
|
||||||
M106 ;fan on
|
|
||||||
G91 ;relative positioning
|
G91 ;relative positioning
|
||||||
G1 Z+10 E-5 F400 ;move Z up a bit and retract filament by 5mm
|
G1 Z+10 E-5 F400 ;move Z up a bit and retract filament by 5mm
|
||||||
G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way
|
G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way
|
||||||
M84 ;steppers off
|
M84 ;steppers off
|
||||||
G90 ;absolute positioning
|
G90 ;absolute positioning
|
||||||
|
M107 ;fan off
|
||||||
|
|
||||||
|
|
|
@ -215,6 +215,16 @@ class CarveSkein:
|
||||||
mat10 = math.sin(rotate) * scaleX
|
mat10 = math.sin(rotate) * scaleX
|
||||||
mat11 = math.cos(rotate) * scaleY
|
mat11 = math.cos(rotate) * scaleY
|
||||||
|
|
||||||
|
minZ = carving.getMinimumZ()
|
||||||
|
minSize = carving.getCarveCornerMinimum()
|
||||||
|
maxSize = carving.getCarveCornerMaximum()
|
||||||
|
for v in carving.vertexes:
|
||||||
|
v.z -= minZ
|
||||||
|
v.x -= minSize.x + (maxSize.x - minSize.x) / 2
|
||||||
|
v.y -= minSize.y + (maxSize.y - minSize.y) / 2
|
||||||
|
#v.x += self.machineCenter.x
|
||||||
|
#v.y += self.machineCenter.y
|
||||||
|
|
||||||
for i in xrange(0, len(carving.vertexes)):
|
for i in xrange(0, len(carving.vertexes)):
|
||||||
carving.vertexes[i] = Vector3(
|
carving.vertexes[i] = Vector3(
|
||||||
carving.vertexes[i].x * mat00 + carving.vertexes[i].y * mat01,
|
carving.vertexes[i].x * mat00 + carving.vertexes[i].y * mat01,
|
||||||
|
|
|
@ -162,6 +162,8 @@ class CoolRepository:
|
||||||
self.turnFanOffAtEnding = settings.BooleanSetting().getFromValue('Turn Fan Off at Ending', self, True)
|
self.turnFanOffAtEnding = settings.BooleanSetting().getFromValue('Turn Fan Off at Ending', self, True)
|
||||||
self.executeTitle = 'Cool'
|
self.executeTitle = 'Cool'
|
||||||
|
|
||||||
|
self.minimumFeedRate = settings.FloatSpin().getFromValue(0.0, 'Minimum feed rate (mm/s):', self, 10.0, 5.0)
|
||||||
|
|
||||||
def execute(self):
|
def execute(self):
|
||||||
'Cool button has been clicked.'
|
'Cool button has been clicked.'
|
||||||
fileNames = skeinforge_polyfile.getFileOrDirectoryTypesUnmodifiedGcode(
|
fileNames = skeinforge_polyfile.getFileOrDirectoryTypesUnmodifiedGcode(
|
||||||
|
@ -188,6 +190,7 @@ class CoolSkein:
|
||||||
self.oldFlowRateString = None
|
self.oldFlowRateString = None
|
||||||
self.oldLocation = None
|
self.oldLocation = None
|
||||||
self.oldTemperature = None
|
self.oldTemperature = None
|
||||||
|
self.minFeedrate = 0
|
||||||
|
|
||||||
def addCoolOrbits(self, remainingOrbitTime):
|
def addCoolOrbits(self, remainingOrbitTime):
|
||||||
'Add the minimum radius cool orbits.'
|
'Add the minimum radius cool orbits.'
|
||||||
|
@ -245,7 +248,7 @@ class CoolSkein:
|
||||||
def getCoolMove(self, line, location, splitLine):
|
def getCoolMove(self, line, location, splitLine):
|
||||||
'Get cool line according to time spent on layer.'
|
'Get cool line according to time spent on layer.'
|
||||||
self.feedRateMinute = gcodec.getFeedRateMinute(self.feedRateMinute, splitLine)
|
self.feedRateMinute = gcodec.getFeedRateMinute(self.feedRateMinute, splitLine)
|
||||||
return self.distanceFeedRate.getLineWithFeedRate(self.multiplier * self.feedRateMinute, line, splitLine)
|
return self.distanceFeedRate.getLineWithFeedRate(max(self.minFeedrate, self.multiplier * self.feedRateMinute), line, splitLine)
|
||||||
|
|
||||||
def getCraftedGcode(self, gcodeText, repository):
|
def getCraftedGcode(self, gcodeText, repository):
|
||||||
'Parse gcode text and store the cool gcode.'
|
'Parse gcode text and store the cool gcode.'
|
||||||
|
@ -255,6 +258,7 @@ class CoolSkein:
|
||||||
self.halfCorner = complex(repository.minimumOrbitalRadius.value, repository.minimumOrbitalRadius.value)
|
self.halfCorner = complex(repository.minimumOrbitalRadius.value, repository.minimumOrbitalRadius.value)
|
||||||
self.lines = archive.getTextLines(gcodeText)
|
self.lines = archive.getTextLines(gcodeText)
|
||||||
self.minimumArea = 4.0 * repository.minimumOrbitalRadius.value * repository.minimumOrbitalRadius.value
|
self.minimumArea = 4.0 * repository.minimumOrbitalRadius.value * repository.minimumOrbitalRadius.value
|
||||||
|
self.minFeedrate = repository.minimumFeedRate.value * 60
|
||||||
self.parseInitialization()
|
self.parseInitialization()
|
||||||
self.boundingRectangle = gcodec.BoundingRectangle().getFromGcodeLines(self.lines[self.lineIndex :], 0.5 * self.edgeWidth)
|
self.boundingRectangle = gcodec.BoundingRectangle().getFromGcodeLines(self.lines[self.lineIndex :], 0.5 * self.edgeWidth)
|
||||||
margin = 0.2 * self.edgeWidth
|
margin = 0.2 * self.edgeWidth
|
||||||
|
|
|
@ -68,6 +68,7 @@ class GcodeSmallSkein:
|
||||||
self.lastFeedRateString = None
|
self.lastFeedRateString = None
|
||||||
self.lastZString = None
|
self.lastZString = None
|
||||||
self.output = cStringIO.StringIO()
|
self.output = cStringIO.StringIO()
|
||||||
|
self.layerNr = 0
|
||||||
|
|
||||||
def getCraftedGcode( self, gcodeText ):
|
def getCraftedGcode( self, gcodeText ):
|
||||||
"Parse gcode text and store the gcode."
|
"Parse gcode text and store the gcode."
|
||||||
|
@ -125,4 +126,7 @@ class GcodeSmallSkein:
|
||||||
self.output.write(';TYPE:FILL\n');
|
self.output.write(';TYPE:FILL\n');
|
||||||
elif line.startswith('(<alteration>'):
|
elif line.startswith('(<alteration>'):
|
||||||
self.output.write(';TYPE:CUSTOM\n');
|
self.output.write(';TYPE:CUSTOM\n');
|
||||||
|
elif line.startswith('(<layer>'):
|
||||||
|
self.output.write(';LAYER:%d\n' % (self.layerNr));
|
||||||
|
self.layerNr += 1
|
||||||
|
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
python2.7 -c 'import wx'
|
python -c 'import wx'
|
||||||
if [ $? != 0 ]; then
|
if [ $? != 0 ]; then
|
||||||
echo "Requires wx. Download and install (the Cocoa/64-bit variant) from:"
|
echo "Requires wx. Download and install (the Cocoa/64-bit variant) from:"
|
||||||
echo " http://www.wxpython.org/download.php"
|
echo " http://www.wxpython.org/download.php"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
python2.7 -c 'import serial'
|
python -c 'import serial'
|
||||||
if [ $? != 0 ]; then
|
if [ $? != 0 ]; then
|
||||||
echo "Requires pyserial."
|
echo "Requires pyserial."
|
||||||
echo " sudo easy_install-2.7 pyserial"
|
echo " sudo easy_install pyserial"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
SCRIPT_DIR=`dirname $0`
|
SCRIPT_DIR=`dirname $0`
|
||||||
python2.7 ${SCRIPT_DIR}/Printrun/pronterface.py
|
python ${SCRIPT_DIR}/Printrun/pronterface.py
|
||||||
|
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
python2.7 -c 'import OpenGL'
|
python -c 'import OpenGL'
|
||||||
if [ $? != 0 ]; then
|
if [ $? != 0 ]; then
|
||||||
echo "Requires PyOpenGL"
|
echo "Requires PyOpenGL"
|
||||||
echo " sudo easy_install-2.7 PyOpenGL"
|
echo " sudo easy_install PyOpenGL"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
python2.7 -c 'import wx'
|
python -c 'import wx'
|
||||||
if [ $? != 0 ]; then
|
if [ $? != 0 ]; then
|
||||||
echo "Requires wx. Download and install (the Cocoa/64-bit variant) from:"
|
echo "Requires wx. Download and install (the Cocoa/64-bit variant) from:"
|
||||||
echo " http://www.wxpython.org/download.php"
|
echo " http://www.wxpython.org/download.php"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
python2.7 -c 'import serial'
|
python -c 'import serial'
|
||||||
if [ $? != 0 ]; then
|
if [ $? != 0 ]; then
|
||||||
echo "Requires pyserial."
|
echo "Requires pyserial."
|
||||||
echo " sudo easy_install-2.7 pyserial"
|
echo " sudo easy_install pyserial"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
SCRIPT_DIR=`dirname $0`
|
SCRIPT_DIR=`dirname $0`
|
||||||
python2.7 ${SCRIPT_DIR}/SkeinPyPy/skeinpypy.py
|
python ${SCRIPT_DIR}/SkeinPyPy/skeinpypy.py
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue