Compare commits
163 Commits
Author | SHA1 | Date | |
---|---|---|---|
58384017f2 | |||
01f7fe633c | |||
a9a9a89811 | |||
7e2251d8ac | |||
1903a6e347 | |||
2fb75a2d83 | |||
0da175a8cd | |||
f01370e4fd | |||
751df2fe8c | |||
8be4bb11d8 | |||
342e714ae2 | |||
fb31b81f7e | |||
8204995749 | |||
85c14bb05a | |||
c398a5a133 | |||
afaedaa0b2 | |||
0aa41e9a64 | |||
88df2e14cb | |||
180f32f25c | |||
300a2c1476 | |||
703bd01931 | |||
75a65eeab2 | |||
38a9f153f7 | |||
3c5dae8c7b | |||
85345969d3 | |||
ac1e5d2846 | |||
11b4bbc07e | |||
7f5b8aed99 | |||
c989e2fdab | |||
d3dcb5de85 | |||
9cca35d49f | |||
7123bfecd3 | |||
c8ac770983 | |||
aa031036ee | |||
a7d002d949 | |||
93fd8c8c78 | |||
1765ca2d35 | |||
1ab7ae6cfa | |||
3acf4e9ac5 | |||
ef5fa9ae82 | |||
e1f7a5b8cf | |||
2c73bfc813 | |||
d78d9c8686 | |||
2157af3e63 | |||
eac3e183c3 | |||
785ddff706 | |||
e07d6e3a31 | |||
763ad3f763 | |||
919a03951c | |||
9e427898ae | |||
60bf3a17d3 | |||
0529759a80 | |||
b07f157181 | |||
2f5f7d4133 | |||
e6e1dce59f | |||
43a9d03231 | |||
c0f6cd3651 | |||
f1445c6e89 | |||
04275ee35c | |||
f8d0594eca | |||
5be3b31e00 | |||
84c1079e50 | |||
6320379d02 | |||
b166f6034e | |||
d07f672b28 | |||
363e076f36 | |||
8bf6f265f7 | |||
217958aec3 | |||
367b1b0d1a | |||
6836852122 | |||
944098b9f9 | |||
539cf3d73e | |||
4b3e7cfb7d | |||
b144744509 | |||
e591bed6ad | |||
6a4e64eac0 | |||
f7dd14ff7b | |||
bfd34cedd6 | |||
8e1c075911 | |||
a02f364a4c | |||
48fee2c215 | |||
5780d1982c | |||
6fb08f0f7b | |||
13f8659b98 | |||
edc9d17a8c | |||
c7a3f5bbd0 | |||
41d5052583 | |||
07ddec343a | |||
5a9a5e997a | |||
55b6549999 | |||
fcdc350e40 | |||
9dedbeae1b | |||
124d8a0fd8 | |||
81fcbb6916 | |||
d436bd1227 | |||
cb648019bb | |||
11a88a9d94 | |||
92178f3371 | |||
3c86ae286f | |||
1b6d84a9b8 | |||
2d81be3b24 | |||
14f57f54bf | |||
e7c697c24d | |||
7ac63f038c | |||
557926d631 | |||
da62d51615 | |||
3918857fcc | |||
f1dcebdd88 | |||
1d35c78737 | |||
d17326ad7a | |||
4948a88833 | |||
b73b924ec4 | |||
641d292c33 | |||
223275fd65 | |||
6e42e816d3 | |||
5678cf5df9 | |||
67ec4accb9 | |||
fa867c3a34 | |||
7865876e64 | |||
113b42656c | |||
7557380722 | |||
3e2a1ec9e1 | |||
09db613620 | |||
bacb4673c9 | |||
e649a167cd | |||
997e8efb20 | |||
1f380ce959 | |||
8cbf601131 | |||
bdbb2a8c2f | |||
5e90cb4434 | |||
1bf1eb16f0 | |||
fbc6fc30a7 | |||
fee2329ca7 | |||
5656031e2d | |||
e87e1767b5 | |||
2d7a108e79 | |||
193f66fd2d | |||
5768fcaf35 | |||
2c22ea925f | |||
4e4aa266d5 | |||
05bdbd7b40 | |||
085ab0844b | |||
4ad229cb37 | |||
170ee33848 | |||
162e437527 | |||
ab13cb9047 | |||
80454f55c7 | |||
30e576345b | |||
dfc4c83718 | |||
e25d273765 | |||
903e98ca22 | |||
8a64085288 | |||
22ab1cba8d | |||
064d6f9411 | |||
330aff8082 | |||
0886a5d4e1 | |||
aa636aef96 | |||
1865ced312 | |||
b940befe85 | |||
c6bae5e17b | |||
83e4898eab | |||
7bdb9683c9 | |||
3c675892aa |
@ -1,4 +1,3 @@
|
||||
/// <reference path="../node_modules/pxt-core/typings/globals/node/index.d.ts"/>
|
||||
/// <reference path="../node_modules/pxt-core/built/pxtlib.d.ts" />
|
||||
|
||||
import * as fs from 'fs';
|
||||
|
@ -1,4 +1,3 @@
|
||||
/// <reference path="../node_modules/pxt-core/typings/globals/node/index.d.ts"/>
|
||||
/// <reference path="../node_modules/pxt-core/built/pxtlib.d.ts" />
|
||||
|
||||
import * as path from "path";
|
||||
|
@ -8,6 +8,7 @@
|
||||
"module": "commonjs",
|
||||
"rootDir": ".",
|
||||
"newLine": "LF",
|
||||
"sourceMap": false
|
||||
"sourceMap": false,
|
||||
"types": ["node"]
|
||||
}
|
||||
}
|
||||
|
BIN
docs/static/MC-LEGO-loader-eyes.gif
vendored
Normal file
After Width: | Height: | Size: 69 KiB |
30
docs/static/fonts/icons/iconfont.css
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
@font-face {
|
||||
font-family: "iconfont";
|
||||
src: url("iconfont.eot?e05611aaee246c1da118a83eaf515de9?#iefix") format("embedded-opentype"),
|
||||
url("iconfont.woff2?e05611aaee246c1da118a83eaf515de9") format("woff2"),
|
||||
url("iconfont.woff?e05611aaee246c1da118a83eaf515de9") format("woff");
|
||||
}
|
||||
|
||||
.icon {
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.icon:before {
|
||||
font-family: iconfont !important;
|
||||
font-style: normal;
|
||||
font-weight: normal !important;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.icon-ultrasonic:before {
|
||||
content: "\f101";
|
||||
}
|
||||
.icon-color:before {
|
||||
content: "\f102";
|
||||
}
|
||||
.icon-touch:before {
|
||||
content: "\f103";
|
||||
}
|
||||
.icon-gyro:before {
|
||||
content: "\f104";
|
||||
}
|
BIN
docs/static/fonts/icons/iconfont.eot
vendored
Normal file
24
docs/static/fonts/icons/iconfont.svg
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<font id="iconfont" horiz-adv-x="40">
|
||||
<font-face font-family="iconfont"
|
||||
units-per-em="40" ascent="40"
|
||||
descent="0" />
|
||||
<missing-glyph horiz-adv-x="0" />
|
||||
<glyph glyph-name="ultrasonic"
|
||||
unicode=""
|
||||
horiz-adv-x="40" d=" M26.8 13H13.1C15.6 14.6 17 17.3 17 20.2C17 21.8 16.6 23.3 15.8 24.7S13.8 27 12.4 27.8H27.6C26.2 27 25.1 26.1 24.2 24.7S23 21.8 23 20.2C22.9 17.3 24.3 14.6 26.8 13L26.8 13L26.8 13z M8.6 12C4.1 12 0.4 15.7 0.4 20.2S4.1 28.4 8.6 28.4S16.8 24.7 16.8 20.2C16.7 15.7 13.1 12 8.6 12zM8.6 23.4C6.8 23.4 5.4 22 5.4 20.2S6.8 16.9 8.6 16.9S11.9 18.4 11.9 20.2S10.4 23.4 8.6 23.4z M31.4 12C26.9 12 23.2 15.7 23.2 20.2S26.9 28.4 31.4 28.4S39.6 24.7 39.6 20.2C39.5 15.7 35.9 12 31.4 12zM31.4 23.4C29.6 23.4 28.1 22 28.1 20.2S29.6 16.9 31.4 16.9S34.6 18.4 34.6 20.2S33.2 23.4 31.4 23.4z" />
|
||||
<glyph glyph-name="color"
|
||||
unicode=""
|
||||
horiz-adv-x="43.35195530726257" d=" M38.7 -0.1H4.7C3.4 -0.1 2.5 0.6 2.5 1.5V6.8H0.9A0.9608938547486034 0.9608938547486034 0 0 0 0 7.7V31.5A0.9608938547486034 0.9608938547486034 0 0 0 0.9 32.4H2.5V38.4C2.5 39.3 3.6 40 4.7 40H38.7C40 40 40.9 39.3 40.9 38.4V32.4H42.5A0.9608938547486034 0.9608938547486034 0 0 0 43.4 31.5V7.8A0.9608938547486034 0.9608938547486034 0 0 0 42.5 6.9H40.9V1.6C41.1 0.7 40 -0.1 38.7 -0.1zM21.7 35.1A11.374301675977657 11.374301675977657 0 0 1 13.6 15.5A4.916201117318437 4.916201117318437 0 0 1 13.4 13.7A8.268156424581006 8.268156424581006 0 0 1 29.9 13.7A4.916201117318437 4.916201117318437 0 0 1 29.7 15.5A12.379888268156424 12.379888268156424 0 0 1 33.1 23.6A11.1731843575419 11.1731843575419 0 0 1 21.7 35.1zM41.6 18.3V10.9H42.5V18.3zM1.1 18.3V10.9H2V18.3zM41.6 28.6V21.2H42.5V28.6zM1.1 28.6V21.2H2V28.6z M21.9 7.4A6.480446927374302 6.480446927374302 0 0 0 15.4 13.9A9.497206703910615 9.497206703910615 0 0 0 15.9 16.3A9.87709497206704 9.87709497206704 0 0 0 12.3 23.9A9.608938547486035 9.608938547486035 0 0 0 31.5 23.9A9.87709497206704 9.87709497206704 0 0 0 27.9 16.3A8.022346368715086 8.022346368715086 0 0 0 28.4 13.9A6.703910614525141 6.703910614525141 0 0 0 21.9 7.4zM21.9 16.3A2.4581005586592184 2.4581005586592184 0 1 1 24.4 13.9A2.837988826815643 2.837988826815643 0 0 1 21.9 16.3zM21.9 27.7A4.46927374301676 4.46927374301676 0 1 1 26.4 23.2A4.804469273743018 4.804469273743018 0 0 1 21.9 27.7z" />
|
||||
<glyph glyph-name="touch"
|
||||
unicode=""
|
||||
horiz-adv-x="40" d=" M34.3 3.3H4.9C3.8 3.3 2.8 3.9 2.8 4.8V9.3H1.5C1.1 9.3 0.7 9.7 0.7 10.1V30.5C0.7 30.9 1.1 31.3 1.5 31.3H2.8V36.6C2.8 37.4 3.7 38.1 4.9 38.1H16V36.6H22.7V38.1H34.2C35.3 38.1 36.3 37.5 36.3 36.6V31.3H37.6C37.9 31.3 38.3 30.9 38.3 30.5V10.1C38.3 9.7 37.9 9.3 37.6 9.3H36.3V4.8C36.3 3.9 35.3 3.3 34.3 3.3L34.3 3.3zM14.1 16.2C14.7 15.3 15.4 14.7 16.2 14.1V5.6H22.6V14.1C23.5 14.7 24.1 15.4 24.7 16.2H33.4V22.6H24.9C24.3 23.5 23.6 24.3 22.6 24.9V33.6H16.2V24.9C15.3 24.3 14.5 23.6 13.9 22.6H5.4V16.2H14.1L14.1 16.2zM36.6 19.2V13H37.4V19.2H36.6zM1.8 19.2V13H2.6V19.2H1.8zM36.6 28.1V21.9H37.4V28.1H36.6zM1.8 28.1V21.9H2.6V28.1H1.8zM19.4 15.4C18.8 15.4 18.5 15.4 18.1 15.6V17.1C18.1 17.5 17.9 17.7 17.5 17.7L17.5 17.7H16C15.8 18.1 15.6 18.6 15.6 19.2C15.6 19.8 15.6 20.3 16 20.7H17.3C18.1 20.7 18.1 21.6 18.1 21.6L18.1 21.6C18.1 21.8 18.1 22.4 18.1 22.9C18.5 23.1 19 23.1 19.4 23.1C20 23.1 20.5 23.1 21.1 22.9C21.1 22.5 21.1 22 21.1 21.6L21.1 21.6V21.4C21.1 21 21.3 20.8 21.7 20.8C21.7 20.8 21.7 20.8 21.9 20.8L21.9 20.8H23.4C23.8 20.4 23.8 19.9 23.8 19.3S23.6 18.2 23.4 17.8L23.4 17.8C23 17.8 22.5 17.6 22.1 17.6C21.7 17.6 21.3 17.4 21.3 17V15.5C20.7 15.3 20.4 15.3 19.8 15.3C19.4 15.4 19.4 15.4 19.4 15.4z" />
|
||||
<glyph glyph-name="gyro"
|
||||
unicode=""
|
||||
horiz-adv-x="23.578015492438215" d=" M17 0H6.4A5.901881224640355 5.901881224640355 0 0 0 5.1 0.3H2.3A1.283659166359277 1.283659166359277 0 0 0 1 1.6V4.5H0.5A0.5016599040944301 0.5016599040944301 0 0 0 0 5V35.4A0.5016599040944301 0.5016599040944301 0 0 0 0.5 35.9H1V38.7A1.283659166359277 1.283659166359277 0 0 0 2.3 40H10.6V39.6H12.8V40H21.2A1.283659166359277 1.283659166359277 0 0 0 22.5 38.7V35.9H23.1A0.5016599040944301 0.5016599040944301 0 0 0 23.6 35.4V5.1A0.5016599040944301 0.5016599040944301 0 0 0 23.1 4.6H22.5V1.6A1.283659166359277 1.283659166359277 0 0 0 21.2 0.4H18.5C18.4 0.1 17.2 0 17 0zM6.2 34.5L3.7 33.8A1.0033198081888601 1.0033198081888601 0 0 1 3.4 33.7A0.2360752489856142 0.2360752489856142 0 0 1 3.3 33.5A0.20656584286241245 0.20656584286241245 0 0 1 3.4 33.3L4.1 32.8A7.657690888970861 7.657690888970861 0 0 1 3.1 30A8.51346366654371 8.51346366654371 0 0 1 4.8 23.5C5.8 24.2 6.5 24.7 6.5 24.7A7.377351530800443 7.377351530800443 0 0 0 5.4 26.9A6.300258207303577 6.300258207303577 0 0 0 6 31.8L6.5 31.5H6.5L6.6 31.5A0.3541128734784213 0.3541128734784213 0 0 1 6.8 31.4A0.17705643673921065 0.17705643673921065 0 0 1 7 31.5A0.6344522316488379 0.6344522316488379 0 0 1 7 32L6.2 34.5zM17.5 31.8H17.5A6.300258207303577 6.300258207303577 0 0 0 18 26.9A7.510143858354851 7.510143858354851 0 0 0 17 24.7L17.1 24.6L18.6 23.5A8.631501291036518 8.631501291036518 0 0 1 20.3 30A7.657690888970861 7.657690888970861 0 0 1 19.3 32.8L19.8 33.1L20 33.2A0.22132054592401326 0.22132054592401326 0 0 1 20.1 33.4A0.26558465510881596 0.26558465510881596 0 0 1 20 33.6A1.0033198081888601 1.0033198081888601 0 0 1 19.7 33.7L17.2 34.5S17.1 34.1 17 33.6S16.6 32.3 16.5 32A0.619697528587237 0.619697528587237 0 0 1 16.5 31.5A0.17705643673921065 0.17705643673921065 0 0 1 16.6 31.4A0.48690520103282936 0.48690520103282936 0 0 1 16.8 31.4L16.8 31.4L17.4 31.7zM11.7 30.6A1.9918849133161198 1.9918849133161198 0 1 1 13.7 28.6A1.9918849133161198 1.9918849133161198 0 0 1 11.7 30.6H11.7z" />
|
||||
</font>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 5.7 KiB |
BIN
docs/static/fonts/icons/iconfont.ttf
vendored
Normal file
BIN
docs/static/fonts/icons/iconfont.woff
vendored
Normal file
BIN
docs/static/fonts/icons/iconfont.woff2
vendored
Normal file
BIN
legoresources/Block icns/Blockcolor-icns.pdf
Normal file
193
legoresources/Block icns/icn_block_Large_motor.svg
Normal file
@ -0,0 +1,193 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="1344 8191 55 41">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: #a8a9a8;
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
clip-path: url(#clip-path);
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
clip-path: url(#clip-path-2);
|
||||
}
|
||||
|
||||
.cls-5 {
|
||||
fill: #919191;
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
clip-path: url(#clip-path-3);
|
||||
}
|
||||
|
||||
.cls-7 {
|
||||
fill: #f2f2f2;
|
||||
}
|
||||
|
||||
.cls-8 {
|
||||
clip-path: url(#clip-path-4);
|
||||
}
|
||||
|
||||
.cls-9 {
|
||||
fill: #6a6a6a;
|
||||
}
|
||||
|
||||
.cls-10 {
|
||||
fill: #9a9a9a;
|
||||
}
|
||||
|
||||
.cls-11 {
|
||||
fill: #d02e26;
|
||||
}
|
||||
|
||||
.cls-12 {
|
||||
fill: #242424;
|
||||
}
|
||||
|
||||
.cls-13 {
|
||||
filter: url(#rød);
|
||||
}
|
||||
|
||||
.cls-14 {
|
||||
filter: url(#Path_4);
|
||||
}
|
||||
|
||||
.cls-15 {
|
||||
filter: url(#Path_1-2);
|
||||
}
|
||||
|
||||
.cls-16 {
|
||||
filter: url(#Path_2);
|
||||
}
|
||||
|
||||
.cls-17 {
|
||||
filter: url(#Path_1);
|
||||
}
|
||||
|
||||
.cls-18 {
|
||||
filter: url(#Path_34);
|
||||
}
|
||||
</style>
|
||||
<clipPath id="clip-path">
|
||||
<rect id="Rectangle_119" data-name="Rectangle 119" class="cls-1" width="55" height="41" transform="translate(-10.923 65.26)"/>
|
||||
</clipPath>
|
||||
<clipPath id="clip-path-2">
|
||||
<path id="Union_6" data-name="Union 6" class="cls-2" d="M0,88.889A11.109,11.109,0,0,1,9.191,77.947L8.954,77.7,8.947,54.41c0-.273.093-.261.255-.438l7.1-6.846V40.6l-.488-.5v-.516H11.39a2.6,2.6,0,0,1-2.6-2.6V20.163a2.6,2.6,0,0,1,2.6-2.6h4.421V12.236a3.765,3.765,0,0,1,3.766-3.765h4.241c0-.059-.005-.117-.005-.176V3.941a3,3,0,0,1,1.882-2.785V.4a.4.4,0,0,1,.4-.4H43.183a.394.394,0,0,1,.394.4v1a3,3,0,0,1,1.412,2.546V8.294c0,.059,0,.118-.005.176h2.359a3.765,3.765,0,0,1,3.765,3.765V31.528c-6.749,9.152-11.8,15.533-11.8,15.533h-.387s-4.616-.035-8.906-.062l.022,7.681h4.479a2.6,2.6,0,0,1,2.6,2.6V74.093a2.6,2.6,0,0,1-2.6,2.6H30.1l.022,7.664c0,.545-.1.545-.3.74l-6.78,6.569-.139.124a.989.989,0,0,1-1.036-.154A11.108,11.108,0,0,1,0,88.889Z"/>
|
||||
</clipPath>
|
||||
<filter id="Path_34" x="1375.234" y="8125.181" width="24.177" height="13.354" filterUnits="userSpaceOnUse">
|
||||
<feOffset input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="0.5" result="blur"/>
|
||||
<feFlood flood-opacity="0.502"/>
|
||||
<feComposite operator="in" in2="blur"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_1" x="1360.37" y="8169.796" width="24.177" height="49.327" filterUnits="userSpaceOnUse">
|
||||
<feOffset input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="0.5" result="blur-2"/>
|
||||
<feFlood flood-opacity="0.502"/>
|
||||
<feComposite operator="in" in2="blur-2"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_2" x="1367.722" y="8164.375" width="16.687" height="17.582" filterUnits="userSpaceOnUse">
|
||||
<feOffset input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="0.5" result="blur-3"/>
|
||||
<feFlood flood-opacity="0.502"/>
|
||||
<feComposite operator="in" in2="blur-3"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_1-2" x="1367.234" y="8132.71" width="38.296" height="41.59" filterUnits="userSpaceOnUse">
|
||||
<feOffset input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="0.5" result="blur-4"/>
|
||||
<feFlood flood-opacity="0.502"/>
|
||||
<feComposite operator="in" in2="blur-4"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<clipPath id="clip-path-3">
|
||||
<path id="Path_9" data-name="Path 9" class="cls-2" d="M3.765,0H31.531A3.765,3.765,0,0,1,35.3,3.765V23.057C28.547,32.209,23.5,38.59,23.5,38.59h-.387s-12.667-.1-15.533-.1a1.484,1.484,0,0,1-1.548-.641L0,31.62V3.765A3.765,3.765,0,0,1,3.765,0Z"/>
|
||||
</clipPath>
|
||||
<filter id="Path_4" x="1370.999" y="8136.004" width="30.766" height="34.531" filterUnits="userSpaceOnUse">
|
||||
<feOffset input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="0.5" result="blur-5"/>
|
||||
<feFlood flood-opacity="0.502"/>
|
||||
<feComposite operator="in" in2="blur-5"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<clipPath id="clip-path-4">
|
||||
<path id="Path_10" data-name="Path 10" class="cls-2" d="M3.765,0H24a3.765,3.765,0,0,1,3.765,3.765v14.48c-5.628,7.331-10.127,13.286-10.127,13.286H3.765A3.765,3.765,0,0,1,0,27.766v-24A3.765,3.765,0,0,1,3.765,0Z"/>
|
||||
</clipPath>
|
||||
<filter id="rød" x="1351.423" y="8202.021" width="25.213" height="25.214" filterUnits="userSpaceOnUse">
|
||||
<feOffset input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="0.5" result="blur-6"/>
|
||||
<feFlood flood-opacity="0.502"/>
|
||||
<feComposite operator="in" in2="blur-6"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
</defs>
|
||||
<g id="icn_block_Large_motor" transform="translate(666.315 8209.204)">
|
||||
<g id="Symbol_13_1" data-name="Symbol 13 – 1" transform="translate(688.608 -83.464)">
|
||||
<g id="Mask_Group_12" data-name="Mask Group 12" class="cls-3">
|
||||
<g id="Mask_Group_6" data-name="Mask Group 6" class="cls-4" transform="translate(-2)">
|
||||
<g id="Large_motor" data-name="Large motor" transform="translate(-1.056 0)">
|
||||
<g id="Group_23" data-name="Group 23">
|
||||
<path id="Subtraction_1" data-name="Subtraction 1" class="cls-5" d="M-2806.659-5548.724h-3.653a3.558,3.558,0,0,1-3.554-3.554v-14.908a3.558,3.558,0,0,1,3.554-3.555h3.653a3.558,3.558,0,0,1,3.554,3.555v14.908A3.558,3.558,0,0,1-2806.659-5548.724Zm.1-5.923a2.47,2.47,0,0,0-2.468,2.467,2.471,2.471,0,0,0,2.468,2.469,2.471,2.471,0,0,0,2.468-2.469A2.47,2.47,0,0,0-2806.56-5554.647Zm.062-.99h.01a2.859,2.859,0,0,1,1.425.37c.112.054.238.116.378.176a.67.67,0,0,0,.267.063c.364,0,.427-.425.428-.429v-1.145s-.111-.449-.454-.449a.556.556,0,0,0-.241.063l-.211.1a2.988,2.988,0,0,1-1.591.4h-.023a4.281,4.281,0,0,1-1.831-.5.642.642,0,0,0-.262-.059c-.167,0-.392.077-.517.444,0,0-.011.628,0,1.145.007.32.3.388.537.388a1.414,1.414,0,0,0,.239-.021A4.678,4.678,0,0,1-2806.5-5555.637Zm-1.218-3.3h.006c.048,0,.469.012.469.422v.844s.136.2.639.2c.039,0,.079,0,.123,0a2.375,2.375,0,0,0,.914-.2v-.844a.437.437,0,0,1,.429-.422c.145,0,.287,0,.394,0,.22,0,.391,0,.42,0,.005,0,.168-.134.19-.861.021-.7-.165-.883-.186-.9h-.818c-.022,0-.524-.049-.532-.5-.006-.386,0-1.306,0-1.684v-.022a.326.326,0,0,1,.048-.21.1.1,0,0,1,.076-.033.219.219,0,0,1,.093.025l.79.379a.668.668,0,0,0,.256.062.255.255,0,0,0,.189-.07.4.4,0,0,0,.084-.292c-.008-.485,0-1.013,0-1.163v-.008a.214.214,0,0,0-.215-.179.654.654,0,0,0-.315.111,2.7,2.7,0,0,1-1.524.458c-.075.006-.151.009-.224.009a3.3,3.3,0,0,1-1.72-.468,1.044,1.044,0,0,0-.545-.253.225.225,0,0,0-.167.065.4.4,0,0,0-.087.255v1.171a.423.423,0,0,0,.451.4.709.709,0,0,0,.349-.1c.357-.2.564-.326.633-.366l.022-.013a.216.216,0,0,1,.088-.021c.067,0,.147.042.147.238v1.706a.578.578,0,0,1-.138.378.427.427,0,0,1-.319.121h-.018c-.136,0-.288,0-.449,0-.219,0-.384,0-.445,0,0,0-.2.165-.2.9,0,.717.184.855.192.861Zm1.156-10.815a2.471,2.471,0,0,0-2.468,2.469,2.47,2.47,0,0,0,2.468,2.467,2.47,2.47,0,0,0,2.468-2.467A2.471,2.471,0,0,0-2806.56-5569.753Z" transform="translate(2841.282 5625.42)"/>
|
||||
</g>
|
||||
<path id="Path_36" data-name="Path 36" class="cls-2" d="M.395,0H17.488a.4.4,0,0,1,.395.395V3.841a.4.4,0,0,1-.395.395H.395A.4.4,0,0,1,0,3.841V.395A.4.4,0,0,1,.395,0Z" transform="translate(26.751 0)"/>
|
||||
<g class="cls-18" transform="matrix(1, 0, 0, 1, -1351.87, -8125.74)">
|
||||
<path id="Path_34-2" data-name="Path 34" class="cls-2" d="M.395,0H20.782a.4.4,0,0,1,.395.395V9.958a.4.4,0,0,1-.395.395H.395A.4.4,0,0,1,0,9.958V.395A.4.4,0,0,1,.395,0Z" transform="translate(1376.73 8126.68)"/>
|
||||
</g>
|
||||
<g class="cls-17" transform="matrix(1, 0, 0, 1, -1351.87, -8125.74)">
|
||||
<path id="Path_1-3" data-name="Path 1" class="cls-5" d="M-.121,4,8.6-4.416,20.69-3.98,20.8,34.388c0,.545-.1.545-.3.74l-6.78,6.57-.138.124c-.38.26-1.293-.075-1.293-.62L-.368,27.722-.375,4.438C-.375,4.165-.283,4.176-.121,4Z" transform="translate(1362.25 8175.71)"/>
|
||||
</g>
|
||||
<g class="cls-16" transform="matrix(1, 0, 0, 1, -1351.87, -8125.74)">
|
||||
<path id="Path_2-2" data-name="Path 2" class="cls-2" d="M1484.037,521.285v11.229s.012.55.2.729,2.289,2.36,2.289,2.36a1.019,1.019,0,0,0,.753.262c.493-.016,7.567,0,7.567,0l2.883-3.057v-5.183l-6.94-.369Z" transform="translate(-114.81 7644.59)"/>
|
||||
</g>
|
||||
<g id="Group_4" data-name="Group 4" transform="translate(9.843 17.559)">
|
||||
<path id="Path_44" data-name="Path 44" class="cls-2" d="M3.554,0H7.207a3.554,3.554,0,0,1,3.554,3.554V18.462a3.554,3.554,0,0,1-3.554,3.554H3.554A3.554,3.554,0,0,1,0,18.462V3.554A3.554,3.554,0,0,1,3.554,0Z" transform="translate(0 0)"/>
|
||||
<ellipse id="Ellipse_3" data-name="Ellipse 3" class="cls-1" cx="2.468" cy="2.468" rx="2.468" ry="2.468" transform="translate(0.691 0.987)"/>
|
||||
<ellipse id="Ellipse_4" data-name="Ellipse 4" class="cls-1" cx="2.468" cy="2.468" rx="2.468" ry="2.468" transform="translate(0.691 16.092)"/>
|
||||
<path id="Path_5" data-name="Path 5" class="cls-1" d="M5607.868,939.1a2.7,2.7,0,0,1-1.524.459,3.338,3.338,0,0,1-1.945-.459c-.818-.606-.8.067-.8.067v1.172c0,.293.36.55.8.3s.654-.378.654-.378.235-.12.235.218v1.705s.013.512-.475.5-.9,0-.9,0-.191.161-.191.9.191.86.191.86h.9s.475-.016.475.422v.844s.147.234.761.2a2.341,2.341,0,0,0,.914-.2v-.844a.436.436,0,0,1,.43-.422c.41-.006.818,0,.818,0s.164-.124.187-.86-.187-.9-.187-.9h-.818s-.524-.034-.533-.5,0-1.705,0-1.705-.03-.335.216-.218l.791.378s.541.265.53-.3,0-1.172,0-1.172S5608.345,938.813,5607.868,939.1Z" transform="translate(-5602.81 -932.641)"/>
|
||||
<path id="Path_6" data-name="Path 6" class="cls-1" d="M5601.894,1015.1a.54.54,0,0,1,.778-.386,4.241,4.241,0,0,0,1.854.5,3.287,3.287,0,0,0,1.8-.5c.54-.263.695.386.695.386v1.145a.462.462,0,0,1-.695.365,3.768,3.768,0,0,0-1.8-.545,4.6,4.6,0,0,0-1.854.545s-.767.155-.778-.365S5601.894,1015.1,5601.894,1015.1Z" transform="translate(-5601.296 -1000.958)"/>
|
||||
</g>
|
||||
<g class="cls-15" transform="matrix(1, 0, 0, 1, -1351.87, -8125.74)">
|
||||
<path id="Path_1-4" data-name="Path 1" class="cls-2" d="M3.765,0H31.531A3.765,3.765,0,0,1,35.3,3.765V23.057C28.547,32.209,23.5,38.59,23.5,38.59h-.387s-12.667-.1-15.533-.1a1.484,1.484,0,0,1-1.548-.641L0,31.62V3.765A3.765,3.765,0,0,1,3.765,0Z" transform="translate(1368.73 8134.21)"/>
|
||||
</g>
|
||||
<g id="hvid" transform="translate(16.868 8.471)">
|
||||
<g id="Mask_Group_1" data-name="Mask Group 1" class="cls-6">
|
||||
<path id="hvid-2" data-name="hvid" class="cls-7" d="M1498.578,448.445l4.657,4.8,15.484,20.229v9.67l8.5-10.5V452.321l-.646-5.006Z" transform="translate(-1491.247 -448.708)"/>
|
||||
</g>
|
||||
</g>
|
||||
<g class="cls-14" transform="matrix(1, 0, 0, 1, -1351.87, -8125.74)">
|
||||
<path id="Path_4-2" data-name="Path 4" class="cls-2" d="M3.765,0H24a3.765,3.765,0,0,1,3.765,3.765v14.48c-5.628,7.331-10.127,13.286-10.127,13.286H3.765A3.765,3.765,0,0,1,0,27.766v-24A3.765,3.765,0,0,1,3.765,0Z" transform="translate(1372.5 8137.51)"/>
|
||||
</g>
|
||||
<g id="Group_3" data-name="Group 3" transform="translate(20.633 11.963)">
|
||||
<g id="Mask_Group_2" data-name="Mask Group 2" class="cls-8" transform="translate(0 0)">
|
||||
<path id="Union_1" data-name="Union 1" class="cls-9" d="M9.412,18.589V.706a.706.706,0,1,1,1.412,0V18.589a.706.706,0,1,1-1.412,0Zm-2.353,0V.706a.706.706,0,1,1,1.412,0V18.589a.706.706,0,1,1-1.412,0Zm-2.353,0V.706a.706.706,0,1,1,1.412,0V18.589a.706.706,0,1,1-1.412,0Zm-2.353,0V.706a.706.706,0,1,1,1.412,0V18.589a.706.706,0,1,1-1.412,0ZM0,18.589V.706a.706.706,0,1,1,1.412,0V18.589a.706.706,0,1,1-1.412,0Z" transform="translate(10.353 -3.492)"/>
|
||||
</g>
|
||||
</g>
|
||||
<ellipse id="Ellipse_1" data-name="Ellipse 1" class="cls-10" cx="1.461" cy="1.461" rx="1.461" ry="1.461" transform="translate(18.925 10.528)"/>
|
||||
<ellipse id="Ellipse_2" data-name="Ellipse 2" class="cls-10" cx="1.461" cy="1.461" rx="1.461" ry="1.461" transform="translate(37.584 43.404)"/>
|
||||
<g class="cls-13" transform="matrix(1, 0, 0, 1, -1351.87, -8125.74)">
|
||||
<ellipse id="rød-2" data-name="rød" class="cls-11" cx="11.107" cy="11.107" rx="11.107" ry="11.107" transform="translate(1352.92 8203.52)"/>
|
||||
</g>
|
||||
<g id="Group_2" data-name="Group 2" transform="matrix(0.966, 0.259, -0.259, 0.966, 5.162, 76.726)">
|
||||
<ellipse id="Ellipse_4-2" data-name="Ellipse 4" cx="2.468" cy="2.468" rx="2.468" ry="2.468" transform="translate(7.503 0)"/>
|
||||
<ellipse id="Ellipse_7" data-name="Ellipse 7" cx="2.468" cy="2.468" rx="2.468" ry="2.468" transform="translate(15.006 7.503)"/>
|
||||
<ellipse id="Ellipse_5" data-name="Ellipse 5" cx="2.468" cy="2.468" rx="2.468" ry="2.468" transform="translate(7.503 15.006)"/>
|
||||
<ellipse id="Ellipse_6" data-name="Ellipse 6" cx="2.468" cy="2.468" rx="2.468" ry="2.468" transform="translate(0 7.503)"/>
|
||||
<path id="Path_4-3" data-name="Path 4" class="cls-12" d="M1.564,1.019s.014.512-.475.5-.9,0-.9,0S0,1.68,0,2.421s.191.86.191.86h.9s.475-.016.475.422,0,.844,0,.844.147.234.761.2a2.339,2.339,0,0,0,.914-.2V3.7a.436.436,0,0,1,.43-.422c.41-.006.818,0,.818,0s.164-.124.187-.86-.187-.9-.187-.9H3.669s-.524-.034-.532-.5A8.122,8.122,0,0,1,3.179.2,1.884,1.884,0,0,0,1.646.138C1.595.533,1.564,1.019,1.564,1.019Z" transform="translate(7.602 12.277) rotate(-90)"/>
|
||||
<path id="Path_5-2" data-name="Path 5" d="M.3.1,1.312,0,2.369.1a.3.3,0,0,1,.3.3V1.779a.3.3,0,0,1-.3.3L1.36,1.939.3,2.075a.3.3,0,0,1-.3-.3V.4A.3.3,0,0,1,.3.1Z" transform="translate(8.618 5.261)"/>
|
||||
<path id="Path_7" data-name="Path 7" d="M.3.1,1.312,0,2.369.1a.3.3,0,0,1,.3.3V1.779a.3.3,0,0,1-.3.3L1.36,1.939.3,2.075a.3.3,0,0,1-.3-.3V.4A.3.3,0,0,1,.3.1Z" transform="translate(5.26 11.285) rotate(-90)"/>
|
||||
<path id="Path_6-2" data-name="Path 6" d="M.3.1,1.312,0,2.369.1a.3.3,0,0,1,.3.3V1.779a.3.3,0,0,1-.3.3L1.36,1.939.3,2.075a.3.3,0,0,1-.3-.3V.4A.3.3,0,0,1,.3.1Z" transform="translate(11.284 14.642) rotate(180)"/>
|
||||
<path id="Path_8" data-name="Path 8" d="M.3.1,1.312,0,2.369.1a.3.3,0,0,1,.3.3V1.779a.3.3,0,0,1-.3.3L1.36,1.939.3,2.075a.3.3,0,0,1-.3-.3V.4A.3.3,0,0,1,.3.1Z" transform="translate(14.641 8.619) rotate(90)"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 14 KiB |
35
legoresources/Block icns/icn_block_buttons_green.svg
Normal file
@ -0,0 +1,35 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="1321.124 9006.084 42.65 31.79">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #6a6a6a;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: url(#linear-gradient);
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: #a8a9a8;
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
fill: #3c3c3c;
|
||||
}
|
||||
</style>
|
||||
<linearGradient id="linear-gradient" x1="0.5" y1="0.948" x2="0.5" y2="0.059" gradientUnits="objectBoundingBox">
|
||||
<stop offset="0" stop-color="#6a6a6a"/>
|
||||
<stop offset="0.522" stop-color="#8ce300"/>
|
||||
<stop offset="1" stop-color="#6a6a6a"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g id="icn_block_buttons_green" transform="translate(666.315 8209.204)">
|
||||
<path id="Union_4" data-name="Union 4" class="cls-1" d="M16.882,31.79c-3.635-3.509-9.28-9.28-9.28-9.28V21.325H5.38a5.381,5.381,0,0,1,0-10.761H7.6V9.379L16.783,0h9.182c4.158,4.237,9.182,9.182,9.182,9.182v1.382h2.122a5.381,5.381,0,1,1,0,10.761H35.147V22.51c-4.891,5.031-9.083,9.28-9.083,9.28Z" transform="translate(654.809 796.881)"/>
|
||||
<path id="light" class="cls-2" d="M16.882,31.79c-3.635-3.509-9.28-9.28-9.28-9.28V21.325H5.38a5.381,5.381,0,0,1,0-10.761H7.6V9.379L16.783,0h9.182c4.158,4.237,9.182,9.182,9.182,9.182v1.382h2.122a5.381,5.381,0,1,1,0,10.761H35.147V22.51c-4.891,5.031-9.083,9.28-9.083,9.28Z" transform="translate(654.809 796.881)"/>
|
||||
<path id="Rectangle_23" data-name="Rectangle 23" class="cls-3" d="M4,0h6.763a0,0,0,0,1,0,0V8a0,0,0,0,1,0,0H4A4,4,0,0,1,0,4V4A4,4,0,0,1,4,0Z" transform="translate(656.092 808.729)"/>
|
||||
<path id="Rectangle_24" data-name="Rectangle 24" class="cls-3" d="M4,0h6.763a0,0,0,0,1,0,0V8a0,0,0,0,1,0,0H4A4,4,0,0,1,0,4V4A4,4,0,0,1,4,0Z" transform="translate(696.077 816.725) rotate(180)"/>
|
||||
<path id="Path_42" data-name="Path 42" class="cls-4" d="M.3,0H8.1a.3.3,0,0,1,.3.3V7.7a.3.3,0,0,1-.3.3H.3A.3.3,0,0,1,0,7.7V.3A.3.3,0,0,1,.3,0Z" transform="translate(671.889 808.729)"/>
|
||||
<path id="Path_15" data-name="Path 15" class="cls-3" d="M-102.228-1598.9l8.293-.1,6.22,6.417-2.567,2.567v4.64h-2.369v-2.666a1.99,1.99,0,0,0-1.975-1.974c-1.927-.031-7.207,0-7.207,0a1.606,1.606,0,0,0-1.678,1.678v2.962h-2.369v-4.64l-2.567-2.567Z" transform="translate(774.216 2397.264)"/>
|
||||
<path id="Path_16" data-name="Path 16" class="cls-3" d="M6.264.062,14.505,0l6.236,6.412L18.135,8.954v4.667H15.79V10.945a2,2,0,0,0-1.969-1.99c-1.927-.031-7.166,0-7.166,0A1.689,1.689,0,0,0,4.93,10.679v2.942H2.543V8.954L0,6.412Z" transform="translate(686.509 827.175) rotate(180)"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.5 KiB |
35
legoresources/Block icns/icn_block_buttons_red.svg
Normal file
@ -0,0 +1,35 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="1321.124 8957.084 42.65 31.79">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #6a6a6a;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: url(#linear-gradient);
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: #a8a9a8;
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
fill: #3c3c3c;
|
||||
}
|
||||
</style>
|
||||
<linearGradient id="linear-gradient" x1="0.5" y1="0.948" x2="0.5" y2="0.059" gradientUnits="objectBoundingBox">
|
||||
<stop offset="0" stop-color="#6a6a6a"/>
|
||||
<stop offset="0.522" stop-color="#e5352c"/>
|
||||
<stop offset="1" stop-color="#6a6a6a"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g id="icn_block_buttons_red" transform="translate(666.315 8209.204)">
|
||||
<path id="Union_4" data-name="Union 4" class="cls-1" d="M16.882,31.79c-3.635-3.509-9.28-9.28-9.28-9.28V21.325H5.38a5.381,5.381,0,0,1,0-10.761H7.6V9.379L16.783,0h9.182c4.158,4.237,9.182,9.182,9.182,9.182v1.382h2.122a5.381,5.381,0,1,1,0,10.761H35.147V22.51c-4.891,5.031-9.083,9.28-9.083,9.28Z" transform="translate(654.809 747.881)"/>
|
||||
<path id="light" class="cls-2" d="M16.882,31.79c-3.635-3.509-9.28-9.28-9.28-9.28V21.325H5.38a5.381,5.381,0,0,1,0-10.761H7.6V9.379L16.783,0h9.182c4.158,4.237,9.182,9.182,9.182,9.182v1.382h2.122a5.381,5.381,0,1,1,0,10.761H35.147V22.51c-4.891,5.031-9.083,9.28-9.083,9.28Z" transform="translate(654.809 747.881)"/>
|
||||
<path id="Rectangle_23" data-name="Rectangle 23" class="cls-3" d="M4,0h6.763a0,0,0,0,1,0,0V8a0,0,0,0,1,0,0H4A4,4,0,0,1,0,4V4A4,4,0,0,1,4,0Z" transform="translate(656.092 759.729)"/>
|
||||
<path id="Rectangle_24" data-name="Rectangle 24" class="cls-3" d="M4,0h6.763a0,0,0,0,1,0,0V8a0,0,0,0,1,0,0H4A4,4,0,0,1,0,4V4A4,4,0,0,1,4,0Z" transform="translate(696.077 767.725) rotate(180)"/>
|
||||
<path id="Path_42" data-name="Path 42" class="cls-4" d="M.3,0H8.1a.3.3,0,0,1,.3.3V7.7a.3.3,0,0,1-.3.3H.3A.3.3,0,0,1,0,7.7V.3A.3.3,0,0,1,.3,0Z" transform="translate(671.889 759.729)"/>
|
||||
<path id="Path_15" data-name="Path 15" class="cls-3" d="M-102.228-1598.9l8.293-.1,6.22,6.417-2.567,2.567v4.64h-2.369v-2.666a1.99,1.99,0,0,0-1.975-1.974c-1.927-.031-7.207,0-7.207,0a1.606,1.606,0,0,0-1.678,1.678v2.962h-2.369v-4.64l-2.567-2.567Z" transform="translate(774.216 2348.264)"/>
|
||||
<path id="Path_16" data-name="Path 16" class="cls-3" d="M6.264.062,14.505,0l6.236,6.412L18.135,8.954v4.667H15.79V10.945a2,2,0,0,0-1.969-1.99c-1.927-.031-7.166,0-7.166,0A1.689,1.689,0,0,0,4.93,10.679v2.942H2.543V8.954L0,6.412Z" transform="translate(686.509 778.175) rotate(180)"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.5 KiB |
35
legoresources/Block icns/icn_block_buttons_yellow.svg
Normal file
@ -0,0 +1,35 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="1393.124 8957.084 42.65 31.79">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #6a6a6a;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: url(#linear-gradient);
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: #a8a9a8;
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
fill: #3c3c3c;
|
||||
}
|
||||
</style>
|
||||
<linearGradient id="linear-gradient" x1="0.5" y1="0.948" x2="0.5" y2="0.059" gradientUnits="objectBoundingBox">
|
||||
<stop offset="0" stop-color="#6a6a6a"/>
|
||||
<stop offset="0.522" stop-color="#ffeb00"/>
|
||||
<stop offset="1" stop-color="#838383"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g id="icn_block_buttons_yellow" transform="translate(666.315 8209.204)">
|
||||
<path id="Union_4" data-name="Union 4" class="cls-1" d="M16.882,31.79c-3.635-3.509-9.28-9.28-9.28-9.28V21.325H5.38a5.381,5.381,0,0,1,0-10.761H7.6V9.379L16.783,0h9.182c4.158,4.237,9.182,9.182,9.182,9.182v1.382h2.122a5.381,5.381,0,1,1,0,10.761H35.147V22.51c-4.891,5.031-9.083,9.28-9.083,9.28Z" transform="translate(726.809 747.881)"/>
|
||||
<path id="light" class="cls-2" d="M16.882,31.79c-3.635-3.509-9.28-9.28-9.28-9.28V21.325H5.38a5.381,5.381,0,0,1,0-10.761H7.6V9.379L16.783,0h9.182c4.158,4.237,9.182,9.182,9.182,9.182v1.382h2.122a5.381,5.381,0,1,1,0,10.761H35.147V22.51c-4.891,5.031-9.083,9.28-9.083,9.28Z" transform="translate(726.809 747.881)"/>
|
||||
<path id="Rectangle_23" data-name="Rectangle 23" class="cls-3" d="M4,0h6.763a0,0,0,0,1,0,0V8a0,0,0,0,1,0,0H4A4,4,0,0,1,0,4V4A4,4,0,0,1,4,0Z" transform="translate(728.092 759.729)"/>
|
||||
<path id="Rectangle_24" data-name="Rectangle 24" class="cls-3" d="M4,0h6.763a0,0,0,0,1,0,0V8a0,0,0,0,1,0,0H4A4,4,0,0,1,0,4V4A4,4,0,0,1,4,0Z" transform="translate(768.077 767.725) rotate(180)"/>
|
||||
<path id="Path_42" data-name="Path 42" class="cls-4" d="M.3,0H8.1a.3.3,0,0,1,.3.3V7.7a.3.3,0,0,1-.3.3H.3A.3.3,0,0,1,0,7.7V.3A.3.3,0,0,1,.3,0Z" transform="translate(743.889 759.729)"/>
|
||||
<path id="Path_15" data-name="Path 15" class="cls-3" d="M-102.228-1598.9l8.293-.1,6.22,6.417-2.567,2.567v4.64h-2.369v-2.666a1.99,1.99,0,0,0-1.975-1.974c-1.927-.031-7.207,0-7.207,0a1.606,1.606,0,0,0-1.678,1.678v2.962h-2.369v-4.64l-2.567-2.567Z" transform="translate(846.216 2348.264)"/>
|
||||
<path id="Path_16" data-name="Path 16" class="cls-3" d="M6.264.062,14.505,0l6.236,6.412L18.135,8.954v4.667H15.79V10.945a2,2,0,0,0-1.969-1.99c-1.927-.031-7.166,0-7.166,0A1.689,1.689,0,0,0,4.93,10.679v2.942H2.543V8.954L0,6.412Z" transform="translate(758.509 778.175) rotate(180)"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.5 KiB |
65
legoresources/Block icns/icn_block_color_sensor.svg
Normal file
@ -0,0 +1,65 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="1327.274 8333.921 23.497 21.72">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #a8a9a8;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
clip-path: url(#clip-path);
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: url(#linear-gradient);
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
fill: #b72b1c;
|
||||
}
|
||||
|
||||
.cls-5 {
|
||||
fill: #f2f2f2;
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
filter: url(#Path_1);
|
||||
}
|
||||
</style>
|
||||
<clipPath id="clip-path">
|
||||
<path id="Union_5" data-name="Union 5" class="cls-1" d="M2.543,21.72c-.7,0-1.26-.4-1.26-.9V17.968H.494A.494.494,0,0,1,0,17.475V4.64a.494.494,0,0,1,.494-.494h.79V.9c0-.5.564-.9,1.26-.9H20.954c.7,0,1.26.4,1.26.9v3.25H23a.494.494,0,0,1,.494.494V17.475a.494.494,0,0,1-.494.494h-.79v2.855c0,.5-.564.9-1.26.9Z"/>
|
||||
</clipPath>
|
||||
<linearGradient id="linear-gradient" x1="0.5" y1="0.901" x2="0.5" y2="1.068" gradientUnits="objectBoundingBox">
|
||||
<stop offset="0" stop-color="#a8a9a8"/>
|
||||
<stop offset="1" stop-color="#545554"/>
|
||||
</linearGradient>
|
||||
<filter id="Path_1" x="1319.557" y="8327.921" width="38.93" height="39.72" filterUnits="userSpaceOnUse">
|
||||
<feOffset dy="3" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="3" result="blur"/>
|
||||
<feFlood flood-opacity="0.502"/>
|
||||
<feComposite operator="in" in2="blur"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
</defs>
|
||||
<g id="icn_block_color_sensor" transform="translate(666.315 8209.204)">
|
||||
<g id="Mask_Group_5" data-name="Mask Group 5" class="cls-2" transform="translate(660.959 124.718)">
|
||||
<g id="Group_4" data-name="Group 4" transform="translate(0)">
|
||||
<g id="Group_2" data-name="Group 2">
|
||||
<path id="Path_28" data-name="Path 28" class="cls-1" d="M.494,0H23A.494.494,0,0,1,23.5.494V13.328a.494.494,0,0,1-.494.494H.494A.494.494,0,0,1,0,13.328V.494A.494.494,0,0,1,.494,0Z" transform="translate(0 4.147)"/>
|
||||
<g class="cls-6" transform="matrix(1, 0, 0, 1, -1327.27, -8333.92)">
|
||||
<path id="Path_1-2" data-name="Path 1" class="cls-3" d="M1.26,0H19.67c.7,0,1.26.4,1.26.9V20.823c0,.5-.564.9-1.26.9H1.26c-.7,0-1.26-.4-1.26-.9V.9C0,.4.564,0,1.26,0Z" transform="translate(1328.56 8333.92)"/>
|
||||
</g>
|
||||
<rect id="Rectangle_2" data-name="Rectangle 2" width="0.494" height="3.949" transform="translate(22.51 6.121)"/>
|
||||
<rect id="Rectangle_5" data-name="Rectangle 5" width="0.494" height="3.949" transform="translate(0.592 6.121)"/>
|
||||
<rect id="Rectangle_3" data-name="Rectangle 3" width="0.494" height="3.949" transform="translate(22.51 11.748)"/>
|
||||
<rect id="Rectangle_4" data-name="Rectangle 4" width="0.494" height="3.949" transform="translate(0.592 11.748)"/>
|
||||
</g>
|
||||
<path id="Union_1" data-name="Union 1" class="cls-4" d="M1.678,11.551a4.557,4.557,0,0,1,.1-.973,6.22,6.22,0,1,1,8.874,0,4.542,4.542,0,1,1-8.979.973Z" transform="translate(5.529 2.666)"/>
|
||||
<path id="Union_2" data-name="Union 2" d="M1.738,10.614A3.5,3.5,0,0,1,1.98,9.332,5.233,5.233,0,1,1,8.5,9.317a3.507,3.507,0,1,1-6.765,1.3Z" transform="translate(6.516 3.602)"/>
|
||||
<g id="Group_3" data-name="Group 3" transform="translate(9.379 6.615)">
|
||||
<ellipse id="Ellipse_5" data-name="Ellipse 5" class="cls-5" cx="2.369" cy="2.369" rx="2.369" ry="2.369"/>
|
||||
<ellipse id="Ellipse_6" data-name="Ellipse 6" class="cls-5" cx="1.283" cy="1.283" rx="1.283" ry="1.283" transform="translate(1.086 6.22)"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.4 KiB |
26
legoresources/Block icns/icn_block_display.svg
Normal file
@ -0,0 +1,26 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="1299.627 9145.076 41.445 32.779">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: url(#linear-gradient);
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: #3c3c3c;
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: #a0b5a6;
|
||||
}
|
||||
</style>
|
||||
<linearGradient id="linear-gradient" x1="0.5" y1="0.924" x2="0.5" y2="0.948" gradientUnits="objectBoundingBox">
|
||||
<stop offset="0" stop-color="#a8a9a8"/>
|
||||
<stop offset="1" stop-color="gray"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g id="icn_block_display" transform="translate(666.315 8209.204)">
|
||||
<path id="Path_91" data-name="Path 91" class="cls-1" d="M.816,0H40.629a.816.816,0,0,1,.816.816V31.963a.816.816,0,0,1-.816.816H.816A.816.816,0,0,1,0,31.963V.816A.816.816,0,0,1,.816,0Z" transform="translate(633.313 935.874)"/>
|
||||
<path id="Path_92" data-name="Path 92" class="cls-2" d="M1.57,0H32.4a1.57,1.57,0,0,1,1.57,1.57V18.9a1.57,1.57,0,0,1-1.57,1.57H1.57A1.57,1.57,0,0,1,0,18.9V1.57A1.57,1.57,0,0,1,1.57,0Z" transform="translate(637.08 940.207)"/>
|
||||
<path id="Path_93" data-name="Path 93" class="cls-3" d="M1.13,0H27.316a1.13,1.13,0,0,1,1.13,1.13v16.7a1.13,1.13,0,0,1-1.13,1.13H1.13A1.13,1.13,0,0,1,0,17.834V1.13A1.13,1.13,0,0,1,1.13,0Z" transform="translate(639.906 941.023)"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
101
legoresources/Block icns/icn_block_gyro.svg
Normal file
@ -0,0 +1,101 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="1306.936 8729.215 61.393 44.083">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #d5277e;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: #a8a9a8;
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
clip-path: url(#clip-path);
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
clip-path: url(#clip-path-2);
|
||||
}
|
||||
|
||||
.cls-11, .cls-5 {
|
||||
fill: #9a9a9a;
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
fill: #f2f2f2;
|
||||
}
|
||||
|
||||
.cls-7 {
|
||||
opacity: 0.6;
|
||||
fill: url(#linear-gradient);
|
||||
}
|
||||
|
||||
.cls-8 {
|
||||
fill: url(#linear-gradient-2);
|
||||
}
|
||||
|
||||
.cls-9 {
|
||||
fill: #b72b1c;
|
||||
}
|
||||
|
||||
.cls-10, .cls-11 {
|
||||
stroke: none;
|
||||
}
|
||||
|
||||
.cls-12 {
|
||||
filter: url(#Path_12);
|
||||
}
|
||||
</style>
|
||||
<clipPath id="clip-path">
|
||||
<path id="Path_88" data-name="Path 88" class="cls-1" d="M1162.538,3051.215l1.79,38.862h-31.593l-5.221,5.221h-11.692l-5.221-5.221h-7.666l1.729-38.862Z" transform="translate(-1124.637 -3056.569)"/>
|
||||
</clipPath>
|
||||
<clipPath id="clip-path-2">
|
||||
<path id="Union_7" data-name="Union 7" class="cls-2" d="M6.318,39.688a6.076,6.076,0,0,1-1.291-.3H2.271A1.283,1.283,0,0,1,.987,38.108V35.147H.494A.494.494,0,0,1,0,34.653V4.542a.494.494,0,0,1,.494-.494H.987V1.284A1.283,1.283,0,0,1,2.271,0h8.237V.395h2.226V0h8.3a1.284,1.284,0,0,1,1.284,1.284V4.048H22.9a.494.494,0,0,1,.494.494V34.653a.494.494,0,0,1-.494.493h-.592v2.962a1.284,1.284,0,0,1-1.284,1.283h-2.7c-.111.2-1.244.3-1.451.3Z"/>
|
||||
</clipPath>
|
||||
<filter id="Path_12" x="1328.499" y="8733.444" width="23.575" height="33.349" filterUnits="userSpaceOnUse">
|
||||
<feOffset input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="0.375" result="blur"/>
|
||||
<feFlood flood-opacity="0.502"/>
|
||||
<feComposite operator="in" in2="blur"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
|
||||
<stop offset="0" stop-color="#fff" stop-opacity="0"/>
|
||||
<stop offset="1" stop-color="#404040"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linear-gradient-2" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
|
||||
<stop offset="0" stop-color="#fff"/>
|
||||
<stop offset="1" stop-color="gray"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g id="icn_block_gyro" transform="translate(666.315 8209.204)">
|
||||
<g id="Mask_Group_11" data-name="Mask Group 11" class="cls-3" transform="translate(662.322 525.366)">
|
||||
<g id="Group_16" data-name="Group 16">
|
||||
<g id="Mask_Group_7" data-name="Mask Group 7" class="cls-4" transform="translate(0 0)">
|
||||
<g id="Group_9" data-name="Group 9" transform="translate(0 0)">
|
||||
<path id="Path_29" data-name="Path 29" class="cls-2" d="M.494,0H22.9A.494.494,0,0,1,23.4.494V30.605a.494.494,0,0,1-.494.494H.494A.494.494,0,0,1,0,30.605V.494A.494.494,0,0,1,.494,0Z" transform="translate(0 4.048)"/>
|
||||
<rect id="Rectangle_11" data-name="Rectangle 11" class="cls-5" width="3.752" height="10.268" transform="translate(9.774 0.395)"/>
|
||||
<g class="cls-12" transform="matrix(1, 0, 0, 1, -1328.64, -8734.57)">
|
||||
<path id="Path_12-2" data-name="Path 12" class="cls-2" d="M1.283,0H9.52V10.424l2.226-.163V0h8.3a1.283,1.283,0,0,1,1.283,1.283V29.815A1.283,1.283,0,0,1,20.041,31.1H1.283A1.283,1.283,0,0,1,0,29.815V1.283A1.283,1.283,0,0,1,1.283,0Z" transform="translate(1329.62 8734.57)"/>
|
||||
</g>
|
||||
<g id="hvid" transform="translate(0.987 19.252)">
|
||||
<g id="hvid-2" data-name="hvid" transform="translate(0)">
|
||||
<path id="Path_57" data-name="Path 57" class="cls-6" d="M.79,0H20.535a.79.79,0,0,1,.79.79V18.857a1.283,1.283,0,0,1-1.283,1.283H1.283A1.283,1.283,0,0,1,0,18.857V.79A.79.79,0,0,1,.79,0Z" transform="translate(0)"/>
|
||||
<path id="Path_59" data-name="Path 59" class="cls-7" d="M0,0H21.325V1.975a1.283,1.283,0,0,1-1.283,1.283H1.283A1.283,1.283,0,0,1,0,1.975Z" transform="translate(0 16.882)"/>
|
||||
</g>
|
||||
<g id="Path_1" data-name="Path 1" class="cls-8" transform="translate(15.935 18.955)">
|
||||
<path class="cls-10" d="M -0.03972615301609039 1.355897426605225 L -10.6034460067749 1.355897426605225 C -10.8238697052002 1.355897426605225 -11.76168155670166 1.143560767173767 -12.02564239501953 0.9932262897491455 L -11.25642585754395 0.3544974625110626 C -11.06739616394043 0.1967574656009674 -10.78548622131348 0.1249974593520164 -10.6034460067749 0.1249974593520164 L -0.03972615301609039 0.1249974593520164 C 0.08689384907484055 0.1249974593520164 0.1953838467597961 0.221777468919754 0.3209938406944275 0.3338374495506287 C 0.3559758961200714 0.3650458753108978 0.3912657201290131 0.3964739441871643 0.4275123476982117 0.4264010488986969 L 1.240363001823425 1.159494996070862 C 0.997438907623291 1.265054941177368 0.2347392439842224 1.355897426605225 -0.03972615301609039 1.355897426605225 Z"/>
|
||||
<path class="cls-11" d="M -0.03972615301609039 1.230897426605225 C 0.1518102586269379 1.230897426605225 0.6746260523796082 1.174463033676147 0.9910745024681091 1.102993011474609 L 0.3458296954631805 0.5210594534873962 C 0.3090922832489014 0.490643322467804 0.2732802927494049 0.4587787985801697 0.2377838492393494 0.4271174669265747 C 0.1312438398599625 0.3320774734020233 0.03924384713172913 0.249997466802597 -0.03972615301609039 0.249997466802597 L -10.6034460067749 0.249997466802597 C -10.76875591278076 0.249997466802597 -11.01853656768799 0.3187874555587769 -11.1765661239624 0.4506674706935883 L -11.78844928741455 0.9587525725364685 C -11.43126487731934 1.086030006408691 -10.7613353729248 1.230897426605225 -10.6034460067749 1.230897426605225 L -0.03972615301609039 1.230897426605225 M -0.03972615301609039 1.480897426605225 L -10.6034460067749 1.480897426605225 C -10.82154655456543 1.480897426605225 -12.20312595367432 1.196227431297302 -12.20312595367432 0.9781274795532227 L -11.33627605438232 0.258327454328537 C -11.12889575958252 0.08526746183633804 -10.82154655456543 -2.538394937801058e-06 -10.6034460067749 -2.538394937801058e-06 L -0.03972615301609039 -2.538394937801058e-06 C 0.1783738434314728 -2.538394937801058e-06 0.3312638401985168 0.1853174567222595 0.5091438293457031 0.3316974639892578 L 1.42017388343811 1.153337478637695 C 1.42017388343811 1.371437430381775 0.1783738434314728 1.480897426605225 -0.03972615301609039 1.480897426605225 Z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="red_things" data-name="red things" transform="translate(2.962 5.529)">
|
||||
<ellipse id="red_dot" data-name="red dot" class="cls-9" cx="1.975" cy="1.975" rx="1.975" ry="1.975" transform="translate(6.713 3.85)"/>
|
||||
<path id="red_arrow_1" data-name="red arrow 1" class="cls-9" d="M3121.088-1937.325a6.718,6.718,0,0,1-.494-7.01c.151.093.443.226.592.3.42.239.482-.2.4-.494l-.79-2.468-2.468.691a.939.939,0,0,0-.3.1c-.129.082-.24.258,0,.395l.691.395a8.146,8.146,0,0,0,.691,9.28C3120.449-1936.882,3121.088-1937.325,3121.088-1937.325Z" transform="translate(-3117.592 1947)"/>
|
||||
<path id="red_arrow_2" data-name="red arrow 2" class="cls-9" d="M3118.12-1937.325a6.718,6.718,0,0,0,.493-7.01c-.151.093-.443.226-.592.3-.42.239-.482-.2-.395-.494l.79-2.468,2.468.691a.943.943,0,0,1,.3.1c.128.082.24.258,0,.395l-.691.395a8.147,8.147,0,0,1-.691,9.28C3118.758-1936.882,3118.12-1937.325,3118.12-1937.325Z" transform="translate(-3104.259 1947)"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.3 KiB |
65
legoresources/Block icns/icn_block_medium_motor.svg
Normal file
@ -0,0 +1,65 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="1323.372 8463.761 30.979 30.979">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: url(#linear-gradient);
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: #a8a9a8;
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: #3c3c3c;
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
fill: #b72b1c;
|
||||
stroke: #8b1104;
|
||||
stroke-width: 0.25px;
|
||||
}
|
||||
|
||||
.cls-5 {
|
||||
stroke: none;
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
fill: none;
|
||||
}
|
||||
|
||||
.cls-7 {
|
||||
filter: url(#Union_1);
|
||||
}
|
||||
</style>
|
||||
<linearGradient id="linear-gradient" x1="0.5" y1="0.919" x2="0.5" y2="1.077" gradientUnits="objectBoundingBox">
|
||||
<stop offset="0" stop-color="#a8a9a8"/>
|
||||
<stop offset="1" stop-color="#545554"/>
|
||||
</linearGradient>
|
||||
<filter id="Union_1" x="1323.372" y="8463.761" width="30.979" height="30.979" filterUnits="userSpaceOnUse">
|
||||
<feOffset input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="0.375" result="blur"/>
|
||||
<feFlood flood-opacity="0.322"/>
|
||||
<feComposite operator="in" in2="blur"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
</defs>
|
||||
<g id="icn_block_medium_motor" transform="translate(666.315 8209.204)">
|
||||
<g id="Group_4" data-name="Group 4" transform="translate(658.182 255.683)">
|
||||
<path id="Path_1" data-name="Path 1" class="cls-1" d="M2.383-.287H27.768A1.534,1.534,0,0,1,29.44,1V27.258c0,.654-.714,1.185-1.673,1.185H2.383c-.959,0-1.673-.531-1.673-1.185V1A1.534,1.534,0,0,1,2.383-.287Z" transform="translate(-0.711 0.287)"/>
|
||||
</g>
|
||||
<g id="Group_7" data-name="Group 7" transform="translate(686.912 255.683) rotate(90)">
|
||||
<g class="cls-7" transform="matrix(0, -1, 1, 0, -8464.89, 1353.23)">
|
||||
<path id="Union_1-2" data-name="Union 1" class="cls-2" d="M13.822,28.729a4.048,4.048,0,0,1-4.048-4.048V18.955H4.048A4.048,4.048,0,0,1,0,14.908V13.822A4.048,4.048,0,0,1,4.048,9.774H9.774V4.048A4.048,4.048,0,0,1,13.822,0h1.086a4.048,4.048,0,0,1,4.048,4.048V9.774h5.726a4.048,4.048,0,0,1,4.048,4.048v1.086a4.048,4.048,0,0,1-4.048,4.048H18.955v5.726a4.048,4.048,0,0,1-4.048,4.048Z" transform="translate(1353.23 8464.89) rotate(90)"/>
|
||||
</g>
|
||||
<ellipse id="Ellipse_1" data-name="Ellipse 1" class="cls-3" cx="3.159" cy="3.159" rx="3.159" ry="3.159" transform="translate(11.255 0.987)"/>
|
||||
<ellipse id="Ellipse_2" data-name="Ellipse 2" class="cls-3" cx="3.159" cy="3.159" rx="3.159" ry="3.159" transform="translate(11.255 21.424)"/>
|
||||
<ellipse id="Ellipse_1-2" data-name="Ellipse 1" class="cls-3" cx="3.159" cy="3.159" rx="3.159" ry="3.159" transform="translate(0.987 17.475) rotate(-90)"/>
|
||||
<ellipse id="Ellipse_2-2" data-name="Ellipse 2" class="cls-3" cx="3.159" cy="3.159" rx="3.159" ry="3.159" transform="translate(21.424 17.475) rotate(-90)"/>
|
||||
</g>
|
||||
<g id="Ellipse_4" data-name="Ellipse 4" class="cls-4" transform="translate(668.3 265.702)">
|
||||
<ellipse class="cls-5" cx="4.395" cy="4.395" rx="4.395" ry="4.395"/>
|
||||
<ellipse class="cls-6" cx="4.395" cy="4.395" rx="4.27" ry="4.27"/>
|
||||
</g>
|
||||
<path id="Hole" d="M5605.5,961.821s-.035.664-.5.67-.952,0-.952,0a1.541,1.541,0,0,0-.3,1.1c0,.824.232,1.045.232,1.045h1.06a.42.42,0,0,1,.454.454v1.085a2.528,2.528,0,0,0,1.149.187,4.2,4.2,0,0,0,1.091-.187v-1.085a.475.475,0,0,1,.478-.454,6.978,6.978,0,0,0,.94-.091s.257-.243.282-1.062-.23-1.07-.23-1.07h-1.1a.417.417,0,0,1-.5-.441,7.426,7.426,0,0,1,0-1.07,3.135,3.135,0,0,0-2.113,0C5605.488,961.354,5605.5,961.821,5605.5,961.821Z" transform="translate(-4933.915 -693.478)"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
84
legoresources/Block icns/icn_block_touch_sensor.svg
Normal file
@ -0,0 +1,84 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="1327.51 8602.067 23.497 21.72">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #a8a9a8;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
clip-path: url(#clip-path);
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: url(#linear-gradient);
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
fill: url(#linear-gradient-2);
|
||||
}
|
||||
|
||||
.cls-5 {
|
||||
fill: #b72b1c;
|
||||
stroke: #8b1104;
|
||||
stroke-width: 0.25px;
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
stroke: none;
|
||||
}
|
||||
|
||||
.cls-7 {
|
||||
fill: none;
|
||||
}
|
||||
|
||||
.cls-8 {
|
||||
filter: url(#Path_1);
|
||||
}
|
||||
</style>
|
||||
<clipPath id="clip-path">
|
||||
<path id="Union_3" data-name="Union 3" class="cls-1" d="M2.567,21.72c-.7,0-1.283-.393-1.283-.889V17.968H.651A.651.651,0,0,1,0,17.317V4.8a.651.651,0,0,1,.651-.651h.633V.889C1.283.394,1.871,0,2.567,0H9.576V.889h4.147V0H20.93c.7,0,1.283.394,1.283.889V4.147h.633A.65.65,0,0,1,23.5,4.8v12.52a.651.651,0,0,1-.651.651h-.633v2.863c0,.5-.588.889-1.283.889Z"/>
|
||||
</clipPath>
|
||||
<linearGradient id="linear-gradient" x1="0.5" y1="0.91" x2="0.5" y2="1.046" gradientUnits="objectBoundingBox">
|
||||
<stop offset="0" stop-color="#a8a9a8"/>
|
||||
<stop offset="1" stop-color="#545554"/>
|
||||
</linearGradient>
|
||||
<filter id="Path_1" x="1325.794" y="8599.067" width="26.93" height="27.72" filterUnits="userSpaceOnUse">
|
||||
<feOffset input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1" result="blur"/>
|
||||
<feFlood flood-opacity="0.502"/>
|
||||
<feComposite operator="in" in2="blur"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<linearGradient id="linear-gradient-2" x1="0.949" y1="0.5" x2="0.056" y2="0.5" gradientUnits="objectBoundingBox">
|
||||
<stop offset="0" stop-color="#b72b1c"/>
|
||||
<stop offset="1" stop-color="#8b1104"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g id="icn_block_touch_sensor" transform="translate(666.315 8209.204)">
|
||||
<g id="Group_8" data-name="Group 8" transform="translate(661.196 392.864)">
|
||||
<g id="Mask_Group_3" data-name="Mask Group 3" class="cls-2">
|
||||
<g id="Group_2" data-name="Group 2" transform="translate(0 0)">
|
||||
<path id="Path_27" data-name="Path 27" class="cls-1" d="M.494,0H23A.494.494,0,0,1,23.5.494V13.328a.494.494,0,0,1-.494.494H.494A.494.494,0,0,1,0,13.328V.494A.494.494,0,0,1,.494,0Z" transform="translate(0 4.147)"/>
|
||||
<g class="cls-8" transform="matrix(1, 0, 0, 1, -1327.51, -8602.07)">
|
||||
<path id="Path_1-2" data-name="Path 1" class="cls-3" d="M1.283,0h7.01V.889H12.44V0h7.207c.7,0,1.283.393,1.283.889V20.831c0,.5-.588.889-1.283.889H1.283c-.7,0-1.283-.393-1.283-.889V.889C0,.393.588,0,1.283,0Z" transform="translate(1328.79 8602.07)"/>
|
||||
</g>
|
||||
<rect id="Rectangle_2" data-name="Rectangle 2" width="0.494" height="3.949" transform="translate(22.51 6.121)"/>
|
||||
<rect id="Rectangle_5" data-name="Rectangle 5" width="0.494" height="3.949" transform="translate(0.592 6.121)"/>
|
||||
<rect id="Rectangle_3" data-name="Rectangle 3" width="0.494" height="3.949" transform="translate(22.51 11.748)"/>
|
||||
<rect id="Rectangle_4" data-name="Rectangle 4" width="0.494" height="3.949" transform="translate(0.592 11.748)"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group_5" data-name="Group 5" transform="translate(664.158 395.579)">
|
||||
<rect id="Rectangle_6" data-name="Rectangle 6" class="cls-4" width="6.22" height="4.048" transform="translate(0 6.861)"/>
|
||||
<rect id="Rectangle_9" data-name="Rectangle 9" class="cls-4" width="6.22" height="4.048" transform="translate(10.811) rotate(90)"/>
|
||||
<rect id="Rectangle_7" data-name="Rectangle 7" class="cls-4" width="6.22" height="4.048" transform="translate(17.573 10.909) rotate(180)"/>
|
||||
<rect id="Rectangle_8" data-name="Rectangle 8" class="cls-4" width="6.22" height="4.048" transform="translate(6.763 17.573) rotate(-90)"/>
|
||||
<g id="Ellipse_1" data-name="Ellipse 1" class="cls-5" transform="translate(4.838 4.887)">
|
||||
<ellipse class="cls-6" cx="3.949" cy="3.949" rx="3.949" ry="3.949"/>
|
||||
<ellipse class="cls-7" cx="3.949" cy="3.949" rx="3.824" ry="3.824"/>
|
||||
</g>
|
||||
<path id="Hole" d="M5605.323,961.71s-.032.6-.45.6-.854,0-.854,0a1.382,1.382,0,0,0-.266.989c0,.74.208.939.208.939h.953a.378.378,0,0,1,.409.408v.975a2.269,2.269,0,0,0,1.033.168,3.77,3.77,0,0,0,.98-.168v-.975a.426.426,0,0,1,.43-.408,6.239,6.239,0,0,0,.845-.082s.231-.219.253-.955-.207-.961-.207-.961h-.99a.375.375,0,0,1-.446-.4,6.76,6.76,0,0,1,0-.961,2.814,2.814,0,0,0-1.9,0C5605.313,961.289,5605.323,961.71,5605.323,961.71Z" transform="translate(-5597.534 -954.45)"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4.5 KiB |
103
legoresources/Block icns/icn_block_ultra_sonic.svg
Normal file
@ -0,0 +1,103 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="1324.724 8870.247 54.201 22.707">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #f2f2f2;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: #292929;
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
stroke: rgba(242,242,242,0.5);
|
||||
stroke-width: 0.15px;
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
fill: #931f1f;
|
||||
}
|
||||
|
||||
.cls-5 {
|
||||
fill: #9d761f;
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
clip-path: url(#clip-path);
|
||||
}
|
||||
|
||||
.cls-7 {
|
||||
stroke: none;
|
||||
}
|
||||
|
||||
.cls-8 {
|
||||
fill: none;
|
||||
}
|
||||
</style>
|
||||
<clipPath id="clip-path">
|
||||
<ellipse id="guld" class="cls-1" cx="4.541" cy="4.541" rx="4.541" ry="4.541"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g id="icn_block_ultra_sonic" transform="translate(666.315 8209.204)">
|
||||
<rect id="Rectangle_1" data-name="Rectangle 1" class="cls-2" width="28.236" height="20.338" transform="translate(673.021 661.932)"/>
|
||||
<rect id="Rectangle_2" data-name="Rectangle 2" width="16.487" height="11.452" transform="translate(677.958 666.474)"/>
|
||||
<g id="eye1" transform="translate(658.41 661.044)">
|
||||
<g id="sort" class="cls-3" transform="translate(0 0)">
|
||||
<ellipse class="cls-7" cx="11.354" cy="11.354" rx="11.354" ry="11.354"/>
|
||||
<ellipse class="cls-8" cx="11.354" cy="11.354" rx="11.279" ry="11.279"/>
|
||||
</g>
|
||||
<ellipse id="rød" class="cls-4" cx="7.01" cy="7.01" rx="7.01" ry="7.01" transform="translate(4.344 4.344)"/>
|
||||
<ellipse id="guld-3" data-name="guld" class="cls-5" cx="5.232" cy="5.232" rx="5.232" ry="5.232" transform="translate(6.121 6.121)"/>
|
||||
<ellipse id="guld-4" data-name="guld" class="cls-1" cx="4.541" cy="4.541" rx="4.541" ry="4.541" transform="translate(6.812 6.812)"/>
|
||||
<g id="Group_5" data-name="Group 5" transform="translate(6.812 6.812)">
|
||||
<g id="Mask_Group_8" data-name="Mask Group 8" class="cls-6">
|
||||
<g id="Group_17" data-name="Group 17" transform="translate(-4.652 2.089) rotate(-30)">
|
||||
<rect id="Rectangle_84" data-name="Rectangle 84" class="cls-5" width="0.395" height="14.834" transform="translate(1.333 0)"/>
|
||||
<rect id="Rectangle_91" data-name="Rectangle 91" class="cls-5" width="0.395" height="14.649" transform="translate(0 13.081) rotate(-90)"/>
|
||||
<rect id="Rectangle_85" data-name="Rectangle 85" class="cls-5" width="0.395" height="14.834" transform="translate(3.209 0)"/>
|
||||
<rect id="Rectangle_97" data-name="Rectangle 97" class="cls-5" width="0.395" height="14.649" transform="translate(0 11.205) rotate(-90)"/>
|
||||
<rect id="Rectangle_86" data-name="Rectangle 86" class="cls-5" width="0.395" height="14.834" transform="translate(5.084 0)"/>
|
||||
<rect id="Rectangle_96" data-name="Rectangle 96" class="cls-5" width="0.395" height="14.649" transform="translate(0 9.33) rotate(-90)"/>
|
||||
<rect id="Rectangle_87" data-name="Rectangle 87" class="cls-5" width="0.395" height="14.834" transform="translate(6.96 0)"/>
|
||||
<rect id="Rectangle_95" data-name="Rectangle 95" class="cls-5" width="0.395" height="14.649" transform="translate(0 7.454) rotate(-90)"/>
|
||||
<rect id="Rectangle_88" data-name="Rectangle 88" class="cls-5" width="0.395" height="14.834" transform="translate(8.836 0)"/>
|
||||
<rect id="Rectangle_94" data-name="Rectangle 94" class="cls-5" width="0.395" height="14.649" transform="translate(0 5.578) rotate(-90)"/>
|
||||
<rect id="Rectangle_89" data-name="Rectangle 89" class="cls-5" width="0.395" height="14.834" transform="translate(10.712 0)"/>
|
||||
<rect id="Rectangle_93" data-name="Rectangle 93" class="cls-5" width="0.395" height="14.649" transform="translate(0 3.702) rotate(-90)"/>
|
||||
<rect id="Rectangle_90" data-name="Rectangle 90" class="cls-5" width="0.395" height="14.834" transform="translate(12.588 0)"/>
|
||||
<rect id="Rectangle_92" data-name="Rectangle 92" class="cls-5" width="0.395" height="14.649" transform="translate(0 1.826) rotate(-90)"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="eye2" transform="translate(689.903 661.044)">
|
||||
<g id="sort-2" data-name="sort" class="cls-3" transform="translate(0 0)">
|
||||
<ellipse class="cls-7" cx="11.354" cy="11.354" rx="11.354" ry="11.354"/>
|
||||
<ellipse class="cls-8" cx="11.354" cy="11.354" rx="11.279" ry="11.279"/>
|
||||
</g>
|
||||
<ellipse id="rød-2" data-name="rød" class="cls-4" cx="7.01" cy="7.01" rx="7.01" ry="7.01" transform="translate(4.344 4.344)"/>
|
||||
<ellipse id="guld-5" data-name="guld" class="cls-5" cx="5.232" cy="5.232" rx="5.232" ry="5.232" transform="translate(6.121 6.121)"/>
|
||||
<ellipse id="guld-6" data-name="guld" class="cls-1" cx="4.541" cy="4.541" rx="4.541" ry="4.541" transform="translate(6.812 6.812)"/>
|
||||
<g id="Group_18" data-name="Group 18" transform="translate(6.812 6.812)">
|
||||
<g id="Mask_Group_8-2" data-name="Mask Group 8" class="cls-6">
|
||||
<g id="Group_17-2" data-name="Group 17" transform="translate(-4.652 2.089) rotate(-30)">
|
||||
<rect id="Rectangle_84-2" data-name="Rectangle 84" class="cls-5" width="0.395" height="14.834" transform="translate(1.333 0)"/>
|
||||
<rect id="Rectangle_91-2" data-name="Rectangle 91" class="cls-5" width="0.395" height="14.649" transform="translate(0 13.081) rotate(-90)"/>
|
||||
<rect id="Rectangle_85-2" data-name="Rectangle 85" class="cls-5" width="0.395" height="14.834" transform="translate(3.209 0)"/>
|
||||
<rect id="Rectangle_97-2" data-name="Rectangle 97" class="cls-5" width="0.395" height="14.649" transform="translate(0 11.205) rotate(-90)"/>
|
||||
<rect id="Rectangle_86-2" data-name="Rectangle 86" class="cls-5" width="0.395" height="14.834" transform="translate(5.084 0)"/>
|
||||
<rect id="Rectangle_96-2" data-name="Rectangle 96" class="cls-5" width="0.395" height="14.649" transform="translate(0 9.33) rotate(-90)"/>
|
||||
<rect id="Rectangle_87-2" data-name="Rectangle 87" class="cls-5" width="0.395" height="14.834" transform="translate(6.96 0)"/>
|
||||
<rect id="Rectangle_95-2" data-name="Rectangle 95" class="cls-5" width="0.395" height="14.649" transform="translate(0 7.454) rotate(-90)"/>
|
||||
<rect id="Rectangle_88-2" data-name="Rectangle 88" class="cls-5" width="0.395" height="14.834" transform="translate(8.836 0)"/>
|
||||
<rect id="Rectangle_94-2" data-name="Rectangle 94" class="cls-5" width="0.395" height="14.649" transform="translate(0 5.578) rotate(-90)"/>
|
||||
<rect id="Rectangle_89-2" data-name="Rectangle 89" class="cls-5" width="0.395" height="14.834" transform="translate(10.712 0)"/>
|
||||
<rect id="Rectangle_93-2" data-name="Rectangle 93" class="cls-5" width="0.395" height="14.649" transform="translate(0 3.702) rotate(-90)"/>
|
||||
<rect id="Rectangle_90-2" data-name="Rectangle 90" class="cls-5" width="0.395" height="14.834" transform="translate(12.588 0)"/>
|
||||
<rect id="Rectangle_92-2" data-name="Rectangle 92" class="cls-5" width="0.395" height="14.649" transform="translate(0 1.826) rotate(-90)"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.0 KiB |
246
legoresources/SVGassets/Color Sensor.svg
Normal file
@ -0,0 +1,246 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
viewBox="1925.358 6183.438 36.101 36.101003"
|
||||
version="1.1"
|
||||
id="svg41"
|
||||
sodipodi:docname="Color Sensor.svg"
|
||||
inkscape:export-filename="C:\gh\pxt-ev3\libs\core\jres\icons\colorSensor-icon.png"
|
||||
inkscape:export-xdpi="319.10471"
|
||||
inkscape:export-ydpi="319.10471"
|
||||
width="36.101002"
|
||||
height="36.101002"
|
||||
inkscape:version="0.92.1 r15371">
|
||||
<metadata
|
||||
id="metadata45">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1137"
|
||||
id="namedview43"
|
||||
showgrid="false"
|
||||
inkscape:zoom="7.072009"
|
||||
inkscape:cx="18.050501"
|
||||
inkscape:cy="16.685499"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg41" />
|
||||
<defs
|
||||
id="defs22">
|
||||
<style
|
||||
id="style2">
|
||||
.cls-1 {
|
||||
fill: #a8a9a8;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
clip-path: url(#clip-path);
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: url(#linear-gradient);
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
fill: #b72b1c;
|
||||
}
|
||||
|
||||
.cls-5 {
|
||||
fill: #f2f2f2;
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
filter: url(#Path_1);
|
||||
}
|
||||
</style>
|
||||
<clipPath
|
||||
id="clip-path">
|
||||
<path
|
||||
id="Union_5"
|
||||
data-name="Union 5"
|
||||
class="cls-1"
|
||||
d="m 3.907,33.37 c -1.069,0 -1.935,-0.617 -1.935,-1.377 V 27.606 H 0.758 A 0.758,0.758 0 0 1 0,26.848 V 7.129 A 0.758,0.758 0 0 1 0.758,6.371 H 1.972 V 1.377 C 1.972,0.617 2.838,0 3.907,0 h 28.287 c 1.069,0 1.935,0.617 1.935,1.377 v 4.994 h 1.213 a 0.758,0.758 0 0 1 0.759,0.758 v 19.719 a 0.758,0.758 0 0 1 -0.759,0.758 h -1.213 v 4.387 c 0,0.761 -0.867,1.377 -1.935,1.377 z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a8a9a8" />
|
||||
</clipPath>
|
||||
<linearGradient
|
||||
id="linear-gradient"
|
||||
x1="16.378942"
|
||||
y1="29.514856"
|
||||
x2="16.378942"
|
||||
y2="34.98542"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="scale(0.98165674,1.018686)">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#a8a9a8"
|
||||
id="stop6" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#545554"
|
||||
id="stop8" />
|
||||
</linearGradient>
|
||||
<filter
|
||||
id="Path_1"
|
||||
x="1918.33"
|
||||
y="6177.438"
|
||||
width="50.157001"
|
||||
height="51.370998"
|
||||
filterUnits="userSpaceOnUse">
|
||||
<feOffset
|
||||
dy="3"
|
||||
input="SourceAlpha"
|
||||
id="feOffset11" />
|
||||
<feGaussianBlur
|
||||
stdDeviation="3"
|
||||
result="blur"
|
||||
id="feGaussianBlur13" />
|
||||
<feFlood
|
||||
flood-opacity="0.502"
|
||||
id="feFlood15" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in2="blur"
|
||||
id="feComposite17"
|
||||
result="result1" />
|
||||
<feComposite
|
||||
in="SourceGraphic"
|
||||
in2="result1"
|
||||
id="feComposite19" />
|
||||
</filter>
|
||||
</defs>
|
||||
<g
|
||||
id="Color_Sensor"
|
||||
data-name="Color Sensor"
|
||||
transform="translate(1346,5555.3645)">
|
||||
<g
|
||||
id="Mask_Group_5"
|
||||
data-name="Mask Group 5"
|
||||
class="cls-2"
|
||||
transform="translate(579.358,629.439)"
|
||||
clip-path="url(#clip-path)">
|
||||
<g
|
||||
id="Group_4"
|
||||
data-name="Group 4">
|
||||
<g
|
||||
id="Group_2"
|
||||
data-name="Group 2">
|
||||
<path
|
||||
id="Path_28"
|
||||
data-name="Path 28"
|
||||
class="cls-1"
|
||||
d="M 0.758,0 H 35.342 A 0.758,0.758 0 0 1 36.1,0.758 v 19.719 a 0.758,0.758 0 0 1 -0.758,0.758 H 0.758 A 0.758,0.758 0 0 1 0,20.477 V 0.758 A 0.758,0.758 0 0 1 0.758,0 Z"
|
||||
transform="translate(0,6.371)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a8a9a8" />
|
||||
<g
|
||||
class="cls-6"
|
||||
transform="translate(-1925.36,-6183.44)"
|
||||
id="g26"
|
||||
style="filter:url(#Path_1)">
|
||||
<path
|
||||
id="Path_1-2"
|
||||
data-name="Path 1"
|
||||
class="cls-3"
|
||||
d="m 1.935,0 h 28.287 c 1.069,0 1.935,0.617 1.935,1.377 v 30.616 c 0,0.761 -0.866,1.377 -1.935,1.377 H 1.935 C 0.866,33.371 0,32.754 0,31.993 V 1.377 C 0,0.617 0.866,0 1.935,0 Z"
|
||||
transform="translate(1927.33,6183.44)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:url(#linear-gradient)" />
|
||||
</g>
|
||||
<rect
|
||||
id="Rectangle_2"
|
||||
data-name="Rectangle 2"
|
||||
width="0.75800002"
|
||||
height="6.0669999"
|
||||
transform="translate(34.584,9.404)"
|
||||
x="0"
|
||||
y="0" />
|
||||
<rect
|
||||
id="Rectangle_5"
|
||||
data-name="Rectangle 5"
|
||||
width="0.75800002"
|
||||
height="6.0669999"
|
||||
transform="translate(0.91,9.404)"
|
||||
x="0"
|
||||
y="0" />
|
||||
<rect
|
||||
id="Rectangle_3"
|
||||
data-name="Rectangle 3"
|
||||
width="0.75800002"
|
||||
height="6.0669999"
|
||||
transform="translate(34.584,18.05)"
|
||||
x="0"
|
||||
y="0" />
|
||||
<rect
|
||||
id="Rectangle_4"
|
||||
data-name="Rectangle 4"
|
||||
width="0.75800002"
|
||||
height="6.0669999"
|
||||
transform="translate(0.91,18.05)"
|
||||
x="0"
|
||||
y="0" />
|
||||
</g>
|
||||
<path
|
||||
id="Union_1"
|
||||
data-name="Union 1"
|
||||
class="cls-4"
|
||||
d="m 2.579,17.747 a 7,7 0 0 1 0.16,-1.494 9.556,9.556 0 1 1 13.634,0 6.978,6.978 0 1 1 -13.794,1.494 z"
|
||||
transform="translate(8.494,4.096)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#b72b1c" />
|
||||
<path
|
||||
id="Union_2"
|
||||
data-name="Union 2"
|
||||
d="M 2.67,16.308 A 5.374,5.374 0 0 1 3.042,14.337 8.039,8.039 0 1 1 13.064,14.315 5.388,5.388 0 1 1 2.67,16.308 Z"
|
||||
transform="translate(10.011,5.534)"
|
||||
inkscape:connector-curvature="0" />
|
||||
<g
|
||||
id="Group_3"
|
||||
data-name="Group 3"
|
||||
transform="translate(14.41,10.163)">
|
||||
<circle
|
||||
id="Ellipse_5"
|
||||
data-name="Ellipse 5"
|
||||
class="cls-5"
|
||||
cx="3.6400001"
|
||||
cy="3.6400001"
|
||||
r="3.6400001"
|
||||
style="fill:#f2f2f2" />
|
||||
<circle
|
||||
id="Ellipse_6"
|
||||
data-name="Ellipse 6"
|
||||
class="cls-5"
|
||||
cx="1.972"
|
||||
cy="1.972"
|
||||
transform="translate(1.669,9.556)"
|
||||
r="1.972"
|
||||
style="fill:#f2f2f2" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.2 KiB |
146
legoresources/SVGassets/EV3.svg
Normal file
@ -0,0 +1,146 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="1549 6115.496 110.729 170.038">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: url(#linear-gradient);
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: #f2f2f2;
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: url(#linear-gradient-2);
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
fill: #3c3c3c;
|
||||
}
|
||||
|
||||
.cls-5 {
|
||||
fill: #a0b5a6;
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
fill: url(#linear-gradient-3);
|
||||
}
|
||||
|
||||
.cls-7 {
|
||||
fill: #6a6a6a;
|
||||
}
|
||||
|
||||
.cls-8 {
|
||||
fill: url(#linear-gradient-4);
|
||||
}
|
||||
|
||||
.cls-9 {
|
||||
fill: #a8a9a8;
|
||||
}
|
||||
|
||||
.cls-10 {
|
||||
fill: #9a9a9a;
|
||||
}
|
||||
|
||||
.cls-11 {
|
||||
fill: url(#linear-gradient-5);
|
||||
}
|
||||
|
||||
.cls-12 {
|
||||
fill: gray;
|
||||
}
|
||||
|
||||
.cls-13 {
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
.cls-14 {
|
||||
clip-path: url(#clip-path);
|
||||
}
|
||||
|
||||
.cls-15 {
|
||||
fill: #ffed00;
|
||||
}
|
||||
|
||||
.cls-16 {
|
||||
fill: #b72b1c;
|
||||
}
|
||||
|
||||
.cls-17 {
|
||||
fill: #1d1d1b;
|
||||
}
|
||||
</style>
|
||||
<linearGradient id="linear-gradient" x1="0.5" y1="0.942" x2="0.5" y2="1.018" gradientUnits="objectBoundingBox">
|
||||
<stop offset="0" stop-color="#f2f2f2"/>
|
||||
<stop offset="1" stop-color="#797979"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linear-gradient-2" x1="0.5" y1="0.924" x2="0.5" y2="0.948" gradientUnits="objectBoundingBox">
|
||||
<stop offset="0" stop-color="#a8a9a8"/>
|
||||
<stop offset="1" stop-color="gray"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linear-gradient-3" x1="0.5" y1="0.807" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
|
||||
<stop offset="0" stop-color="#a8a9a8"/>
|
||||
<stop offset="1" stop-color="#545554"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linear-gradient-4" x1="0.5" y1="0.948" x2="0.5" y2="0.059" gradientUnits="objectBoundingBox">
|
||||
<stop offset="0" stop-color="#6a6a6a"/>
|
||||
<stop offset="0.522" stop-color="#8ce300"/>
|
||||
<stop offset="1" stop-color="#6a6a6a"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linear-gradient-5" x1="0.5" y1="0.363" x2="0.5" gradientUnits="objectBoundingBox">
|
||||
<stop offset="0" stop-color="#747474"/>
|
||||
<stop offset="1" stop-color="#3c3c3c"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip-path">
|
||||
<rect id="Rectangle_32" data-name="Rectangle 32" width="12.383" height="12.383"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g id="EV3" transform="translate(1346 5554)">
|
||||
<g id="brick" transform="translate(203 561.496)">
|
||||
<path id="Path_19" data-name="Path 19" class="cls-1" d="M1.972,0H108.758a1.972,1.972,0,0,1,1.972,1.972V104.965a1.972,1.972,0,0,1-1.972,1.972H1.972A1.972,1.972,0,0,1,0,104.965V1.972A1.972,1.972,0,0,1,1.972,0Z" transform="translate(0 31.702)"/>
|
||||
<path id="Path_20" data-name="Path 20" class="cls-2" d="M1.972,0H96.319a1.972,1.972,0,0,1,1.972,1.972V40.5a1.972,1.972,0,0,1-1.972,1.972H1.972A1.972,1.972,0,0,1,0,40.5V1.972A1.972,1.972,0,0,1,1.972,0Z" transform="translate(6.219 127.566)"/>
|
||||
<path id="Path_18" data-name="Path 18" class="cls-3" d="M1.972,0H98.14a1.972,1.972,0,0,1,1.972,1.972V77.207a1.972,1.972,0,0,1-1.972,1.972H1.972A1.972,1.972,0,0,1,0,77.207V1.972A1.972,1.972,0,0,1,1.972,0Z" transform="translate(5.309)"/>
|
||||
<path id="Path_17" data-name="Path 17" class="cls-4" d="M3.792,0H78.269a3.792,3.792,0,0,1,3.792,3.792V45.657a3.792,3.792,0,0,1-3.792,3.792H3.792A3.792,3.792,0,0,1,0,45.657V3.792A3.792,3.792,0,0,1,3.792,0Z" transform="translate(14.41 10.466)"/>
|
||||
<path id="Path_16" data-name="Path 16" class="cls-5" d="M2.73,0H65.983a2.73,2.73,0,0,1,2.73,2.73V43.078a2.73,2.73,0,0,1-2.73,2.73H2.73A2.73,2.73,0,0,1,0,43.078V2.73A2.73,2.73,0,0,1,2.73,0Z" transform="translate(21.236 12.438)"/>
|
||||
<path id="Path_21" data-name="Path 21" class="cls-6" d="M0,0H98.291V21.387a1.972,1.972,0,0,1-1.972,1.972H1.972A1.972,1.972,0,0,1,0,21.387Z" transform="translate(6.219 146.679)"/>
|
||||
</g>
|
||||
<g id="buttons" transform="translate(216.197 621.259)">
|
||||
<path id="Union_4" data-name="Union 4" class="cls-7" d="M25.938,48.842c-5.585-5.391-14.259-14.258-14.259-14.258V32.764H8.267a8.266,8.266,0,1,1,0-16.533h3.413V14.41L25.786,0H39.893C46.282,6.511,54,14.107,54,14.107v2.124h3.261a8.266,8.266,0,0,1,0,16.533H54v1.821c-7.514,7.729-13.955,14.258-13.955,14.258Z" transform="translate(9.556 25.331)"/>
|
||||
<path id="light" class="cls-8" d="M25.938,48.842c-5.585-5.391-14.259-14.258-14.259-14.258V32.764H8.267a8.266,8.266,0,1,1,0-16.533h3.413V14.41L25.787,0H39.893C46.282,6.511,54,14.107,54,14.107v2.124h3.261a8.266,8.266,0,0,1,0,16.533H54v1.821c-7.514,7.729-13.955,14.258-13.955,14.258Z" transform="translate(9.556 25.331)"/>
|
||||
<path id="Rectangle_23" data-name="Rectangle 23" class="cls-9" d="M6.143,0h10.39a0,0,0,0,1,0,0V12.286a0,0,0,0,1,0,0H6.143A6.143,6.143,0,0,1,0,6.143v0A6.143,6.143,0,0,1,6.143,0Z" transform="translate(11.528 43.533)"/>
|
||||
<path id="Rectangle_24" data-name="Rectangle 24" class="cls-9" d="M6.143,0h10.39a0,0,0,0,1,0,0V12.286a0,0,0,0,1,0,0H6.143A6.143,6.143,0,0,1,0,6.143v0A6.143,6.143,0,0,1,6.143,0Z" transform="translate(72.96 55.82) rotate(180)"/>
|
||||
<path id="Path_42" data-name="Path 42" class="cls-4" d="M.455,0H12.438a.455.455,0,0,1,.455.455V11.831a.455.455,0,0,1-.455.455H.455A.455.455,0,0,1,0,11.831V.455A.455.455,0,0,1,.455,0Z" transform="translate(35.797 43.533)"/>
|
||||
<path id="Path_15" data-name="Path 15" class="cls-9" d="M-98.892-1598.849l12.741-.152,9.556,9.859-3.944,3.944v7.129h-3.64v-4.1a3.058,3.058,0,0,0-3.034-3.034c-2.961-.047-11.073,0-11.073,0a2.468,2.468,0,0,0-2.579,2.578v4.551h-3.64v-7.129l-3.944-3.944Z" transform="translate(134.841 1626.455)"/>
|
||||
<path id="Path_16-2" data-name="Path 16" class="cls-9" d="M9.624.095,22.286,0l9.582,9.851-4,3.907v7.17h-3.6V16.815a3.065,3.065,0,0,0-3.026-3.058c-2.961-.047-11.011,0-11.011,0a2.6,2.6,0,0,0-2.65,2.65v4.521H3.907v-7.17L0,9.851Z" transform="translate(58.26 71.876) rotate(180)"/>
|
||||
<rect id="Rectangle_26" data-name="Rectangle 26" class="cls-4" width="3.034" height="13.803" transform="translate(40.803)"/>
|
||||
<rect id="Rectangle_10" data-name="Rectangle 10" class="cls-10" width="3.034" height="6.067" transform="translate(40.803 13.197)"/>
|
||||
<rect id="Rectangle_12" data-name="Rectangle 12" class="cls-11" width="3.034" height="6.219" transform="translate(40.803 13.197)"/>
|
||||
<rect id="Rectangle_11" data-name="Rectangle 11" class="cls-12" width="3.034" height="5.916" transform="translate(40.803 19.416)"/>
|
||||
<path id="Path_15-2" data-name="Path 15" class="cls-9" d="M0,0H23.663V5.714c-2.618,2.638-5.976,5.965-5.976,5.965H1.972A1.972,1.972,0,0,1,0,9.708Z" transform="translate(0 19.416)"/>
|
||||
</g>
|
||||
<g id="LEGO_logo" data-name="LEGO logo" transform="translate(289.475 711.071)">
|
||||
<rect id="Rectangle_31" data-name="Rectangle 31" class="cls-13" width="12.208" height="12.208" transform="translate(0.087 0.087)"/>
|
||||
<g id="Group_15" data-name="Group 15">
|
||||
<g id="Group_10" data-name="Group 10" class="cls-14">
|
||||
<path id="Path_18-2" data-name="Path 18" class="cls-15" d="M.4,12.608H12.608V.4H.4ZM11.8,5.467a5.136,5.136,0,0,1-.24,1.179c-.437,1.267-.917,2.075-2.075,2.075a1.131,1.131,0,0,1-1.157-.7l-.044-.153L8.2,7.978A1.873,1.873,0,0,1,6.733,8.7a1.287,1.287,0,0,1-1.026-.437l-.066-.087-.066.066a1.589,1.589,0,0,1-1.157.415,1.317,1.317,0,0,1-.961-.371L3.37,8.262,3.3,8.327A1.556,1.556,0,0,1,2.191,8.7a.878.878,0,0,1-.961-.9A8.05,8.05,0,0,1,2.322,4.7a1.027,1.027,0,0,1,.917-.524.8.8,0,0,1,.568.175c.109.109.109.2.131.415l.022.284.153-.24a1.611,1.611,0,0,1,1.529-.655,1.05,1.05,0,0,1,.9.371l.044.087.066-.066a1.808,1.808,0,0,1,1.2-.393,1.52,1.52,0,0,1,1.114.371.762.762,0,0,1,.131.2l.066.109.087-.109a1.6,1.6,0,0,1,1.31-.568,1.258,1.258,0,0,1,.983.349,1.352,1.352,0,0,1,.262.961" transform="translate(-0.313 -0.313)"/>
|
||||
</g>
|
||||
<g id="Group_11" data-name="Group 11" class="cls-14">
|
||||
<path id="Path_19-2" data-name="Path 19" class="cls-16" d="M.4,12.608H12.608V.4H.4ZM12.149,5.947a6.83,6.83,0,0,1-.524,1.594,2.28,2.28,0,0,1-2.1,1.551,1.694,1.694,0,0,1-1.354-.546,2.194,2.194,0,0,1-1.485.546A1.764,1.764,0,0,1,5.6,8.742a2.182,2.182,0,0,1-1.223.349,1.781,1.781,0,0,1-1.026-.306,2.2,2.2,0,0,1-1.179.306A1.285,1.285,0,0,1,.815,7.847,8.327,8.327,0,0,1,1.994,4.506a1.407,1.407,0,0,1,1.245-.743c.59,0,.786.175.9.371A2.259,2.259,0,0,1,5.6,3.741a1.5,1.5,0,0,1,1,.328,2.393,2.393,0,0,1,1.2-.306,1.731,1.731,0,0,1,1.354.459,2.039,2.039,0,0,1,1.332-.437,1.566,1.566,0,0,1,1.376.611,1.8,1.8,0,0,1,.284,1.551" transform="translate(-0.313 -0.313)"/>
|
||||
</g>
|
||||
<g id="Group_12" data-name="Group 12" class="cls-14">
|
||||
<path id="Path_20-2" data-name="Path 20" class="cls-17" d="M0,12.383H12.383V0H0Zm12.208-.175H.175V.175H12.208Z"/>
|
||||
</g>
|
||||
<g id="Group_13" data-name="Group 13" class="cls-14">
|
||||
<path id="Path_21-2" data-name="Path 21" class="cls-17" d="M52.962,15.984V15.9h.066c.044,0,.066.022.066.044s-.022.044-.066.044Zm.2.175-.044-.066q-.033-.066-.066-.066h0a.094.094,0,0,0,.087-.087.08.08,0,0,0-.087-.087H52.9v.306h.066v-.131h.022c.022,0,.044,0,.044.022.022.022.022.044.044.066l.022.044Zm-.153-.393a.24.24,0,1,1-.24.24.258.258,0,0,1,.24-.24m0-.066a.306.306,0,1,0,.306.306.312.312,0,0,0-.306-.306" transform="translate(-41.191 -12.271)"/>
|
||||
</g>
|
||||
<g id="Group_14" data-name="Group 14" class="cls-14">
|
||||
<path id="Path_22" data-name="Path 22" class="cls-17" d="M13.189,17.122a1.713,1.713,0,0,0-1.376.611.557.557,0,0,0-.153-.218A1.442,1.442,0,0,0,10.5,17.1a1.858,1.858,0,0,0-1.245.415A1.089,1.089,0,0,0,8.3,17.1a1.68,1.68,0,0,0-1.594.7.539.539,0,0,0-.153-.459.883.883,0,0,0-.633-.2,1.1,1.1,0,0,0-.983.568A8.8,8.8,0,0,0,3.8,20.878a.966.966,0,0,0,1.048.961,1.516,1.516,0,0,0,1.179-.393,1.316,1.316,0,0,0,1,.393,1.582,1.582,0,0,0,1.223-.459,1.378,1.378,0,0,0,1.092.459,1.913,1.913,0,0,0,1.529-.764,1.2,1.2,0,0,0,1.245.743c1.2,0,1.725-.83,2.162-2.118a4.449,4.449,0,0,0,.262-1.2,1.207,1.207,0,0,0-1.354-1.376M5.218,20.4c.611-.109.786.109.764.328-.066.611-.633.764-1.114.743a.626.626,0,0,1-.7-.59,8.208,8.208,0,0,1,1.07-2.97.709.709,0,0,1,.677-.393c.306,0,.371.153.371.328A14.253,14.253,0,0,1,5.218,20.4m2.009-.568c-.044.109-.109.349-.175.59a2.42,2.42,0,0,1,.611-.087c.306,0,.48.131.48.371,0,.59-.655.764-1.114.764a.845.845,0,0,1-.939-.83,6.135,6.135,0,0,1,.677-2.271,1.372,1.372,0,0,1,1.529-.9c.306,0,.677.131.677.437,0,.415-.349.568-.677.59a3.851,3.851,0,0,1-.5,0,3.871,3.871,0,0,0-.24.48c.633-.087.9.044.786.415-.153.5-.59.524-1.114.437m3.123-1.551a.472.472,0,0,0-.371.218,6.165,6.165,0,0,0-.633,1.725c-.044.284.087.349.218.349.218,0,.459-.24.546-.611,0,0-.415,0-.306-.371s.328-.437.677-.459c.7-.022.633.48.568.764a1.8,1.8,0,0,1-1.7,1.594.89.89,0,0,1-.983-.961,4.914,4.914,0,0,1,.393-1.551c.371-.874.764-1.485,1.769-1.485.59,0,1.07.218,1,.764a.658.658,0,0,1-.633.677c-.109,0-.524,0-.393-.415.022-.131.044-.24-.153-.24m3.756.743a7.171,7.171,0,0,1-.59,1.616,1.409,1.409,0,0,1-1.376.852c-.437,0-.939-.175-.939-.852A5.286,5.286,0,0,1,11.595,19c.306-.83.633-1.507,1.66-1.485,1.157,0,.939,1.048.852,1.507m-.852-.524a9.808,9.808,0,0,1-.633,1.856.328.328,0,0,1-.306.218c-.131,0-.175-.087-.2-.2a7.657,7.657,0,0,1,.7-1.944c.087-.131.175-.153.262-.131.175,0,.175.109.175.2" transform="translate(-2.969 -13.366)"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="EV3_logo" data-name="EV3 logo" transform="translate(215.286 714.697)">
|
||||
<path id="Path_12" data-name="Path 12" class="cls-2" d="M72.066,1.849a.183.183,0,0,1,.191.164h0v.847A.153.153,0,0,1,72.094,3H70.071a.366.366,0,0,0-.383.328V4.473a.346.346,0,0,0,.383.3h2.023c.191,0,.164.137.164.137v.82c0,.082-.055.137-.164.137H68.677a.187.187,0,0,1-.191-.191V5.621a.391.391,0,0,0-.383-.383H66.983a.391.391,0,0,0-.383.383v1.64a.366.366,0,0,0,.383.328h6.751a.346.346,0,0,0,.383-.3V.4a.346.346,0,0,0-.383-.3H67.01a.346.346,0,0,0-.383.3V2.068a.387.387,0,0,0,.355.383H68.1a.362.362,0,0,0,.355-.355V2.041a.173.173,0,0,1,.191-.191h3.417Z" transform="translate(-48.397 -0.073)"/>
|
||||
<path id="Path_13" data-name="Path 13" class="cls-2" d="M39.03,0H37.445c-.246,0-.328.164-.437.383L35.067,4.756a.23.23,0,0,1-.191.109.206.206,0,0,1-.191-.137L32.744.383C32.635.164,32.525,0,32.279,0H30.667c-.355,0-.41.191-.3.41l3.2,6.724c.164.328.273.383.574.383h1.421a.546.546,0,0,0,.574-.383L39.358.41c.109-.219.027-.41-.328-.41" transform="translate(-22.029)"/>
|
||||
<path id="Path_14" data-name="Path 14" class="cls-2" d="M7.106,2.97a.346.346,0,0,1,.383.3V4.446a.346.346,0,0,1-.383.3H2.05c-.109,0-.191.055-.191.137h0V5.7h0c0,.082.082.137.191.137H7.106a.346.346,0,0,1,.383.3V7.288a.336.336,0,0,1-.355.3H.383A.346.346,0,0,1,0,7.288V.4A.346.346,0,0,1,.383.1H7.134a.319.319,0,0,1,.355.3V1.549a.319.319,0,0,1-.355.3H2.077c-.109,0-.219.027-.219.137v.847c0,.082.082.137.191.137Z" transform="translate(0 -0.073)"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 12 KiB |
BIN
legoresources/SVGassets/Large Motor.png
Normal file
After Width: | Height: | Size: 4.9 KiB |
650
legoresources/SVGassets/Large Motor.svg
Normal file
@ -0,0 +1,650 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
viewBox="2135.306 6140.141 153.634 153.634"
|
||||
version="1.1"
|
||||
id="svg7024"
|
||||
sodipodi:docname="Large Motor.svg"
|
||||
width="153.634"
|
||||
height="153.634"
|
||||
inkscape:version="0.92.1 r15371"
|
||||
inkscape:export-filename="C:\gh\pxt-ev3\libs\core\jres\icons\motorLarge-icon.png"
|
||||
inkscape:export-xdpi="74.983398"
|
||||
inkscape:export-ydpi="74.983398">
|
||||
<metadata
|
||||
id="metadata7028">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="837"
|
||||
id="namedview7026"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.5361183"
|
||||
inkscape:cx="39.260502"
|
||||
inkscape:cy="76.817001"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg7024" />
|
||||
<defs
|
||||
id="defs6971">
|
||||
<style
|
||||
id="style6897">
|
||||
.cls-1 {
|
||||
fill: #a8a9a8;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
clip-path: url(#clip-path);
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
clip-path: url(#clip-path-2);
|
||||
}
|
||||
|
||||
.cls-5 {
|
||||
fill: #f2f2f2;
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
clip-path: url(#clip-path-3);
|
||||
}
|
||||
|
||||
.cls-7 {
|
||||
fill: #6a6a6a;
|
||||
}
|
||||
|
||||
.cls-8 {
|
||||
fill: #9a9a9a;
|
||||
}
|
||||
|
||||
.cls-9 {
|
||||
fill: #b72b1c;
|
||||
}
|
||||
|
||||
.cls-10 {
|
||||
fill: #3c3c3c;
|
||||
}
|
||||
|
||||
.cls-11 {
|
||||
fill: #242424;
|
||||
}
|
||||
|
||||
.cls-12 {
|
||||
filter: url(#rød);
|
||||
}
|
||||
|
||||
.cls-13 {
|
||||
filter: url(#Path_4);
|
||||
}
|
||||
|
||||
.cls-14 {
|
||||
filter: url(#Path_1-2);
|
||||
}
|
||||
|
||||
.cls-15 {
|
||||
filter: url(#Path_2);
|
||||
}
|
||||
|
||||
.cls-16 {
|
||||
filter: url(#Path_1);
|
||||
}
|
||||
|
||||
.cls-17 {
|
||||
filter: url(#Path_34);
|
||||
}
|
||||
</style>
|
||||
<clipPath
|
||||
id="clip-path">
|
||||
<path
|
||||
id="Union_6"
|
||||
data-name="Union 6"
|
||||
class="cls-1"
|
||||
d="M 0,136.571 A 17.07,17.07 0 0 1 14.122,119.759 L 13.757,119.371 13.747,83.6 c 0,-0.419 0.142,-0.4 0.392,-0.673 L 25.043,72.4 V 62.372 l -0.75,-0.775 V 60.8 H 17.5 a 4,4 0 0 1 -4,-4 V 30.978 a 4,4 0 0 1 4,-4 h 6.793 V 18.8 a 5.784,5.784 0 0 1 5.784,-5.784 h 6.508 V 5.446 A 4,4 0 0 1 39.477,1.6 v -1 A 0.607,0.607 0 0 1 40.084,0 h 26.262 a 0.607,0.607 0 0 1 0.607,0.607 v 1.282 a 4,4 0 0 1 2.169,3.557 v 7.569 h 3.615 A 5.784,5.784 0 0 1 78.521,18.8 V 48.44 C 68.153,62.5 60.394,72.305 60.394,72.305 H 59.8 c 0,0 -7.092,-0.053 -13.682,-0.1 l 0.034,11.8 h 6.882 a 4,4 0 0 1 4,4 v 25.826 a 4,4 0 0 1 -4,4 h -6.785 l 0.034,11.775 c 0,0.838 -0.155,0.838 -0.462,1.137 l -10.415,10.099 -0.212,0.191 A 1.518,1.518 0 0 1 33.6,140.8 17.067,17.067 0 0 1 0,136.571 Z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a8a9a8" />
|
||||
</clipPath>
|
||||
<filter
|
||||
id="Path_34"
|
||||
x="2168.8911"
|
||||
y="6138.5869"
|
||||
width="38.536999"
|
||||
height="21.907"
|
||||
filterUnits="userSpaceOnUse">
|
||||
<feOffset
|
||||
input="SourceAlpha"
|
||||
id="feOffset6901" />
|
||||
<feGaussianBlur
|
||||
stdDeviation="1"
|
||||
result="blur"
|
||||
id="feGaussianBlur6903" />
|
||||
<feFlood
|
||||
flood-opacity="0.502"
|
||||
id="feFlood6905" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in2="blur"
|
||||
id="feComposite6907"
|
||||
result="result1" />
|
||||
<feComposite
|
||||
in="SourceGraphic"
|
||||
in2="result1"
|
||||
id="feComposite6909" />
|
||||
</filter>
|
||||
<filter
|
||||
id="Path_1"
|
||||
x="2146.053"
|
||||
y="6207.1338"
|
||||
width="38.536999"
|
||||
height="77.177002"
|
||||
filterUnits="userSpaceOnUse">
|
||||
<feOffset
|
||||
input="SourceAlpha"
|
||||
id="feOffset6912" />
|
||||
<feGaussianBlur
|
||||
stdDeviation="1"
|
||||
result="blur-2"
|
||||
id="feGaussianBlur6914" />
|
||||
<feFlood
|
||||
flood-opacity="0.502"
|
||||
id="feFlood6916" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in2="blur-2"
|
||||
id="feComposite6918"
|
||||
result="result1" />
|
||||
<feComposite
|
||||
in="SourceGraphic"
|
||||
in2="result1"
|
||||
id="feComposite6920" />
|
||||
</filter>
|
||||
<filter
|
||||
id="Path_2"
|
||||
x="2157.3491"
|
||||
y="6198.8062"
|
||||
width="27.028999"
|
||||
height="28.403"
|
||||
filterUnits="userSpaceOnUse">
|
||||
<feOffset
|
||||
input="SourceAlpha"
|
||||
id="feOffset6923" />
|
||||
<feGaussianBlur
|
||||
stdDeviation="1"
|
||||
result="blur-3"
|
||||
id="feGaussianBlur6925" />
|
||||
<feFlood
|
||||
flood-opacity="0.502"
|
||||
id="feFlood6927" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in2="blur-3"
|
||||
id="feComposite6929"
|
||||
result="result1" />
|
||||
<feComposite
|
||||
in="SourceGraphic"
|
||||
in2="result1"
|
||||
id="feComposite6931" />
|
||||
</filter>
|
||||
<filter
|
||||
id="Path_1-2"
|
||||
x="2156.6001"
|
||||
y="6150.1548"
|
||||
width="60.229"
|
||||
height="65.290001"
|
||||
filterUnits="userSpaceOnUse">
|
||||
<feOffset
|
||||
input="SourceAlpha"
|
||||
id="feOffset6934" />
|
||||
<feGaussianBlur
|
||||
stdDeviation="1"
|
||||
result="blur-4"
|
||||
id="feGaussianBlur6936" />
|
||||
<feFlood
|
||||
flood-opacity="0.502"
|
||||
id="feFlood6938" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in2="blur-4"
|
||||
id="feComposite6940"
|
||||
result="result1" />
|
||||
<feComposite
|
||||
in="SourceGraphic"
|
||||
in2="result1"
|
||||
id="feComposite6942" />
|
||||
</filter>
|
||||
<clipPath
|
||||
id="clip-path-2">
|
||||
<path
|
||||
id="Path_9"
|
||||
data-name="Path 9"
|
||||
class="cls-1"
|
||||
d="m 5.784,0 h 42.66 a 5.784,5.784 0 0 1 5.784,5.784 v 29.64 C 43.86,49.487 36.1,59.29 36.1,59.29 h -0.595 c 0,0 -19.462,-0.147 -23.864,-0.147 A 2.28,2.28 0 0 1 9.263,58.158 L 0,48.582 V 5.784 A 5.784,5.784 0 0 1 5.784,0 Z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a8a9a8" />
|
||||
</clipPath>
|
||||
<filter
|
||||
id="Path_4"
|
||||
x="2162.384"
|
||||
y="6155.2168"
|
||||
width="48.66"
|
||||
height="54.444"
|
||||
filterUnits="userSpaceOnUse">
|
||||
<feOffset
|
||||
input="SourceAlpha"
|
||||
id="feOffset6947" />
|
||||
<feGaussianBlur
|
||||
stdDeviation="1"
|
||||
result="blur-5"
|
||||
id="feGaussianBlur6949" />
|
||||
<feFlood
|
||||
flood-opacity="0.502"
|
||||
id="feFlood6951" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in2="blur-5"
|
||||
id="feComposite6953"
|
||||
result="result1" />
|
||||
<feComposite
|
||||
in="SourceGraphic"
|
||||
in2="result1"
|
||||
id="feComposite6955" />
|
||||
</filter>
|
||||
<clipPath
|
||||
id="clip-path-3">
|
||||
<path
|
||||
id="Path_10"
|
||||
data-name="Path 10"
|
||||
class="cls-1"
|
||||
d="M 5.784,0 H 36.875 A 5.784,5.784 0 0 1 42.66,5.784 V 28.032 C 34.013,39.3 27.1,48.444 27.1,48.444 H 5.784 A 5.784,5.784 0 0 1 0,42.66 V 5.784 A 5.784,5.784 0 0 1 5.784,0 Z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a8a9a8" />
|
||||
</clipPath>
|
||||
<filter
|
||||
id="rød"
|
||||
x="2132.3059"
|
||||
y="6256.646"
|
||||
width="40.129002"
|
||||
height="40.129002"
|
||||
filterUnits="userSpaceOnUse">
|
||||
<feOffset
|
||||
input="SourceAlpha"
|
||||
id="feOffset6960" />
|
||||
<feGaussianBlur
|
||||
stdDeviation="1"
|
||||
result="blur-6"
|
||||
id="feGaussianBlur6962" />
|
||||
<feFlood
|
||||
flood-opacity="0.502"
|
||||
id="feFlood6964" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in2="blur-6"
|
||||
id="feComposite6966"
|
||||
result="result1" />
|
||||
<feComposite
|
||||
in="SourceGraphic"
|
||||
in2="result1"
|
||||
id="feComposite6968" />
|
||||
</filter>
|
||||
</defs>
|
||||
<g
|
||||
id="Large_Motor"
|
||||
data-name="Large Motor"
|
||||
transform="translate(1383.553,5554.0014)">
|
||||
<g
|
||||
id="Mask_Group_6"
|
||||
data-name="Mask Group 6"
|
||||
class="cls-2"
|
||||
transform="translate(789.306,586.141)"
|
||||
clip-path="url(#clip-path)">
|
||||
<g
|
||||
id="Large_motor-2"
|
||||
data-name="Large motor"
|
||||
transform="translate(-1.623)">
|
||||
<path
|
||||
id="Path_45"
|
||||
data-name="Path 45"
|
||||
class="cls-1"
|
||||
d="m 5.461,0 h 5.612 a 5.461,5.461 0 0 1 5.461,5.461 v 22.9 a 5.461,5.461 0 0 1 -5.461,5.461 H 5.461 A 5.461,5.461 0 0 1 0,28.365 V 5.461 A 5.461,5.461 0 0 1 5.461,0 Z"
|
||||
transform="translate(42.123,84.012)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a8a9a8" />
|
||||
<circle
|
||||
id="Ellipse_2"
|
||||
data-name="Ellipse 2"
|
||||
class="cls-3"
|
||||
cx="3.7920001"
|
||||
cy="3.7920001"
|
||||
transform="translate(49.555,85.528)"
|
||||
r="3.7920001"
|
||||
style="fill:#ffffff" />
|
||||
<circle
|
||||
id="Ellipse_1"
|
||||
data-name="Ellipse 1"
|
||||
class="cls-3"
|
||||
cx="3.7920001"
|
||||
cy="3.7920001"
|
||||
transform="translate(49.555,108.736)"
|
||||
r="3.7920001"
|
||||
style="fill:#ffffff" />
|
||||
<path
|
||||
id="Path_36"
|
||||
data-name="Path 36"
|
||||
class="cls-1"
|
||||
d="m 0.607,0 h 26.262 a 0.607,0.607 0 0 1 0.607,0.607 V 5.9 A 0.607,0.607 0 0 1 26.869,6.507 H 0.607 A 0.607,0.607 0 0 1 0,5.9 V 0.607 A 0.607,0.607 0 0 1 0.607,0 Z"
|
||||
transform="translate(41.1)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a8a9a8" />
|
||||
<g
|
||||
class="cls-17"
|
||||
transform="translate(-2133.68,-6140.14)"
|
||||
id="g6978"
|
||||
style="filter:url(#Path_34)">
|
||||
<path
|
||||
id="Path_34-2"
|
||||
data-name="Path 34"
|
||||
class="cls-1"
|
||||
d="M 0.607,0 H 31.93 a 0.607,0.607 0 0 1 0.607,0.607 V 15.3 A 0.607,0.607 0 0 1 31.93,15.907 H 0.607 A 0.607,0.607 0 0 1 0,15.3 V 0.607 A 0.607,0.607 0 0 1 0.607,0 Z"
|
||||
transform="translate(2171.89,6141.59)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a8a9a8" />
|
||||
</g>
|
||||
<path
|
||||
id="Path_2-2"
|
||||
data-name="Path 2"
|
||||
class="cls-3"
|
||||
d="m 5610.158,939.234 a 4.151,4.151 0 0 1 -2.342,0.705 5.131,5.131 0 0 1 -2.988,-0.705 c -1.257,-0.931 -1.229,0.1 -1.229,0.1 v 1.8 c 0,0.45 0.553,0.846 1.229,0.459 0.676,-0.387 1,-0.581 1,-0.581 0,0 0.361,-0.184 0.361,0.335 v 2.62 c 0,0 0.021,0.786 -0.73,0.768 -0.751,-0.018 -1.38,0 -1.38,0 0,0 -0.293,0.248 -0.293,1.385 0,1.137 0.293,1.322 0.293,1.322 h 1.38 c 0,0 0.73,-0.024 0.73,0.649 v 1.3 c 0,0 0.227,0.359 1.169,0.306 a 3.6,3.6 0 0 0 1.4,-0.306 v -1.3 a 0.67,0.67 0 0 1 0.66,-0.649 c 0.631,-0.01 1.257,0 1.257,0 0,0 0.252,-0.191 0.287,-1.322 0.035,-1.131 -0.287,-1.385 -0.287,-1.385 h -1.257 c 0,0 -0.805,-0.052 -0.817,-0.768 -0.012,-0.716 0,-2.62 0,-2.62 0,0 -0.047,-0.515 0.332,-0.335 0.379,0.18 1.215,0.581 1.215,0.581 0,0 0.83,0.407 0.814,-0.459 -0.016,-0.866 0,-1.8 0,-1.8 0,0 -0.072,-0.534 -0.804,-0.1 z"
|
||||
transform="translate(-5553.893,-845.301)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff" />
|
||||
<path
|
||||
id="Path_3"
|
||||
data-name="Path 3"
|
||||
class="cls-3"
|
||||
d="m 5601.9,1015.336 a 0.83,0.83 0 0 1 1.2,-0.594 6.516,6.516 0 0 0 2.85,0.772 5.05,5.05 0 0 0 2.768,-0.772 c 0.829,-0.4 1.067,0.594 1.067,0.594 v 1.76 a 0.71,0.71 0 0 1 -1.067,0.561 5.791,5.791 0 0 0 -2.768,-0.837 7.06,7.06 0 0 0 -2.85,0.837 c 0,0 -1.178,0.239 -1.2,-0.561 -0.022,-0.8 0,-1.76 0,-1.76 z"
|
||||
transform="translate(-5552.485,-909.604)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff" />
|
||||
<g
|
||||
class="cls-16"
|
||||
transform="translate(-2133.68,-6140.14)"
|
||||
id="g6983"
|
||||
style="filter:url(#Path_1)">
|
||||
<path
|
||||
id="Path_1-3"
|
||||
data-name="Path 1"
|
||||
class="cls-1"
|
||||
d="M 0.016,8.513 13.42,-4.416 31.991,-3.746 32.162,55.2 c 0,0.838 -0.155,0.838 -0.462,1.137 l -10.416,10.096 -0.212,0.19 c -0.584,0.4 -1.987,-0.115 -1.987,-0.952 L -0.364,44.961 -0.375,9.187 c 0,-0.419 0.142,-0.402 0.391,-0.674 z"
|
||||
transform="translate(2149.43,6214.55)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a8a9a8" />
|
||||
</g>
|
||||
<g
|
||||
class="cls-15"
|
||||
transform="translate(-2133.68,-6140.14)"
|
||||
id="g6986"
|
||||
style="filter:url(#Path_2)">
|
||||
<path
|
||||
id="Path_2-3"
|
||||
data-name="Path 2"
|
||||
class="cls-1"
|
||||
d="m 1484.037,521.285 v 17.253 c 0,0 0.019,0.845 0.3,1.121 0.281,0.276 3.516,3.626 3.516,3.626 a 1.566,1.566 0 0 0 1.157,0.4 c 0.758,-0.025 11.627,0 11.627,0 l 4.429,-4.7 v -7.963 l -10.662,-0.567 z"
|
||||
transform="translate(676.31,5680.52)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a8a9a8" />
|
||||
</g>
|
||||
<g
|
||||
id="Group_4"
|
||||
data-name="Group 4"
|
||||
transform="translate(15.123,26.978)">
|
||||
<path
|
||||
id="Path_44"
|
||||
data-name="Path 44"
|
||||
class="cls-1"
|
||||
d="m 5.461,0 h 5.612 a 5.461,5.461 0 0 1 5.461,5.461 v 22.9 a 5.461,5.461 0 0 1 -5.461,5.461 H 5.461 A 5.461,5.461 0 0 1 0,28.365 V 5.461 A 5.461,5.461 0 0 1 5.461,0 Z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a8a9a8" />
|
||||
<circle
|
||||
id="Ellipse_3"
|
||||
data-name="Ellipse 3"
|
||||
class="cls-3"
|
||||
cx="3.7920001"
|
||||
cy="3.7920001"
|
||||
transform="translate(1.062,1.517)"
|
||||
r="3.7920001"
|
||||
style="fill:#ffffff" />
|
||||
<circle
|
||||
id="Ellipse_4"
|
||||
data-name="Ellipse 4"
|
||||
class="cls-3"
|
||||
cx="3.7920001"
|
||||
cy="3.7920001"
|
||||
transform="translate(1.062,24.725)"
|
||||
r="3.7920001"
|
||||
style="fill:#ffffff" />
|
||||
<path
|
||||
id="Path_5"
|
||||
data-name="Path 5"
|
||||
class="cls-3"
|
||||
d="m 5610.158,939.234 a 4.151,4.151 0 0 1 -2.342,0.705 5.131,5.131 0 0 1 -2.988,-0.705 c -1.257,-0.931 -1.229,0.1 -1.229,0.1 v 1.8 c 0,0.45 0.553,0.846 1.229,0.459 0.676,-0.387 1,-0.581 1,-0.581 0,0 0.361,-0.184 0.361,0.335 v 2.62 c 0,0 0.021,0.786 -0.73,0.768 -0.751,-0.018 -1.38,0 -1.38,0 0,0 -0.293,0.248 -0.293,1.385 0,1.137 0.293,1.322 0.293,1.322 h 1.38 c 0,0 0.73,-0.024 0.73,0.649 v 1.3 c 0,0 0.227,0.359 1.169,0.306 a 3.6,3.6 0 0 0 1.4,-0.306 v -1.3 a 0.67,0.67 0 0 1 0.66,-0.649 c 0.631,-0.01 1.257,0 1.257,0 0,0 0.252,-0.191 0.287,-1.322 0.035,-1.131 -0.287,-1.385 -0.287,-1.385 h -1.257 c 0,0 -0.805,-0.052 -0.817,-0.768 -0.012,-0.716 0,-2.62 0,-2.62 0,0 -0.047,-0.515 0.332,-0.335 0.379,0.18 1.215,0.581 1.215,0.581 0,0 0.83,0.407 0.814,-0.459 -0.016,-0.866 0,-1.8 0,-1.8 0,0 -0.072,-0.534 -0.804,-0.1 z"
|
||||
transform="translate(-5602.386,-929.312)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff" />
|
||||
<path
|
||||
id="Path_6"
|
||||
data-name="Path 6"
|
||||
class="cls-3"
|
||||
d="m 5601.9,1015.336 a 0.83,0.83 0 0 1 1.2,-0.594 6.516,6.516 0 0 0 2.85,0.772 5.05,5.05 0 0 0 2.768,-0.772 c 0.829,-0.4 1.067,0.594 1.067,0.594 v 1.76 a 0.71,0.71 0 0 1 -1.067,0.561 5.791,5.791 0 0 0 -2.768,-0.837 7.06,7.06 0 0 0 -2.85,0.837 c 0,0 -1.178,0.239 -1.2,-0.561 -0.022,-0.8 0,-1.76 0,-1.76 z"
|
||||
transform="translate(-5600.979,-993.616)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff" />
|
||||
</g>
|
||||
<g
|
||||
class="cls-14"
|
||||
transform="translate(-2133.68,-6140.14)"
|
||||
id="g6995"
|
||||
style="filter:url(#Path_1-2)">
|
||||
<path
|
||||
id="Path_1-4"
|
||||
data-name="Path 1"
|
||||
class="cls-1"
|
||||
d="m 5.784,0 h 42.66 a 5.784,5.784 0 0 1 5.784,5.784 v 29.64 C 43.86,49.487 36.1,59.29 36.1,59.29 h -0.595 c 0,0 -19.462,-0.147 -23.864,-0.147 A 2.28,2.28 0 0 1 9.263,58.158 L 0,48.582 V 5.784 A 5.784,5.784 0 0 1 5.784,0 Z"
|
||||
transform="translate(2159.6,6153.16)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a8a9a8" />
|
||||
</g>
|
||||
<g
|
||||
id="hvid"
|
||||
transform="translate(25.916,13.015)">
|
||||
<g
|
||||
id="Mask_Group_1"
|
||||
data-name="Mask Group 1"
|
||||
class="cls-4"
|
||||
clip-path="url(#clip-path-2)">
|
||||
<path
|
||||
id="hvid-2"
|
||||
data-name="hvid"
|
||||
class="cls-5"
|
||||
d="m 1498.578,449.051 7.155,7.37 23.789,31.08 v 14.857 l 13.063,-16.131 v -31.221 l -0.993,-7.691 z"
|
||||
transform="translate(-1487.315,-449.455)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#f2f2f2" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
class="cls-13"
|
||||
transform="translate(-2133.68,-6140.14)"
|
||||
id="g7001"
|
||||
style="filter:url(#Path_4)">
|
||||
<path
|
||||
id="Path_4-2"
|
||||
data-name="Path 4"
|
||||
class="cls-1"
|
||||
d="M 5.784,0 H 36.875 A 5.784,5.784 0 0 1 42.66,5.784 V 28.032 C 34.013,39.3 27.1,48.444 27.1,48.444 H 5.784 A 5.784,5.784 0 0 1 0,42.66 V 5.784 A 5.784,5.784 0 0 1 5.784,0 Z"
|
||||
transform="translate(2165.38,6158.22)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a8a9a8" />
|
||||
</g>
|
||||
<g
|
||||
id="Group_3"
|
||||
data-name="Group 3"
|
||||
transform="translate(31.7,18.38)">
|
||||
<g
|
||||
id="Mask_Group_2"
|
||||
data-name="Mask Group 2"
|
||||
class="cls-6"
|
||||
clip-path="url(#clip-path-3)">
|
||||
<path
|
||||
id="Union_1"
|
||||
data-name="Union 1"
|
||||
class="cls-7"
|
||||
d="M 14.461,28.56 V 1.085 a 1.085,1.085 0 1 1 2.169,0 V 28.56 a 1.085,1.085 0 1 1 -2.169,0 z m -3.615,0 V 1.085 a 1.085,1.085 0 1 1 2.169,0 V 28.56 a 1.085,1.085 0 1 1 -2.169,0 z m -3.615,0 V 1.085 a 1.085,1.085 0 1 1 2.169,0 V 28.56 a 1.085,1.085 0 1 1 -2.169,0 z m -3.615,0 V 1.085 a 1.085,1.085 0 1 1 2.169,0 V 28.56 a 1.085,1.085 0 1 1 -2.169,0 z M 0,28.56 V 1.085 a 1.085,1.085 0 1 1 2.169,0 V 28.56 A 1.085,1.085 0 1 1 0,28.56 Z"
|
||||
transform="translate(15.907,-5.365)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#6a6a6a" />
|
||||
</g>
|
||||
</g>
|
||||
<circle
|
||||
id="Ellipse_1-2"
|
||||
data-name="Ellipse 1"
|
||||
class="cls-8"
|
||||
cx="2.2449999"
|
||||
cy="2.2449999"
|
||||
transform="translate(29.076,16.175)"
|
||||
r="2.2449999"
|
||||
style="fill:#9a9a9a" />
|
||||
<circle
|
||||
id="Ellipse_2-2"
|
||||
data-name="Ellipse 2"
|
||||
class="cls-8"
|
||||
cx="2.2449999"
|
||||
cy="2.2449999"
|
||||
transform="translate(57.744,66.686)"
|
||||
r="2.2449999"
|
||||
style="fill:#9a9a9a" />
|
||||
<g
|
||||
class="cls-12"
|
||||
transform="translate(-2133.68,-6140.14)"
|
||||
id="g7009">
|
||||
<circle
|
||||
id="rød-2"
|
||||
data-name="rød"
|
||||
class="cls-9"
|
||||
cx="17.063999"
|
||||
cy="17.063999"
|
||||
transform="translate(2135.31,6259.65)"
|
||||
r="17.063999"
|
||||
style="fill:#b72b1c" />
|
||||
</g>
|
||||
<g
|
||||
id="Group_2"
|
||||
data-name="Group 2"
|
||||
transform="matrix(0.966,0.259,-0.259,0.966,7.93,117.883)">
|
||||
<circle
|
||||
id="Ellipse_4-2"
|
||||
data-name="Ellipse 4"
|
||||
class="cls-10"
|
||||
cx="3.7920001"
|
||||
cy="3.7920001"
|
||||
transform="translate(11.528)"
|
||||
r="3.7920001"
|
||||
style="fill:#3c3c3c" />
|
||||
<circle
|
||||
id="Ellipse_7"
|
||||
data-name="Ellipse 7"
|
||||
class="cls-10"
|
||||
cx="3.7920001"
|
||||
cy="3.7920001"
|
||||
transform="translate(23.056,11.528)"
|
||||
r="3.7920001"
|
||||
style="fill:#3c3c3c" />
|
||||
<circle
|
||||
id="Ellipse_5"
|
||||
data-name="Ellipse 5"
|
||||
class="cls-10"
|
||||
cx="3.7920001"
|
||||
cy="3.7920001"
|
||||
transform="translate(11.528,23.056)"
|
||||
r="3.7920001"
|
||||
style="fill:#3c3c3c" />
|
||||
<circle
|
||||
id="Ellipse_6"
|
||||
data-name="Ellipse 6"
|
||||
class="cls-10"
|
||||
cx="3.7920001"
|
||||
cy="3.7920001"
|
||||
transform="translate(0,11.528)"
|
||||
r="3.7920001"
|
||||
style="fill:#3c3c3c" />
|
||||
<path
|
||||
id="Path_4-3"
|
||||
data-name="Path 4"
|
||||
class="cls-11"
|
||||
d="m 2.4,1.566 c 0,0 0.021,0.786 -0.73,0.768 -0.751,-0.018 -1.38,0 -1.38,0 0,0 -0.29,0.248 -0.29,1.385 0,1.137 0.294,1.322 0.294,1.322 h 1.38 c 0,0 0.73,-0.024 0.73,0.649 0,0.673 0,1.3 0,1.3 0,0 0.227,0.359 1.17,0.306 a 3.594,3.594 0 0 0 1.4,-0.306 v -1.3 a 0.67,0.67 0 0 1 0.66,-0.649 c 0.631,-0.01 1.257,0 1.257,0 0,0 0.253,-0.191 0.287,-1.322 C 7.212,2.588 6.891,2.333 6.891,2.333 H 5.638 c 0,0 -0.806,-0.052 -0.818,-0.768 A 12.478,12.478 0 0 1 4.884,0.305 2.9,2.9 0 0 0 2.529,0.213 C 2.45,0.819 2.4,1.566 2.4,1.566 Z"
|
||||
transform="rotate(-90,15.2715,3.5915)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#242424" />
|
||||
<path
|
||||
id="Path_5-2"
|
||||
data-name="Path 5"
|
||||
class="cls-10"
|
||||
d="M 0.455,0.155 2.016,0 3.64,0.155 A 0.455,0.455 0 0 1 4.1,0.61 V 2.734 A 0.455,0.455 0 0 1 3.645,3.189 L 2.094,2.979 0.46,3.189 A 0.455,0.455 0 0 1 0,2.734 V 0.61 A 0.455,0.455 0 0 1 0.455,0.155 Z"
|
||||
transform="translate(13.241,8.084)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#3c3c3c" />
|
||||
<path
|
||||
id="Path_7"
|
||||
data-name="Path 7"
|
||||
class="cls-10"
|
||||
d="M 0.455,0.155 2.016,0 3.64,0.155 A 0.455,0.455 0 0 1 4.1,0.61 V 2.734 A 0.455,0.455 0 0 1 3.645,3.189 L 2.094,2.979 0.46,3.189 A 0.455,0.455 0 0 1 0,2.734 V 0.61 A 0.455,0.455 0 0 1 0.455,0.155 Z"
|
||||
transform="rotate(-90,12.71,4.628)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#3c3c3c" />
|
||||
<path
|
||||
id="Path_6-2"
|
||||
data-name="Path 6"
|
||||
class="cls-10"
|
||||
d="M 0.455,0.155 2.016,0 3.64,0.155 A 0.455,0.455 0 0 1 4.1,0.61 V 2.734 A 0.455,0.455 0 0 1 3.645,3.189 L 2.094,2.979 0.46,3.189 A 0.455,0.455 0 0 1 0,2.734 V 0.61 A 0.455,0.455 0 0 1 0.455,0.155 Z"
|
||||
transform="rotate(180,8.668,11.2485)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#3c3c3c" />
|
||||
<path
|
||||
id="Path_8"
|
||||
data-name="Path 8"
|
||||
class="cls-10"
|
||||
d="M 0.455,0.155 2.016,0 3.64,0.155 A 0.455,0.455 0 0 1 4.1,0.61 V 2.734 A 0.455,0.455 0 0 1 3.645,3.189 L 2.094,2.979 0.46,3.189 A 0.455,0.455 0 0 1 0,2.734 V 0.61 A 0.455,0.455 0 0 1 0.455,0.155 Z"
|
||||
transform="rotate(90,4.6265,17.8685)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#3c3c3c" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 23 KiB |
220
legoresources/SVGassets/Medium Motor.svg
Normal file
@ -0,0 +1,220 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
viewBox="1719.858 6177.276 47.14 47.14"
|
||||
version="1.1"
|
||||
id="svg7610"
|
||||
sodipodi:docname="Medium Motor.svg"
|
||||
inkscape:export-filename="C:\gh\pxt-ev3\libs\core\jres\icons\motorMedium-icon.png"
|
||||
inkscape:export-xdpi="244.37845"
|
||||
inkscape:export-ydpi="244.37845"
|
||||
inkscape:version="0.92.1 r15371">
|
||||
<metadata
|
||||
id="metadata7614">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1137"
|
||||
id="namedview7612"
|
||||
showgrid="false"
|
||||
inkscape:zoom="5.0063641"
|
||||
inkscape:cx="23.57"
|
||||
inkscape:cy="23.57"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg7610" />
|
||||
<defs
|
||||
id="defs7591">
|
||||
<style
|
||||
id="style7573">
|
||||
.cls-1 {
|
||||
fill: url(#linear-gradient);
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: #a8a9a8;
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: #3c3c3c;
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
fill: #b72b1c;
|
||||
stroke: #8b1104;
|
||||
stroke-width: 0.25px;
|
||||
}
|
||||
|
||||
.cls-5 {
|
||||
stroke: none;
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
fill: none;
|
||||
}
|
||||
|
||||
.cls-7 {
|
||||
filter: url(#Union_1);
|
||||
}
|
||||
</style>
|
||||
<linearGradient
|
||||
id="linear-gradient"
|
||||
x1="0.5"
|
||||
y1="0.919"
|
||||
x2="0.5"
|
||||
y2="1.077"
|
||||
gradientUnits="objectBoundingBox">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#a8a9a8"
|
||||
id="stop7575" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#545554"
|
||||
id="stop7577" />
|
||||
</linearGradient>
|
||||
<filter
|
||||
id="Union_1"
|
||||
x="1719.858"
|
||||
y="6177.276"
|
||||
width="47.14"
|
||||
height="47.14"
|
||||
filterUnits="userSpaceOnUse">
|
||||
<feOffset
|
||||
input="SourceAlpha"
|
||||
id="feOffset7580" />
|
||||
<feGaussianBlur
|
||||
stdDeviation="0.5"
|
||||
result="blur"
|
||||
id="feGaussianBlur7582" />
|
||||
<feFlood
|
||||
flood-opacity="0.322"
|
||||
id="feFlood7584" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in2="blur"
|
||||
id="feComposite7586"
|
||||
result="result1" />
|
||||
<feComposite
|
||||
in="SourceGraphic"
|
||||
in2="result1"
|
||||
id="feComposite7588" />
|
||||
</filter>
|
||||
</defs>
|
||||
<g
|
||||
id="Medium_Motor"
|
||||
data-name="Medium Motor"
|
||||
transform="translate(1346 5554)">
|
||||
<g
|
||||
id="Group_4"
|
||||
data-name="Group 4"
|
||||
transform="translate(375.358 624.776)">
|
||||
<path
|
||||
id="Path_1"
|
||||
data-name="Path 1"
|
||||
class="cls-1"
|
||||
d="M3.281-.287h39a2.357,2.357,0,0,1,2.57,1.972V42.033c0,1-1.1,1.82-2.57,1.82h-39c-1.473,0-2.57-.815-2.57-1.82V1.685A2.357,2.357,0,0,1,3.281-.287Z"
|
||||
transform="translate(-0.711 0.287)" />
|
||||
</g>
|
||||
<g
|
||||
id="Group_7"
|
||||
data-name="Group 7"
|
||||
transform="translate(419.498 624.776) rotate(90)">
|
||||
<g
|
||||
class="cls-7"
|
||||
transform="matrix(0, -1, 1, 0, -6178.78, 1765.5)"
|
||||
id="g7596">
|
||||
<path
|
||||
id="Union_1-2"
|
||||
data-name="Union 1"
|
||||
class="cls-2"
|
||||
d="M21.236,44.14a6.219,6.219,0,0,1-6.219-6.219v-8.8h-8.8A6.219,6.219,0,0,1,0,22.9V21.236a6.219,6.219,0,0,1,6.219-6.219h8.8v-8.8A6.219,6.219,0,0,1,21.236,0H22.9a6.219,6.219,0,0,1,6.219,6.219v8.8h8.8a6.219,6.219,0,0,1,6.219,6.219V22.9a6.219,6.219,0,0,1-6.219,6.219h-8.8v8.8A6.219,6.219,0,0,1,22.9,44.14Z"
|
||||
transform="translate(1765.5 6178.78) rotate(90)" />
|
||||
</g>
|
||||
<ellipse
|
||||
id="Ellipse_1"
|
||||
data-name="Ellipse 1"
|
||||
class="cls-3"
|
||||
cx="4.854"
|
||||
cy="4.854"
|
||||
rx="4.854"
|
||||
ry="4.854"
|
||||
transform="translate(17.292 1.517)" />
|
||||
<ellipse
|
||||
id="Ellipse_2"
|
||||
data-name="Ellipse 2"
|
||||
class="cls-3"
|
||||
cx="4.854"
|
||||
cy="4.854"
|
||||
rx="4.854"
|
||||
ry="4.854"
|
||||
transform="translate(17.292 32.915)" />
|
||||
<ellipse
|
||||
id="Ellipse_1-2"
|
||||
data-name="Ellipse 1"
|
||||
class="cls-3"
|
||||
cx="4.854"
|
||||
cy="4.854"
|
||||
rx="4.854"
|
||||
ry="4.854"
|
||||
transform="translate(1.517 26.848) rotate(-90)" />
|
||||
<ellipse
|
||||
id="Ellipse_2-2"
|
||||
data-name="Ellipse 2"
|
||||
class="cls-3"
|
||||
cx="4.854"
|
||||
cy="4.854"
|
||||
rx="4.854"
|
||||
ry="4.854"
|
||||
transform="translate(32.915 26.848) rotate(-90)" />
|
||||
</g>
|
||||
<g
|
||||
id="Ellipse_4"
|
||||
data-name="Ellipse 4"
|
||||
class="cls-4"
|
||||
transform="translate(390.903 640.17)">
|
||||
<ellipse
|
||||
class="cls-5"
|
||||
cx="6.752"
|
||||
cy="6.752"
|
||||
rx="6.752"
|
||||
ry="6.752"
|
||||
id="ellipse7603" />
|
||||
<ellipse
|
||||
class="cls-6"
|
||||
cx="6.752"
|
||||
cy="6.752"
|
||||
rx="6.627"
|
||||
ry="6.627"
|
||||
id="ellipse7605" />
|
||||
</g>
|
||||
<path
|
||||
id="Hole"
|
||||
d="M5606.437,962.413s-.054,1.021-.769,1.029-1.461,0-1.461,0a2.363,2.363,0,0,0-.455,1.691c0,1.266.357,1.6.357,1.6h1.628a.645.645,0,0,1,.7.7V969.1a3.882,3.882,0,0,0,1.766.287,6.459,6.459,0,0,0,1.676-.287v-1.667a.73.73,0,0,1,.734-.7,10.674,10.674,0,0,0,1.444-.14s.4-.374.434-1.632-.353-1.644-.353-1.644h-1.693a.641.641,0,0,1-.762-.678,11.41,11.41,0,0,1,0-1.643,4.815,4.815,0,0,0-3.246,0C5606.42,961.694,5606.437,962.413,5606.437,962.413Z"
|
||||
transform="translate(-5210.486 -318.186)" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.0 KiB |
347
legoresources/SVGassets/Touch sensor.svg
Normal file
@ -0,0 +1,347 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
viewBox="1827.391 6183.664 36.101 36.101003"
|
||||
version="1.1"
|
||||
id="svg4572"
|
||||
sodipodi:docname="Touch sensor.svg"
|
||||
width="36.101002"
|
||||
height="36.101002"
|
||||
inkscape:version="0.92.1 r15371"
|
||||
inkscape:export-filename="C:\gh\pxt-ev3\libs\core\jres\icons\touchSensor-icon.png"
|
||||
inkscape:export-xdpi="319.10471"
|
||||
inkscape:export-ydpi="319.10471">
|
||||
<metadata
|
||||
id="metadata4576">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="837"
|
||||
id="namedview4574"
|
||||
showgrid="false"
|
||||
inkscape:zoom="7.0722208"
|
||||
inkscape:cx="18.050501"
|
||||
inkscape:cy="16.684999"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4572" />
|
||||
<defs
|
||||
id="defs4547">
|
||||
<style
|
||||
id="style4522">
|
||||
.cls-1 {
|
||||
fill: #a8a9a8;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
clip-path: url(#clip-path);
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: url(#linear-gradient);
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
fill: url(#linear-gradient-2);
|
||||
}
|
||||
|
||||
.cls-5 {
|
||||
fill: #b72b1c;
|
||||
stroke: #8b1104;
|
||||
stroke-width: 0.25px;
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
stroke: none;
|
||||
}
|
||||
|
||||
.cls-7 {
|
||||
fill: none;
|
||||
}
|
||||
|
||||
.cls-8 {
|
||||
filter: url(#Path_1);
|
||||
}
|
||||
</style>
|
||||
<clipPath
|
||||
id="clip-path">
|
||||
<path
|
||||
id="Union_3"
|
||||
data-name="Union 3"
|
||||
class="cls-1"
|
||||
d="m 3.944,33.37 c -1.069,0 -1.972,-0.6 -1.972,-1.365 v -4.4 H 1 a 1,1 0 0 1 -1,-1 V 7.371 a 1,1 0 0 1 1,-1 H 1.972 V 1.365 C 1.972,0.6 2.875,0 3.944,0 h 10.769 v 1.365 h 6.371 V 0 h 11.073 c 1.069,0 1.972,0.6 1.972,1.365 V 6.371 H 35.1 a 1,1 0 0 1 1,1 v 19.236 a 1,1 0 0 1 -1,1 H 34.128 V 32 c 0,0.761 -0.9,1.365 -1.972,1.365 z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a8a9a8" />
|
||||
</clipPath>
|
||||
<linearGradient
|
||||
id="linear-gradient"
|
||||
x1="16.378942"
|
||||
y1="29.809677"
|
||||
x2="16.378942"
|
||||
y2="34.264748"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="scale(0.98165674,1.018686)">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#a8a9a8"
|
||||
id="stop4526" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#545554"
|
||||
id="stop4528" />
|
||||
</linearGradient>
|
||||
<filter
|
||||
id="Path_1"
|
||||
x="1826.363"
|
||||
y="6180.6641"
|
||||
width="38.157001"
|
||||
height="39.370998"
|
||||
filterUnits="userSpaceOnUse">
|
||||
<feOffset
|
||||
input="SourceAlpha"
|
||||
id="feOffset4531" />
|
||||
<feGaussianBlur
|
||||
stdDeviation="1"
|
||||
result="blur"
|
||||
id="feGaussianBlur4533" />
|
||||
<feFlood
|
||||
flood-opacity="0.502"
|
||||
id="feFlood4535" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in2="blur"
|
||||
id="feComposite4537"
|
||||
result="result1" />
|
||||
<feComposite
|
||||
in="SourceGraphic"
|
||||
in2="result1"
|
||||
id="feComposite4539" />
|
||||
</filter>
|
||||
<linearGradient
|
||||
id="linear-gradient-2"
|
||||
x1="0.949"
|
||||
y1="0.5"
|
||||
x2="0.056000002"
|
||||
y2="0.5"
|
||||
gradientUnits="objectBoundingBox">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#b72b1c"
|
||||
id="stop4542" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#8b1104"
|
||||
id="stop4544" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linear-gradient-2"
|
||||
id="linearGradient5121"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="7.315846"
|
||||
y1="3.8545027"
|
||||
x2="0.43170431"
|
||||
y2="3.8545027"
|
||||
gradientTransform="scale(1.2395892,0.80671886)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linear-gradient-2"
|
||||
id="linearGradient5123"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="7.315846"
|
||||
y1="3.8545027"
|
||||
x2="0.43170431"
|
||||
y2="3.8545027"
|
||||
gradientTransform="scale(1.2395892,0.80671886)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linear-gradient-2"
|
||||
id="linearGradient5125"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="7.315846"
|
||||
y1="3.8545027"
|
||||
x2="0.43170431"
|
||||
y2="3.8545027"
|
||||
gradientTransform="scale(1.2395892,0.80671886)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linear-gradient-2"
|
||||
id="linearGradient5127"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="7.315846"
|
||||
y1="3.8545027"
|
||||
x2="0.43170431"
|
||||
y2="3.8545027"
|
||||
gradientTransform="scale(1.2395892,0.80671886)" />
|
||||
</defs>
|
||||
<g
|
||||
id="Touch_sensor"
|
||||
data-name="Touch sensor"
|
||||
transform="translate(1346,5555.3655)">
|
||||
<g
|
||||
id="Group_8"
|
||||
data-name="Group 8"
|
||||
transform="translate(481.391,629.664)">
|
||||
<g
|
||||
id="Mask_Group_3"
|
||||
data-name="Mask Group 3"
|
||||
class="cls-2"
|
||||
clip-path="url(#clip-path)">
|
||||
<g
|
||||
id="Group_2"
|
||||
data-name="Group 2">
|
||||
<path
|
||||
id="Path_27"
|
||||
data-name="Path 27"
|
||||
class="cls-1"
|
||||
d="M 0.758,0 H 35.342 A 0.758,0.758 0 0 1 36.1,0.758 v 19.719 a 0.758,0.758 0 0 1 -0.758,0.758 H 0.758 A 0.758,0.758 0 0 1 0,20.477 V 0.758 A 0.758,0.758 0 0 1 0.758,0 Z"
|
||||
transform="translate(0,6.371)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a8a9a8" />
|
||||
<g
|
||||
class="cls-8"
|
||||
transform="translate(-1827.39,-6183.66)"
|
||||
id="g4551"
|
||||
style="filter:url(#Path_1)">
|
||||
<path
|
||||
id="Path_1-2"
|
||||
data-name="Path 1"
|
||||
class="cls-3"
|
||||
d="m 1.972,0 h 10.77 v 1.365 h 6.371 V 0 h 11.072 c 1.069,0 1.972,0.6 1.972,1.365 v 30.64 c 0,0.761 -0.9,1.365 -1.972,1.365 H 1.972 C 0.9,33.371 0,32.766 0,32.005 V 1.365 C 0,0.6 0.9,0 1.972,0 Z"
|
||||
transform="translate(1829.36,6183.66)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:url(#linear-gradient)" />
|
||||
</g>
|
||||
<rect
|
||||
id="Rectangle_2"
|
||||
data-name="Rectangle 2"
|
||||
width="0.75800002"
|
||||
height="6.0669999"
|
||||
transform="translate(34.584,9.404)"
|
||||
x="0"
|
||||
y="0" />
|
||||
<rect
|
||||
id="Rectangle_5"
|
||||
data-name="Rectangle 5"
|
||||
width="0.75800002"
|
||||
height="6.0669999"
|
||||
transform="translate(0.91,9.404)"
|
||||
x="0"
|
||||
y="0" />
|
||||
<rect
|
||||
id="Rectangle_3"
|
||||
data-name="Rectangle 3"
|
||||
width="0.75800002"
|
||||
height="6.0669999"
|
||||
transform="translate(34.584,18.05)"
|
||||
x="0"
|
||||
y="0" />
|
||||
<rect
|
||||
id="Rectangle_4"
|
||||
data-name="Rectangle 4"
|
||||
width="0.75800002"
|
||||
height="6.0669999"
|
||||
transform="translate(0.91,18.05)"
|
||||
x="0"
|
||||
y="0" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="Group_5"
|
||||
data-name="Group 5"
|
||||
transform="translate(485.942,633.835)">
|
||||
<rect
|
||||
id="Rectangle_6"
|
||||
data-name="Rectangle 6"
|
||||
class="cls-4"
|
||||
width="9.5559998"
|
||||
height="6.2189999"
|
||||
transform="translate(0,10.542)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:url(#linearGradient5121)" />
|
||||
<rect
|
||||
id="Rectangle_9"
|
||||
data-name="Rectangle 9"
|
||||
class="cls-4"
|
||||
width="9.5559998"
|
||||
height="6.2189999"
|
||||
transform="rotate(90,8.3045,8.3045)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:url(#linearGradient5123)" />
|
||||
<rect
|
||||
id="Rectangle_7"
|
||||
data-name="Rectangle 7"
|
||||
class="cls-4"
|
||||
width="9.5559998"
|
||||
height="6.2189999"
|
||||
transform="rotate(180,13.5,8.3805)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:url(#linearGradient5125)" />
|
||||
<rect
|
||||
id="Rectangle_8"
|
||||
data-name="Rectangle 8"
|
||||
class="cls-4"
|
||||
width="9.5559998"
|
||||
height="6.2189999"
|
||||
transform="rotate(-90,18.695,8.305)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:url(#linearGradient5127)" />
|
||||
<g
|
||||
id="Ellipse_1"
|
||||
data-name="Ellipse 1"
|
||||
class="cls-5"
|
||||
transform="translate(7.433,7.508)"
|
||||
style="fill:#b72b1c;stroke:#8b1104;stroke-width:0.25px">
|
||||
<circle
|
||||
class="cls-6"
|
||||
cx="6.0669999"
|
||||
cy="6.0669999"
|
||||
id="ellipse4564"
|
||||
r="6.0669999"
|
||||
style="stroke:none" />
|
||||
<circle
|
||||
class="cls-7"
|
||||
cx="6.0669999"
|
||||
cy="6.0669999"
|
||||
id="ellipse4566"
|
||||
r="5.9419999"
|
||||
style="fill:none" />
|
||||
</g>
|
||||
<path
|
||||
id="Hole"
|
||||
d="m 5606.165,962.241 c 0,0 -0.048,0.917 -0.69,0.925 -0.642,0.008 -1.312,0 -1.312,0 a 2.123,2.123 0 0 0 -0.409,1.52 c 0,1.138 0.321,1.442 0.321,1.442 h 1.463 a 0.58,0.58 0 0 1 0.628,0.628 v 1.5 a 3.487,3.487 0 0 0 1.586,0.258 5.8,5.8 0 0 0 1.507,-0.258 v -1.5 a 0.655,0.655 0 0 1 0.66,-0.628 9.594,9.594 0 0 0 1.3,-0.126 c 0,0 0.356,-0.336 0.39,-1.467 0.034,-1.131 -0.317,-1.477 -0.317,-1.477 h -1.522 a 0.576,0.576 0 0 1 -0.685,-0.609 10.168,10.168 0 0 1 0,-1.476 4.326,4.326 0 0 0 -2.917,0 c -0.019,0.627 0,1.268 0,1.268 z"
|
||||
transform="translate(-5594.196,-951.087)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 10 KiB |
138
legoresources/SVGassets/brickbuttons.svg
Normal file
@ -0,0 +1,138 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="256.68237mm"
|
||||
height="256.68237mm"
|
||||
viewBox="0 0 256.68237 256.68237"
|
||||
version="1.1"
|
||||
id="svg8853"
|
||||
inkscape:version="0.92.1 r15371"
|
||||
sodipodi:docname="brickbuttons.svg"
|
||||
inkscape:export-filename="C:\gh\pxt-ev3\libs\core\jres\icons\brickButtons-icon.png"
|
||||
inkscape:export-xdpi="11.874598"
|
||||
inkscape:export-ydpi="11.874598">
|
||||
<defs
|
||||
id="defs8847">
|
||||
<linearGradient
|
||||
id="linear-gradient-4"
|
||||
x1="28.287067"
|
||||
y1="53.631462"
|
||||
x2="28.287067"
|
||||
y2="3.3378232"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(4.5371664,0,0,3.3819467,4.7045157,7.0563355)">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#6a6a6a"
|
||||
id="stop8176" />
|
||||
<stop
|
||||
offset="0.522"
|
||||
stop-color="#8ce300"
|
||||
id="stop8178" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#6a6a6a"
|
||||
id="stop8180" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.35"
|
||||
inkscape:cx="-82.030812"
|
||||
inkscape:cy="187.27864"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="837"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata8850">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-4.695057,58.29823)">
|
||||
<g
|
||||
id="g9431"
|
||||
transform="translate(3.9780427e-6,-32.677281)">
|
||||
<path
|
||||
style="fill:#6a6a6a;stroke-width:3.91719985"
|
||||
inkscape:connector-curvature="0"
|
||||
d="M 106.30882,198.38022 C 84.431262,177.26258 50.453467,142.52878 50.453467,142.52878 v -7.12931 H 37.087971 a 32.381533,32.381533 0 1 1 0,-64.763062 H 50.457376 V 63.503186 L 105.71341,7.0563355 h 55.25994 c 25.02699,25.5048885 55.25994,55.2599395 55.25994,55.2599395 v 8.320133 h 12.77398 a 32.381533,32.381533 0 0 1 0,64.763062 h -12.77398 v 7.13323 c -29.43384,30.27603 -54.66454,55.85144 -54.66454,55.85144 z"
|
||||
class="cls-7"
|
||||
data-name="Union 4"
|
||||
id="Union_4" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:url(#linear-gradient-4);stroke-width:3.91719985"
|
||||
d="M 106.30882,198.38022 C 84.431262,177.26258 50.453467,142.52878 50.453467,142.52878 v -7.12931 H 37.087971 a 32.381533,32.381533 0 1 1 0,-64.763062 H 50.457376 V 63.503186 L 105.71731,7.0563355 h 55.25604 c 25.02699,25.5048885 55.25994,55.2599395 55.25994,55.2599395 v 8.320133 h 12.77398 a 32.381533,32.381533 0 0 1 0,64.763062 h -12.77398 v 7.13323 c -29.43384,30.27603 -54.66454,55.85144 -54.66454,55.85144 z"
|
||||
class="cls-8"
|
||||
id="light" />
|
||||
<path
|
||||
style="fill:#a8a9a8;stroke-width:3.91719985"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 36.492567,78.357208 h 40.69971 V 126.48393 H 36.492567 A 24.063359,24.063359 0 0 1 12.429199,102.42057 v 0 A 24.063359,24.063359 0 0 1 36.492567,78.357208 Z"
|
||||
class="cls-9"
|
||||
data-name="Rectangle 23"
|
||||
id="Rectangle_23" />
|
||||
<path
|
||||
style="fill:#a8a9a8;stroke-width:3.91719985"
|
||||
inkscape:connector-curvature="0"
|
||||
d="M 229.00727,126.48784 H 188.30756 V 78.361126 h 40.69971 a 24.063359,24.063359 0 0 1 24.06335,24.063354 v 0 a 24.063359,24.063359 0 0 1 -24.06335,24.06336 z"
|
||||
class="cls-9"
|
||||
data-name="Rectangle 24"
|
||||
id="Rectangle_24" />
|
||||
<path
|
||||
style="fill:#3c3c3c;stroke-width:3.91719985"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 109.27806,78.357208 h 46.9398 a 1.782326,1.782326 0 0 1 1.78233,1.782326 V 124.7016 a 1.782326,1.782326 0 0 1 -1.78233,1.78233 h -46.9398 a 1.782326,1.782326 0 0 1 -1.78233,-1.78233 V 80.139534 a 1.782326,1.782326 0 0 1 1.78233,-1.782326 z"
|
||||
class="cls-4"
|
||||
data-name="Path 42"
|
||||
id="Path_42" />
|
||||
<path
|
||||
style="fill:#a8a9a8;stroke-width:3.91719985"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 108.09114,15.967966 49.90905,-0.59542 37.43276,38.619675 -15.44943,15.449437 V 97.367379 H 165.7249 V 81.306861 A 11.978797,11.978797 0 0 0 153.84012,69.422075 c -11.59883,-0.184102 -43.37516,0 -43.37516,0 A 9.6676495,9.6676495 0 0 0 100.36251,79.520618 V 97.347793 H 86.103905 V 69.422075 L 70.654464,53.97264 Z"
|
||||
class="cls-9"
|
||||
data-name="Path 15"
|
||||
id="Path_15" />
|
||||
<path
|
||||
style="fill:#a8a9a8;stroke-width:3.91719985"
|
||||
inkscape:connector-curvature="0"
|
||||
d="M 157.78865,189.01028 108.18908,189.38233 70.654464,150.794 86.323259,135.4895 v -28.08625 h 14.101921 v 16.11144 a 12.006218,12.006218 0 0 0 11.85346,11.9788 c 11.59882,0.1841 43.13227,0 43.13227,0 a 10.18472,10.18472 0 0 0 10.38059,-10.38058 v -17.70966 h 14.39179 v 28.08632 l 15.3045,15.3045 z"
|
||||
class="cls-9"
|
||||
data-name="Path 16"
|
||||
id="Path_16-2" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.8 KiB |
BIN
legoresources/SVGassets/color overview/LEGO-MakeCode-Colors.pdf
Normal file
308
legoresources/SVGassets/gyro.svg
Normal file
@ -0,0 +1,308 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
viewBox="2030.391 6170.607 60.976999 60.977"
|
||||
version="1.1"
|
||||
id="svg5788"
|
||||
sodipodi:docname="gyro.svg"
|
||||
width="60.977001"
|
||||
height="60.977001"
|
||||
inkscape:export-filename="C:\gh\pxt-ev3\libs\core\jres\icons\gyroSensor-icon.png"
|
||||
inkscape:export-xdpi="188.92369"
|
||||
inkscape:export-ydpi="188.92369"
|
||||
inkscape:version="0.92.1 r15371">
|
||||
<metadata
|
||||
id="metadata5792">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1137"
|
||||
id="namedview5790"
|
||||
showgrid="false"
|
||||
inkscape:zoom="3.8703117"
|
||||
inkscape:cx="17.974501"
|
||||
inkscape:cy="30.488501"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg5788" />
|
||||
<defs
|
||||
id="defs5764">
|
||||
<style
|
||||
id="style5739">
|
||||
.cls-1 {
|
||||
fill: #a8a9a8;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
clip-path: url(#clip-path);
|
||||
}
|
||||
|
||||
.cls-3, .cls-9 {
|
||||
fill: #9a9a9a;
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
fill: #f2f2f2;
|
||||
}
|
||||
|
||||
.cls-5 {
|
||||
opacity: 0.6;
|
||||
fill: url(#linear-gradient);
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
fill: url(#linear-gradient-2);
|
||||
}
|
||||
|
||||
.cls-7 {
|
||||
fill: #b72b1c;
|
||||
}
|
||||
|
||||
.cls-8, .cls-9 {
|
||||
stroke: none;
|
||||
}
|
||||
|
||||
.cls-10 {
|
||||
filter: url(#Path_12);
|
||||
}
|
||||
</style>
|
||||
<clipPath
|
||||
id="clip-path">
|
||||
<path
|
||||
id="Union_7"
|
||||
data-name="Union 7"
|
||||
class="cls-1"
|
||||
d="M 9.708,60.977 A 9.336,9.336 0 0 1 7.725,60.522 H 3.489 A 1.972,1.972 0 0 1 1.517,58.55 V 54 H 0.758 A 0.758,0.758 0 0 1 0,53.241 V 6.978 A 0.758,0.758 0 0 1 0.758,6.219 H 1.517 V 1.972 A 1.972,1.972 0 0 1 3.489,0 h 12.654 v 0.607 h 3.42 V 0 h 12.746 a 1.972,1.972 0 0 1 1.972,1.972 v 4.247 h 0.91 a 0.759,0.759 0 0 1 0.759,0.759 v 46.263 a 0.758,0.758 0 0 1 -0.759,0.758 h -0.91 v 4.551 a 1.972,1.972 0 0 1 -1.972,1.972 h -4.141 c -0.17,0.3 -1.911,0.455 -2.229,0.455 z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a8a9a8" />
|
||||
</clipPath>
|
||||
<filter
|
||||
id="Path_12"
|
||||
x="2030.408"
|
||||
y="6169.1069"
|
||||
width="35.764"
|
||||
height="50.779999"
|
||||
filterUnits="userSpaceOnUse">
|
||||
<feOffset
|
||||
input="SourceAlpha"
|
||||
id="feOffset5743" />
|
||||
<feGaussianBlur
|
||||
stdDeviation="0.5"
|
||||
result="blur"
|
||||
id="feGaussianBlur5745" />
|
||||
<feFlood
|
||||
flood-opacity="0.502"
|
||||
id="feFlood5747" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in2="blur"
|
||||
id="feComposite5749"
|
||||
result="result1" />
|
||||
<feComposite
|
||||
in="SourceGraphic"
|
||||
in2="result1"
|
||||
id="feComposite5751" />
|
||||
</filter>
|
||||
<linearGradient
|
||||
id="linear-gradient"
|
||||
x1="6.4034481"
|
||||
x2="6.4034481"
|
||||
y2="12.806896"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="scale(2.5583092,0.39088316)"
|
||||
y1="0">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#fff"
|
||||
stop-opacity="0"
|
||||
id="stop5754" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#404040"
|
||||
id="stop5756" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linear-gradient-2"
|
||||
x1="0.5"
|
||||
x2="0.5"
|
||||
y2="1"
|
||||
gradientUnits="objectBoundingBox">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#fff"
|
||||
id="stop5759" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="gray"
|
||||
id="stop5761" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linear-gradient-2"
|
||||
id="linearGradient6337"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-0.54480195"
|
||||
x2="-0.54480195"
|
||||
y2="6.8587804"
|
||||
gradientTransform="scale(3.1897429,0.31350489)"
|
||||
y1="0.39872125" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linear-gradient-2"
|
||||
id="linearGradient6339"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="-0.57290149"
|
||||
x2="-0.57290149"
|
||||
y2="6.9009762"
|
||||
gradientTransform="scale(3.0330478,0.32970136)"
|
||||
y1="3.2110665e-006" />
|
||||
</defs>
|
||||
<g
|
||||
id="gyro"
|
||||
transform="translate(1358.514,5554.0004)">
|
||||
<g
|
||||
id="Group_16"
|
||||
data-name="Group 16"
|
||||
transform="translate(684.391,616.607)">
|
||||
<g
|
||||
id="Mask_Group_7"
|
||||
data-name="Mask Group 7"
|
||||
class="cls-2"
|
||||
clip-path="url(#clip-path)">
|
||||
<g
|
||||
id="Group_9"
|
||||
data-name="Group 9">
|
||||
<path
|
||||
id="Path_29"
|
||||
data-name="Path 29"
|
||||
class="cls-1"
|
||||
d="m 0.758,0 h 34.433 a 0.758,0.758 0 0 1 0.758,0.758 V 47.022 A 0.758,0.758 0 0 1 35.191,47.78 H 0.758 A 0.758,0.758 0 0 1 0,47.022 V 0.758 A 0.758,0.758 0 0 1 0.758,0 Z"
|
||||
transform="translate(0,6.219)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a8a9a8" />
|
||||
<rect
|
||||
id="Rectangle_11"
|
||||
data-name="Rectangle 11"
|
||||
class="cls-3"
|
||||
width="5.7639999"
|
||||
height="15.775"
|
||||
transform="translate(15.017,0.607)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9a9a9a" />
|
||||
<g
|
||||
class="cls-10"
|
||||
transform="translate(-2030.39,-6170.61)"
|
||||
id="g5769"
|
||||
style="filter:url(#Path_12)">
|
||||
<path
|
||||
id="Path_12-2"
|
||||
data-name="Path 12"
|
||||
class="cls-1"
|
||||
d="m 1.972,0 h 12.655 v 16.015 l 3.42,-0.251 V 0 h 12.745 a 1.972,1.972 0 0 1 1.972,1.972 v 43.837 a 1.972,1.972 0 0 1 -1.972,1.972 H 1.972 A 1.972,1.972 0 0 1 0,45.809 V 1.972 A 1.972,1.972 0 0 1 1.972,0 Z"
|
||||
transform="translate(2031.91,6170.61)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#a8a9a8" />
|
||||
</g>
|
||||
<g
|
||||
id="hvid"
|
||||
transform="translate(1.517,29.578)">
|
||||
<g
|
||||
id="hvid-2"
|
||||
data-name="hvid">
|
||||
<path
|
||||
id="Path_57"
|
||||
data-name="Path 57"
|
||||
class="cls-4"
|
||||
d="M 1.213,0 H 31.55 a 1.213,1.213 0 0 1 1.213,1.213 v 27.759 a 1.972,1.972 0 0 1 -1.972,1.972 H 1.972 A 1.972,1.972 0 0 1 0,28.972 V 1.213 A 1.213,1.213 0 0 1 1.213,0 Z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#f2f2f2" />
|
||||
<path
|
||||
id="Path_59"
|
||||
data-name="Path 59"
|
||||
class="cls-5"
|
||||
d="M 0,0 H 32.764 V 3.034 A 1.972,1.972 0 0 1 30.792,5.006 H 1.972 A 1.972,1.972 0 0 1 0,3.034 Z"
|
||||
transform="translate(0,25.938)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="opacity:0.6;fill:url(#linear-gradient)" />
|
||||
</g>
|
||||
<g
|
||||
id="Path_1"
|
||||
data-name="Path 1"
|
||||
class="cls-6"
|
||||
transform="translate(17.936,29.123)"
|
||||
style="fill:url(#linearGradient6339)">
|
||||
<path
|
||||
class="cls-8"
|
||||
d="M 6.4848423,2.1502612 H -9.7453671 c -0.1358308,0 -0.6785509,-0.09074 -1.2538699,-0.2385202 -0.648927,-0.1666809 -0.94169,-0.3052633 -1.041505,-0.3812874 l 1.249305,-1.03739253 c 0.303109,-0.25294002 0.75468,-0.36806001 1.0460699,-0.36806001 H 6.4848423 c 0.2201104,0 0.3956304,0.15657998 0.5988703,0.33788 0.052504,0.0468377 0.106761,0.0952419 0.1628327,0.14147469 L 8.5651855,1.7936107 C 8.487011,1.8440639 8.2630816,1.9419193 7.6369224,2.0377111 7.1470423,2.1126511 6.6342626,2.1502612 6.4848423,2.1502612 Z"
|
||||
id="path5774"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:url(#linearGradient6337);stroke:none" />
|
||||
<path
|
||||
class="cls-9"
|
||||
d="m 6.4848423,2.0252612 c 0.3687601,0 1.4223461,-0.1225882 1.8561678,-0.2655033 L 7.1648941,0.69904226 C 7.1077342,0.65182292 7.0532455,0.6032095 7.0005026,0.55616105 6.8163424,0.39188105 6.6573024,0.25000107 6.4848423,0.25000107 H -9.7453671 c -0.2695699,0 -0.6867699,0.10602999 -0.9662209,0.33921999 l -1.113573,0.92468484 c 0.473236,0.2207455 1.776214,0.5113553 2.0797939,0.5113553 H 6.4848423 m 0,0.25 H -9.7453671 c -0.3350909,0 -2.4577609,-0.4373601 -2.4577609,-0.7724501 l 1.33183,-1.10592004 c 0.31863,-0.26589 0.79084,-0.396890001307 1.1259309,-0.396890001307 H 6.4848423 c 0.3350902,0 0.5700002,0.284719991307 0.8433003,0.509620021307 L 8.7278528,1.771991 c 0,0.3350902 -1.9079203,0.5032702 -2.2430105,0.5032702 z"
|
||||
id="path5776"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#9a9a9a;stroke:none" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="red_things"
|
||||
data-name="red things"
|
||||
transform="translate(4.551,8.494)">
|
||||
<circle
|
||||
id="red_dot"
|
||||
data-name="red dot"
|
||||
class="cls-7"
|
||||
cx="3.0339999"
|
||||
cy="3.0339999"
|
||||
transform="translate(10.315,5.916)"
|
||||
r="3.0339999"
|
||||
style="fill:#b72b1c" />
|
||||
<path
|
||||
id="red_arrow_1"
|
||||
data-name="red arrow 1"
|
||||
class="cls-7"
|
||||
d="m 3122.963,-1932.135 c 0,0 -3.9,-5.13 -0.759,-10.77 0.232,0.143 0.682,0.347 0.91,0.455 0.645,0.367 0.74,-0.309 0.607,-0.758 -0.3,-0.948 -1.214,-3.792 -1.214,-3.792 l -3.792,1.062 a 1.446,1.446 0 0 0 -0.455,0.152 c -0.2,0.125 -0.369,0.4 0,0.607 l 1.062,0.607 c 0,0 -4.526,6.652 1.062,14.258 1.598,-1.14 2.579,-1.821 2.579,-1.821 z"
|
||||
transform="translate(-3117.592,1947)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#b72b1c" />
|
||||
<path
|
||||
id="red_arrow_2"
|
||||
data-name="red arrow 2"
|
||||
class="cls-7"
|
||||
d="m 3118.4,-1932.135 c 0,0 3.9,-5.13 0.758,-10.77 -0.231,0.143 -0.681,0.347 -0.91,0.455 -0.645,0.367 -0.741,-0.309 -0.607,-0.758 0.3,-0.948 1.213,-3.792 1.213,-3.792 l 3.792,1.062 a 1.446,1.446 0 0 1 0.455,0.152 c 0.2,0.125 0.368,0.4 0,0.607 l -1.062,0.607 c 0,0 4.526,6.652 -1.062,14.258 -1.594,-1.14 -2.577,-1.821 -2.577,-1.821 z"
|
||||
transform="translate(-3097.107,1947)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#b72b1c" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 11 KiB |
89
legoresources/SVGassets/icn_port.svg
Normal file
@ -0,0 +1,89 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
viewBox="1447.52 6142.536 58.928002 58.928"
|
||||
version="1.1"
|
||||
id="svg6348"
|
||||
sodipodi:docname="icn_port.svg"
|
||||
width="58.928001"
|
||||
height="58.928001"
|
||||
inkscape:export-filename="C:\gh\pxt-ev3\libs\core\jres\icons\portB.png"
|
||||
inkscape:export-xdpi="156.39424"
|
||||
inkscape:export-ydpi="156.39424"
|
||||
inkscape:version="0.92.1 r15371">
|
||||
<metadata
|
||||
id="metadata6352">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="837"
|
||||
id="namedview6350"
|
||||
showgrid="false"
|
||||
inkscape:zoom="4.0048872"
|
||||
inkscape:cx="24.98"
|
||||
inkscape:cy="29.464001"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg6348" />
|
||||
<defs
|
||||
id="defs6343">
|
||||
<style
|
||||
id="style6341">
|
||||
.cls-1 {
|
||||
fill: #eaeaea;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: #a8a9a8;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path
|
||||
style="fill:#eaeaea;stroke-width:1.08854139"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 1447.5095,6142.536 h 59.1987 v 58.928 h -59.1987 z"
|
||||
class="cls-1"
|
||||
data-name="Path 8"
|
||||
id="Path_8" />
|
||||
<path
|
||||
style="fill:#a8a9a8"
|
||||
inkscape:connector-curvature="0"
|
||||
d="M 1457.257,6189.022 V 6161.2 h 17.114 v -6.912 h 4.716 v -9.159 h 12.923 v 8.814 h 5.064 v 35.08 h -8.033 v 7.43 h -2.62 v -7.51 h -1.985 v 7.507 h -2.206 v -7.507 h -2.16 v 7.507 h -2.1 v -7.507 h -1.852 v 7.507 h -2.1 v -7.507 h -1.819 v 7.507 h -2.464 v -7.507 h -1.678 v 7.507 h -2.518 v -7.457 z"
|
||||
class="cls-2"
|
||||
data-name="Path 9"
|
||||
id="Path_9" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:consolas;-inkscape-font-specification:consolas;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
|
||||
x="1475.2291"
|
||||
y="6185.2339"
|
||||
id="text10060"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan10058"
|
||||
x="1475.2291"
|
||||
y="6185.2339">B</tspan></text>
|
||||
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
166
legoresources/SVGassets/screen.svg
Normal file
@ -0,0 +1,166 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="26.48797mm"
|
||||
height="26.48797mm"
|
||||
viewBox="0 0 26.48797 26.487971"
|
||||
version="1.1"
|
||||
id="svg9467"
|
||||
inkscape:version="0.92.1 r15371"
|
||||
sodipodi:docname="screen.svg">
|
||||
<defs
|
||||
id="defs9461">
|
||||
<linearGradient
|
||||
id="linear-gradient-5"
|
||||
x1="2.1718912"
|
||||
y1="1.576793"
|
||||
x2="2.1718912"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.18480341,0,0,0.37880435,268.75789,80.522339)"
|
||||
y2="0">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#747474"
|
||||
id="stop8183" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="#3c3c3c"
|
||||
id="stop8185" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linear-gradient-2"
|
||||
x1="44.516197"
|
||||
y1="82.265938"
|
||||
x2="44.516197"
|
||||
y2="84.402718"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.2975093,0,0,0.23530135,255.87506,61.218339)">
|
||||
<stop
|
||||
offset="0"
|
||||
stop-color="#a8a9a8"
|
||||
id="stop8166" />
|
||||
<stop
|
||||
offset="1"
|
||||
stop-color="gray"
|
||||
id="stop8168" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="2.8"
|
||||
inkscape:cx="1.3096574"
|
||||
inkscape:cy="-1.004129"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1137"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata9464">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-255.87506,-58.769882)">
|
||||
<g
|
||||
id="g10052"
|
||||
transform="translate(1.7608642e-7,-1.2242278)"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:url(#linear-gradient-2);stroke-width:0.26458332"
|
||||
d="m 256.39682,61.218339 h 25.44445 a 0.52175833,0.52175833 0 0 1 0.52176,0.521759 v 19.905926 a 0.52175833,0.52175833 0 0 1 -0.52176,0.521759 h -25.44445 a 0.52175833,0.52175833 0 0 1 -0.52176,-0.521759 V 61.740098 a 0.52175833,0.52175833 0 0 1 0.52176,-0.521759 z"
|
||||
class="cls-3"
|
||||
data-name="Path 18"
|
||||
id="Path_18" />
|
||||
<path
|
||||
style="fill:#3c3c3c;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 259.28634,63.987468 h 19.70537 a 1.0033,1.0033 0 0 1 1.0033,1.0033 v 11.076781 a 1.0033,1.0033 0 0 1 -1.0033,1.0033 h -19.70537 a 1.0033,1.0033 0 0 1 -1.0033,-1.0033 V 64.990768 a 1.0033,1.0033 0 0 1 1.0033,-1.0033 z"
|
||||
class="cls-4"
|
||||
data-name="Path 17"
|
||||
id="Path_17" />
|
||||
<path
|
||||
style="fill:#a0b5a6;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 260.8114,64.509227 h 16.73569 a 0.7223125,0.7223125 0 0 1 0.72231,0.722312 v 10.675408 a 0.7223125,0.7223125 0 0 1 -0.72231,0.722313 H 260.8114 a 0.7223125,0.7223125 0 0 1 -0.72232,-0.722313 V 65.231539 a 0.7223125,0.7223125 0 0 1 0.72232,-0.722312 z"
|
||||
class="cls-5"
|
||||
data-name="Path 16"
|
||||
id="Path_16" />
|
||||
<rect
|
||||
style="fill:#3c3c3c;stroke-width:0.26458332"
|
||||
y="77.030579"
|
||||
x="268.7579"
|
||||
height="3.6520438"
|
||||
width="0.80274582"
|
||||
class="cls-4"
|
||||
data-name="Rectangle 26"
|
||||
id="Rectangle_26" />
|
||||
<rect
|
||||
style="fill:#9a9a9a;stroke-width:0.26458332"
|
||||
y="80.522354"
|
||||
x="268.7579"
|
||||
height="1.6052271"
|
||||
width="0.80274582"
|
||||
class="cls-10"
|
||||
data-name="Rectangle 10"
|
||||
id="Rectangle_10" />
|
||||
<rect
|
||||
y="80.522354"
|
||||
x="268.7579"
|
||||
style="fill:url(#linear-gradient-5);stroke-width:0.26458332"
|
||||
height="1.6454437"
|
||||
width="0.80274582"
|
||||
class="cls-11"
|
||||
data-name="Rectangle 12"
|
||||
id="Rectangle_12" />
|
||||
<rect
|
||||
style="fill:#808080;stroke-width:0.26458332"
|
||||
y="82.167732"
|
||||
x="268.7579"
|
||||
height="1.565275"
|
||||
width="0.80274582"
|
||||
class="cls-12"
|
||||
data-name="Rectangle 11"
|
||||
id="Rectangle_11" />
|
||||
<path
|
||||
style="fill:#a8a9a8;stroke-width:0.26458332"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 257.9621,82.167783 h 6.26083 v 1.511829 c -0.69268,0.697971 -1.58115,1.578239 -1.58115,1.578239 h -4.15792 a 0.52175833,0.52175833 0 0 1 -0.52176,-0.521493 z"
|
||||
class="cls-9"
|
||||
data-name="Path 15"
|
||||
id="Path_15-2" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.4 KiB |
12
legoresources/SVGassets/trash.svg
Normal file
@ -0,0 +1,12 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2186 6829.289 63 68.355">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #fff;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<g id="trash" transform="translate(49 672)">
|
||||
<path id="Subtraction_2" data-name="Subtraction 2" class="cls-1" d="M-.5-603.645H-34a9.01,9.01,0,0,1-9-9v-42h-4a2,2,0,0,1-2-2v-2a2,2,0,0,1,2-2h12.82l3.919-7.542a5.256,5.256,0,0,1,1.332-1.9,7.7,7.7,0,0,1,5.481-1.9H-10.78s.083-.005.226-.005a8.02,8.02,0,0,1,2.9.565,5.812,5.812,0,0,1,3.3,3.249c1.682,4.051,3.219,7.508,3.235,7.542H12a2,2,0,0,1,2,2v2a2,2,0,0,1-2,2H8.5v42A9.01,9.01,0,0,1-.5-603.645Zm-7-46a1.5,1.5,0,0,0-1.5,1.5v32a1.5,1.5,0,0,0,1.5,1.5h3a1.5,1.5,0,0,0,1.5-1.5v-32a1.5,1.5,0,0,0-1.5-1.5Zm-11.5,0a1.5,1.5,0,0,0-1.5,1.5v32a1.5,1.5,0,0,0,1.5,1.5h3a1.5,1.5,0,0,0,1.5-1.5v-32a1.5,1.5,0,0,0-1.5-1.5Zm-11.5,0a1.5,1.5,0,0,0-1.5,1.5v32a1.5,1.5,0,0,0,1.5,1.5h3a1.5,1.5,0,0,0,1.5-1.5v-32a1.5,1.5,0,0,0-1.5-1.5Zm5.845-16.571-3.245,5.571H-7.517l-2.437-5.571Z" transform="translate(-2186 6829.29)"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.0 KiB |
535
legoresources/SVGassets/ultra sonic.svg
Normal file
@ -0,0 +1,535 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
viewBox="2330.575 6196.231 83.275 83.274999"
|
||||
version="1.1"
|
||||
id="svg5190"
|
||||
sodipodi:docname="ultra sonic.svg"
|
||||
width="83.275002"
|
||||
height="83.275002"
|
||||
inkscape:version="0.92.1 r15371"
|
||||
inkscape:export-filename="C:\gh\pxt-ev3\libs\core\jres\icons\ultrasonicSensor-icon.png"
|
||||
inkscape:export-xdpi="138.33684"
|
||||
inkscape:export-ydpi="138.33684">
|
||||
<metadata
|
||||
id="metadata5194">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1137"
|
||||
id="namedview5192"
|
||||
showgrid="false"
|
||||
inkscape:zoom="3.4103872"
|
||||
inkscape:cx="41.637501"
|
||||
inkscape:cy="17.443501"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg5190" />
|
||||
<defs
|
||||
id="defs5133">
|
||||
<style
|
||||
id="style5129">
|
||||
.cls-1 {
|
||||
fill: #f2f2f2;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: #292929;
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
stroke: rgba(242,242,242,0.5);
|
||||
stroke-width: 0.25px;
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
fill: #931f1f;
|
||||
}
|
||||
|
||||
.cls-5 {
|
||||
fill: #9d761f;
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
clip-path: url(#clip-path);
|
||||
}
|
||||
|
||||
.cls-7 {
|
||||
stroke: none;
|
||||
}
|
||||
|
||||
.cls-8 {
|
||||
fill: none;
|
||||
}
|
||||
</style>
|
||||
<clipPath
|
||||
id="clip-path">
|
||||
<circle
|
||||
id="guld"
|
||||
class="cls-1"
|
||||
cx="6.9770002"
|
||||
cy="6.9770002"
|
||||
r="6.9770002"
|
||||
style="fill:#f2f2f2" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g
|
||||
id="ultra_sonic"
|
||||
data-name="ultra sonic"
|
||||
transform="translate(1222,5578.1935)">
|
||||
<rect
|
||||
id="Rectangle_1"
|
||||
data-name="Rectangle 1"
|
||||
class="cls-2"
|
||||
width="43.382"
|
||||
height="31.247"
|
||||
transform="translate(1131.024,643.596)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#292929" />
|
||||
<rect
|
||||
id="Rectangle_2"
|
||||
data-name="Rectangle 2"
|
||||
width="25.330999"
|
||||
height="17.594999"
|
||||
transform="translate(1138.609,650.573)"
|
||||
x="0"
|
||||
y="0" />
|
||||
<g
|
||||
id="eye1"
|
||||
transform="translate(1108.575,642.231)">
|
||||
<g
|
||||
id="sort"
|
||||
class="cls-3"
|
||||
style="stroke-width:0.25px">
|
||||
<circle
|
||||
class="cls-7"
|
||||
cx="17.444"
|
||||
cy="17.444"
|
||||
id="ellipse5137"
|
||||
r="17.444"
|
||||
style="stroke:none" />
|
||||
<circle
|
||||
class="cls-8"
|
||||
cx="17.444"
|
||||
cy="17.444"
|
||||
id="ellipse5139"
|
||||
r="17.319"
|
||||
style="fill:none" />
|
||||
</g>
|
||||
<circle
|
||||
id="rød"
|
||||
class="cls-4"
|
||||
cx="10.77"
|
||||
cy="10.77"
|
||||
transform="translate(6.674,6.674)"
|
||||
r="10.77"
|
||||
style="fill:#931f1f" />
|
||||
<circle
|
||||
id="guld-3"
|
||||
data-name="guld"
|
||||
class="cls-5"
|
||||
cx="8.0389996"
|
||||
cy="8.0389996"
|
||||
transform="translate(9.404,9.404)"
|
||||
r="8.0389996"
|
||||
style="fill:#9d761f" />
|
||||
<circle
|
||||
id="guld-4"
|
||||
data-name="guld"
|
||||
class="cls-1"
|
||||
cx="6.9770002"
|
||||
cy="6.9770002"
|
||||
transform="translate(10.466,10.466)"
|
||||
r="6.9770002"
|
||||
style="fill:#f2f2f2" />
|
||||
<g
|
||||
id="Group_5"
|
||||
data-name="Group 5"
|
||||
transform="translate(10.466,10.466)">
|
||||
<g
|
||||
id="Mask_Group_8"
|
||||
data-name="Mask Group 8"
|
||||
class="cls-6"
|
||||
clip-path="url(#clip-path)">
|
||||
<g
|
||||
id="Group_17"
|
||||
data-name="Group 17"
|
||||
transform="rotate(-30,2.4159415,14.94335)">
|
||||
<rect
|
||||
id="Rectangle_84"
|
||||
data-name="Rectangle 84"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.791"
|
||||
transform="translate(2.048)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_91"
|
||||
data-name="Rectangle 91"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.507"
|
||||
transform="rotate(-90,10.049,10.049)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_85"
|
||||
data-name="Rectangle 85"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.791"
|
||||
transform="translate(4.93)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_97"
|
||||
data-name="Rectangle 97"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.507"
|
||||
transform="rotate(-90,8.608,8.608)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_86"
|
||||
data-name="Rectangle 86"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.791"
|
||||
transform="translate(7.812)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_96"
|
||||
data-name="Rectangle 96"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.507"
|
||||
transform="rotate(-90,7.167,7.167)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_87"
|
||||
data-name="Rectangle 87"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.791"
|
||||
transform="translate(10.694)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_95"
|
||||
data-name="Rectangle 95"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.507"
|
||||
transform="rotate(-90,5.726,5.726)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_88"
|
||||
data-name="Rectangle 88"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.791"
|
||||
transform="translate(13.576)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_94"
|
||||
data-name="Rectangle 94"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.507"
|
||||
transform="rotate(-90,4.285,4.285)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_89"
|
||||
data-name="Rectangle 89"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.791"
|
||||
transform="translate(16.458)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_93"
|
||||
data-name="Rectangle 93"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.507"
|
||||
transform="rotate(-90,2.844,2.844)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_90"
|
||||
data-name="Rectangle 90"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.791"
|
||||
transform="translate(19.34)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_92"
|
||||
data-name="Rectangle 92"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.507"
|
||||
transform="rotate(-90,1.403,1.403)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="eye2"
|
||||
transform="translate(1156.962,642.231)">
|
||||
<g
|
||||
id="sort-2"
|
||||
data-name="sort"
|
||||
class="cls-3"
|
||||
style="stroke-width:0.25px">
|
||||
<circle
|
||||
class="cls-7"
|
||||
cx="17.444"
|
||||
cy="17.444"
|
||||
id="ellipse5163"
|
||||
r="17.444"
|
||||
style="stroke:none" />
|
||||
<circle
|
||||
class="cls-8"
|
||||
cx="17.444"
|
||||
cy="17.444"
|
||||
id="ellipse5165"
|
||||
r="17.319"
|
||||
style="fill:none" />
|
||||
</g>
|
||||
<circle
|
||||
id="rød-2"
|
||||
data-name="rød"
|
||||
class="cls-4"
|
||||
cx="10.77"
|
||||
cy="10.77"
|
||||
transform="translate(6.674,6.674)"
|
||||
r="10.77"
|
||||
style="fill:#931f1f" />
|
||||
<circle
|
||||
id="guld-5"
|
||||
data-name="guld"
|
||||
class="cls-5"
|
||||
cx="8.0389996"
|
||||
cy="8.0389996"
|
||||
transform="translate(9.404,9.404)"
|
||||
r="8.0389996"
|
||||
style="fill:#9d761f" />
|
||||
<circle
|
||||
id="guld-6"
|
||||
data-name="guld"
|
||||
class="cls-1"
|
||||
cx="6.9770002"
|
||||
cy="6.9770002"
|
||||
transform="translate(10.466,10.466)"
|
||||
r="6.9770002"
|
||||
style="fill:#f2f2f2" />
|
||||
<g
|
||||
id="Group_18"
|
||||
data-name="Group 18"
|
||||
transform="translate(10.466,10.466)">
|
||||
<g
|
||||
id="Mask_Group_8-2"
|
||||
data-name="Mask Group 8"
|
||||
class="cls-6"
|
||||
clip-path="url(#clip-path)">
|
||||
<g
|
||||
id="Group_17-2"
|
||||
data-name="Group 17"
|
||||
transform="rotate(-30,2.4159415,14.94335)">
|
||||
<rect
|
||||
id="Rectangle_84-2"
|
||||
data-name="Rectangle 84"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.791"
|
||||
transform="translate(2.048)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_91-2"
|
||||
data-name="Rectangle 91"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.507"
|
||||
transform="rotate(-90,10.049,10.049)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_85-2"
|
||||
data-name="Rectangle 85"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.791"
|
||||
transform="translate(4.93)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_97-2"
|
||||
data-name="Rectangle 97"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.507"
|
||||
transform="rotate(-90,8.608,8.608)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_86-2"
|
||||
data-name="Rectangle 86"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.791"
|
||||
transform="translate(7.812)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_96-2"
|
||||
data-name="Rectangle 96"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.507"
|
||||
transform="rotate(-90,7.167,7.167)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_87-2"
|
||||
data-name="Rectangle 87"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.791"
|
||||
transform="translate(10.694)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_95-2"
|
||||
data-name="Rectangle 95"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.507"
|
||||
transform="rotate(-90,5.726,5.726)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_88-2"
|
||||
data-name="Rectangle 88"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.791"
|
||||
transform="translate(13.576)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_94-2"
|
||||
data-name="Rectangle 94"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.507"
|
||||
transform="rotate(-90,4.285,4.285)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_89-2"
|
||||
data-name="Rectangle 89"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.791"
|
||||
transform="translate(16.458)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_93-2"
|
||||
data-name="Rectangle 93"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.507"
|
||||
transform="rotate(-90,2.844,2.844)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_90-2"
|
||||
data-name="Rectangle 90"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.791"
|
||||
transform="translate(19.34)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
<rect
|
||||
id="Rectangle_92-2"
|
||||
data-name="Rectangle 92"
|
||||
class="cls-5"
|
||||
width="0.60699999"
|
||||
height="22.507"
|
||||
transform="rotate(-90,1.403,1.403)"
|
||||
x="0"
|
||||
y="0"
|
||||
style="fill:#9d761f" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 15 KiB |
@ -92,7 +92,7 @@
|
||||
"Math.pow|param|x": "The base value of the expression.",
|
||||
"Math.pow|param|y": "The exponent value of the expression.",
|
||||
"Math.random": "Returns a pseudorandom number between 0 and 1.",
|
||||
"Math.randomRange": "Returns a pseudorandom number between min and max included. \nIf both numbers are integral, the result is integral.",
|
||||
"Math.randomRange": "Returns a pseudorandom number between min and max included.\nIf both numbers are integral, the result is integral.",
|
||||
"Math.randomRange|param|max": "the upper inclusive bound, eg: 10",
|
||||
"Math.randomRange|param|min": "the lower inclusive bound, eg: 0",
|
||||
"Math.round": "Returns a supplied numeric expression rounded to the nearest number.",
|
||||
@ -142,15 +142,10 @@
|
||||
"loops.forever": "Repeats the code forever in the background. On each iteration, allows other codes to run.",
|
||||
"loops.pause": "Pause for the specified time in milliseconds",
|
||||
"loops.pause|param|ms": "how long to pause for, eg: 100, 200, 500, 1000, 2000",
|
||||
"loops.timePicker": "Get the time field editor",
|
||||
"loops.timePicker|param|ms": "time duration in milliseconds, eg: 500, 1000",
|
||||
"loops.waitUntil": "Busy wait for a condition to be true",
|
||||
"loops.waitUntil|param|condition": "condition to test for",
|
||||
"loops.waitUntil|param|timeOut": "if positive, maximum duration to wait for in milliseconds",
|
||||
"loops.when": "Runs code when the condition becomes true",
|
||||
"loops.when|param|condition": "condition to test",
|
||||
"loops.when|param|handler": "code to run",
|
||||
"parseInt": "Convert a string to an integer.",
|
||||
"pauseUntil": "Busy wait for a condition to be true",
|
||||
"pauseUntil|param|condition": "condition to test for",
|
||||
"pauseUntil|param|timeOut": "if positive, maximum duration to wait for in milliseconds",
|
||||
"serial": "Reading and writing data over a serial connection.",
|
||||
"serial.writeBuffer": "Send a buffer across the serial connection.",
|
||||
"serial.writeLine": "Write a line of text to the serial port.",
|
||||
|
@ -31,7 +31,6 @@
|
||||
"control|block": "control",
|
||||
"loops.forever|block": "forever",
|
||||
"loops.pause|block": "pause %pause=timePicker|ms",
|
||||
"loops.timePicker|block": "%ms",
|
||||
"loops|block": "loops",
|
||||
"parseInt|block": "parse to integer %text",
|
||||
"serial.writeBuffer|block": "serial|write buffer %buffer",
|
||||
|
@ -17,8 +17,7 @@
|
||||
"control.cpp",
|
||||
"control.ts",
|
||||
"serial.cpp",
|
||||
"serial.ts",
|
||||
"loops.ts"
|
||||
"serial.ts"
|
||||
],
|
||||
"testFiles": [
|
||||
"test.ts"
|
||||
|
@ -8,5 +8,8 @@
|
||||
"sensors.ColorSensor.onColorDetected|param|handler": "the code to run when detected",
|
||||
"sensors.ColorSensor.onLightChanged": "Registers code to run when the ambient light changes.",
|
||||
"sensors.ColorSensor.onLightChanged|param|condition": "the light condition",
|
||||
"sensors.ColorSensor.onLightChanged|param|handler": "the code to run when detected"
|
||||
"sensors.ColorSensor.onLightChanged|param|handler": "the code to run when detected",
|
||||
"sensors.ColorSensor.pauseForColor": "Waits for the given color to be detected",
|
||||
"sensors.ColorSensor.pauseForColor|param|color": "the color to detect",
|
||||
"sensors.ColorSensor.pauseForLight": "Waits for the given color to be detected"
|
||||
}
|
@ -13,14 +13,16 @@
|
||||
"LightCondition.Dark|block": "dark",
|
||||
"LightIntensityMode.Ambient|block": "ambient light",
|
||||
"LightIntensityMode.Reflected|block": "reflected light",
|
||||
"sensors.ColorSensor.color|block": "`icons.colorSensor` %color| color",
|
||||
"sensors.ColorSensor.light|block": "`icons.colorSensor` %color|%mode",
|
||||
"sensors.ColorSensor.onColorDetected|block": "on `icons.colorSensor` %sensor|detected color %color",
|
||||
"sensors.ColorSensor.onLightChanged|block": "on `icons.colorSensor` %sensor|%mode|%condition",
|
||||
"sensors.color1|block": "1",
|
||||
"sensors.color2|block": "2",
|
||||
"sensors.color3|block": "3",
|
||||
"sensors.color4|block": "4",
|
||||
"sensors.ColorSensor.color|block": "%sensor| color",
|
||||
"sensors.ColorSensor.light|block": "%sensor|%mode",
|
||||
"sensors.ColorSensor.onColorDetected|block": "on %sensor|detected color %color",
|
||||
"sensors.ColorSensor.onLightChanged|block": "on %sensor|%mode|%condition",
|
||||
"sensors.ColorSensor.pauseForColor|block": "pause %sensor|for color %color",
|
||||
"sensors.ColorSensor.pauseForLight|block": "pause %sensor|for %mode|light %condition",
|
||||
"sensors.color1|block": "color 1",
|
||||
"sensors.color2|block": "color 2",
|
||||
"sensors.color3|block": "color 3",
|
||||
"sensors.color4|block": "color 4",
|
||||
"sensors|block": "sensors",
|
||||
"{id:category}Sensors": "Sensors",
|
||||
"{id:group}Color Sensor": "Color Sensor"
|
||||
|
@ -68,6 +68,13 @@ namespace sensors {
|
||||
}
|
||||
|
||||
setMode(m: ColorSensorMode) {
|
||||
if (m == ColorSensorMode.AmbientLightIntensity) {
|
||||
this.thresholdDetector.setLowThreshold(5);
|
||||
this.thresholdDetector.setHighThreshold(20);
|
||||
} else {
|
||||
this.thresholdDetector.setLowThreshold(20);
|
||||
this.thresholdDetector.setHighThreshold(80);
|
||||
}
|
||||
this._setMode(m)
|
||||
}
|
||||
|
||||
@ -79,7 +86,9 @@ namespace sensors {
|
||||
}
|
||||
|
||||
_query() {
|
||||
if (this.mode == ColorSensorMode.Color)
|
||||
if (this.mode == ColorSensorMode.Color
|
||||
|| this.mode == ColorSensorMode.AmbientLightIntensity
|
||||
|| this.mode == ColorSensorMode.ReflectedLightIntensity)
|
||||
return this.getNumber(NumberFormat.UInt8LE, 0)
|
||||
return 0
|
||||
}
|
||||
@ -97,26 +106,45 @@ namespace sensors {
|
||||
* @param handler the code to run when detected
|
||||
*/
|
||||
//% help=sensors/color-sensor/on-color-detected
|
||||
//% block="on `icons.colorSensor` %sensor|detected color %color"
|
||||
//% block="on %sensor|detected color %color"
|
||||
//% blockId=colorOnColorDetected
|
||||
//% parts="colorsensor"
|
||||
//% blockNamespace=sensors
|
||||
//% weight=100 blockGap=8
|
||||
//% group="Color Sensor"
|
||||
onColorDetected(color: ColorSensorColor, handler: () => void) {
|
||||
this.setMode(ColorSensorMode.Color)
|
||||
const v = this._colorEventValue(<number>color);
|
||||
control.onEvent(this._id, v, handler);
|
||||
this.setMode(ColorSensorMode.Color)
|
||||
if (this.color() == color)
|
||||
control.raiseEvent(this._id, v);
|
||||
}
|
||||
|
||||
/**
|
||||
* Waits for the given color to be detected
|
||||
* @param color the color to detect
|
||||
*/
|
||||
//% help=sensors/color-sensor/pause-for-color
|
||||
//% block="pause %sensor|for color %color"
|
||||
//% blockId=colorPauseForColorDetected
|
||||
//% parts="colorsensor"
|
||||
//% blockNamespace=sensors
|
||||
//% weight=99 blockGap=8
|
||||
//% group="Color Sensor"
|
||||
pauseForColor(color: ColorSensorColor) {
|
||||
this.setMode(ColorSensorMode.Color);
|
||||
if (this.color() != color) {
|
||||
const v = this._colorEventValue(<number>color);
|
||||
control.waitForEvent(this._id, v);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current color from the color sensor.
|
||||
* @param color the color sensor to query the request
|
||||
* @param sensor the color sensor to query the request
|
||||
*/
|
||||
//% help=sensors/color-sensor/color
|
||||
//% block="`icons.colorSensor` %color| color"
|
||||
//% block="%sensor| color"
|
||||
//% blockId=colorGetColor
|
||||
//% parts="colorsensor"
|
||||
//% blockNamespace=sensors
|
||||
@ -133,27 +161,44 @@ namespace sensors {
|
||||
* @param handler the code to run when detected
|
||||
*/
|
||||
//% help=sensors/color-sensor/on-light-changed
|
||||
//% block="on `icons.colorSensor` %sensor|%mode|%condition"
|
||||
//% block="on %sensor|%mode|%condition"
|
||||
//% blockId=colorOnLightChanged
|
||||
//% parts="colorsensor"
|
||||
//% blockNamespace=sensors
|
||||
//% weight=89 blockGap=8
|
||||
//% group="Color Sensor"
|
||||
onLightChanged(mode: LightIntensityMode, condition: LightCondition, handler: () => void) {
|
||||
control.onEvent(this._id, <number>condition, handler);
|
||||
this.setMode(<ColorSensorMode><number>mode)
|
||||
control.onEvent(this._id, <number>condition, handler);
|
||||
}
|
||||
|
||||
/**
|
||||
* Waits for the given color to be detected
|
||||
* @param color the color to detect
|
||||
*/
|
||||
//% help=sensors/color-sensor/pause-for-light
|
||||
//% block="pause %sensor|for %mode|light %condition"
|
||||
//% blockId=colorPauseForLight
|
||||
//% parts="colorsensor"
|
||||
//% blockNamespace=sensors
|
||||
//% weight=88 blockGap=8
|
||||
//% group="Color Sensor"
|
||||
pauseForLight(mode: LightIntensityMode, condition: LightCondition) {
|
||||
this.setMode(<ColorSensorMode><number>mode)
|
||||
if (this.thresholdDetector.state != <number>condition)
|
||||
control.waitForEvent(this._id, <number>condition)
|
||||
}
|
||||
|
||||
/**
|
||||
* Measures the ambient or reflected light value from 0 (darkest) to 100 (brightest).
|
||||
* @param color the color sensor port
|
||||
* @param sensor the color sensor port
|
||||
*/
|
||||
//% help=sensors/color-sensor/light
|
||||
//% block="`icons.colorSensor` %color|%mode"
|
||||
//% block="%sensor|%mode"
|
||||
//% blockId=colorLight
|
||||
//% parts="colorsensor"
|
||||
//% blockNamespace=sensors
|
||||
//% weight=88
|
||||
//% weight=87
|
||||
//% group="Color Sensor"
|
||||
light(mode: LightIntensityMode) {
|
||||
this.setMode(<ColorSensorMode><number>mode)
|
||||
@ -171,15 +216,15 @@ namespace sensors {
|
||||
}
|
||||
}
|
||||
|
||||
//% whenUsed block="1" weight=95 fixedInstance
|
||||
//% whenUsed block="color 1" weight=95 fixedInstance jres=icons.port1
|
||||
export const color1: ColorSensor = new ColorSensor(1)
|
||||
|
||||
//% whenUsed block="3" weight=90 fixedInstance
|
||||
export const color3: ColorSensor = new ColorSensor(3)
|
||||
|
||||
//% whenUsed block="2" weight=90 fixedInstance
|
||||
//% whenUsed block="color 2" weight=90 fixedInstance jres=icons.port2
|
||||
export const color2: ColorSensor = new ColorSensor(2)
|
||||
|
||||
//% whenUsed block="4" weight=90 fixedInstance
|
||||
//% whenUsed block="color 3" weight=90 fixedInstance jres=icons.port3
|
||||
export const color3: ColorSensor = new ColorSensor(3)
|
||||
|
||||
//% whenUsed block="color 4" weight=90 fixedInstance jres=icons.port4
|
||||
export const color4: ColorSensor = new ColorSensor(4)
|
||||
}
|
||||
|
@ -18,8 +18,8 @@
|
||||
"brick.Button.isPressed": "Check if button is currently pressed or not.",
|
||||
"brick.Button.onEvent": "Do something when a button or sensor is clicked, up or down.",
|
||||
"brick.Button.onEvent|param|body": "code to run when the event is raised",
|
||||
"brick.Button.waitUntil": "Waits until the event is raised",
|
||||
"brick.Button.waitUntil|param|ev": "the event to wait for",
|
||||
"brick.Button.pauseUntil": "Waits until the event is raised",
|
||||
"brick.Button.pauseUntil|param|ev": "the event to wait for",
|
||||
"brick.Button.wasPressed": "See if the button was pressed again since the last time you checked.",
|
||||
"brick._imagePicker": "An image",
|
||||
"brick._imagePicker|param|image": "the image",
|
||||
@ -28,20 +28,29 @@
|
||||
"brick.buttonLeft": "Left button on the EV3 Brick.",
|
||||
"brick.buttonRight": "Right button on the EV3 Brick.",
|
||||
"brick.buttonUp": "Up button on the EV3 Brick.",
|
||||
"brick.clearScreen": "Clears the screen",
|
||||
"brick.lightPattern": "Pattern block.",
|
||||
"brick.lightPattern|param|pattern": "the lights pattern to use. eg: LightsPattern.Green",
|
||||
"brick.print": "Show text on the screen.",
|
||||
"brick.printPorts": "Prints the port states on the screen",
|
||||
"brick.print|param|text": "the text to print on the screen, eg: \"Hello world\"",
|
||||
"brick.print|param|x": "the starting position's x coordinate, eg: 0",
|
||||
"brick.print|param|y": "the starting position's x coordinate, eg: 0",
|
||||
"brick.setLight": "Set lights.",
|
||||
"brick.setLight|param|pattern": "the lights pattern to use.",
|
||||
"brick.setPixel": "Sets a pixel on or off",
|
||||
"brick.setPixel|param|on": "a value indicating if the pixel should be on or off",
|
||||
"brick.setPixel|param|x": "the starting position's x coordinate, eg: 0",
|
||||
"brick.setPixel|param|y": "the starting position's x coordinate, eg: 0",
|
||||
"brick.setStatusLight": "Set lights.",
|
||||
"brick.setStatusLight|param|pattern": "the lights pattern to use.",
|
||||
"brick.showImage": "Shows an image on screen",
|
||||
"brick.showImage|param|image": "image to draw",
|
||||
"console": "Reading and writing data to the console output.\n\nReading and writing data to the console output.",
|
||||
"console.addListener": "Adds a listener for the log messages",
|
||||
"console.log": "Write a line of text to the console output.",
|
||||
"console.logValue": "Write a name:value pair as a line of text to the console output.",
|
||||
"console.logValue|param|name": "name of the value stream, eg: \"x\"",
|
||||
"console.logValue|param|value": "to write",
|
||||
"console.sendToScreen": "Sends the log messages to the brick screen and uses the brick up and down buttons to scroll.",
|
||||
"control": "Program controls and events.",
|
||||
"control.allocateNotifyEvent": "Allocates the next user notification event",
|
||||
"control.deviceFirmwareVersion": "Determine the version of system software currently running.",
|
||||
@ -50,28 +59,49 @@
|
||||
"control.raiseEvent": "Announce that an event happened to registered handlers.",
|
||||
"control.raiseEvent|param|src": "ID of the Component that generated the event",
|
||||
"control.raiseEvent|param|value": "Component specific code indicating the cause of the event.",
|
||||
"motors.Motor.angle": "Gets motor ration angle.",
|
||||
"motors.Motor.clearCount": "Clears the motor count",
|
||||
"motors.Motor.count": "Gets motor step count.",
|
||||
"motors.Motor.move": "Moves the motor by a number of degrees",
|
||||
"motors.Motor.move|param|angle": "the degrees to rotate, eg: 360",
|
||||
"motors.Motor.move|param|power": "the power from ``100`` full forward to ``-100`` full backward, eg: 50",
|
||||
"motors.Motor.power": "Sets the motor power level from ``-100`` to ``100``.",
|
||||
"motors.Motor.power|param|power": "the power from ``100`` full forward to ``-100`` full backward, eg: 50",
|
||||
"motors.Motor.reset": "Resets the motor.",
|
||||
"motors.Motor.setBrake": "Sets the automatic brake on or off when the motor is off",
|
||||
"motors.Motor.setBrake|param|brake": "a value indicating if the motor should break when off",
|
||||
"motors.Motor.setReversed": "Reverses the motor polarity",
|
||||
"motors.Motor.speed": "Gets motor actual speed.",
|
||||
"motors.Motor.stop": "Stops the motor",
|
||||
"motors.Motor.tachoCount": "Gets motor tacho count.",
|
||||
"motors.Motor.toString": "Returns the status of the motor",
|
||||
"motors.MotorBase.isReady": "Returns a value indicating if the motor is still running a previous command.",
|
||||
"motors.MotorBase.move": "Moves the motor by a number of rotations, degress or seconds",
|
||||
"motors.MotorBase.move|param|speed": "the speed from ``100`` full forward to ``-100`` full backward, eg: 50",
|
||||
"motors.MotorBase.move|param|unit": "the meaning of the value",
|
||||
"motors.MotorBase.move|param|value": "the move quantity, eg: 2",
|
||||
"motors.MotorBase.pauseUntilReady": "Pauses the execution until the previous command finished.",
|
||||
"motors.MotorBase.pauseUntilReady|param|timeOut": "optional maximum pausing time in milliseconds",
|
||||
"motors.MotorBase.reset": "Resets the motor(s).",
|
||||
"motors.MotorBase.setBrake": "Sets the automatic brake on or off when the motor is off",
|
||||
"motors.MotorBase.setBrake|param|brake": "a value indicating if the motor should break when off",
|
||||
"motors.MotorBase.setReversed": "Reverses the motor polarity",
|
||||
"motors.MotorBase.setSpeed": "Sets the speed of the motor.",
|
||||
"motors.MotorBase.setSpeed|param|speed": "the speed from ``100`` full forward to ``-100`` full backward, eg: 50",
|
||||
"motors.MotorBase.stop": "Stops the motor(s).",
|
||||
"motors.SynchedMotorPair.steer": "Turns the motor and the follower motor by a number of rotations",
|
||||
"motors.SynchedMotorPair.steer|param|speed": "the speed from ``100`` full forward to ``-100`` full backward, eg: 50",
|
||||
"motors.SynchedMotorPair.steer|param|steering": "the ratio of power sent to the follower motor, from ``-100`` to ``100``",
|
||||
"motors.SynchedMotorPair.steer|param|unit": "the meaning of the value",
|
||||
"motors.SynchedMotorPair.steer|param|value": "the move quantity, eg: 2",
|
||||
"motors.SynchedMotorPair.tank": "The Move Tank block can make a robot drive forward, backward, turn, or stop. \nUse the Move Tank block for robot vehicles that have two Large Motors, \nwith one motor driving the left side of the vehicle and the other the right side. \nYou can make the two motors go at different speeds or in different directions \nto make your robot turn.",
|
||||
"motors.SynchedMotorPair.tank|param|speedRight": "the speed on the right motor, eg: 50",
|
||||
"motors.SynchedMotorPair.tank|param|unit": "@param speedLeft the speed on the left motor, eg: 50",
|
||||
"motors.SynchedMotorPair.tank|param|value": "the amount of movement, eg: 2",
|
||||
"motors.SynchedMotorPair.toString": "Returns the name(s) of the motor",
|
||||
"motors.mkCmd": "Allocates a message buffer",
|
||||
"motors.mkCmd|param|addSize": "required additional bytes",
|
||||
"motors.mkCmd|param|cmd": "command id",
|
||||
"motors.mkCmd|param|out": "ports",
|
||||
"motors.readPWM": "Sends and receives a message from the motors device",
|
||||
"motors.readPWM|param|buf": "message buffer",
|
||||
"motors.resetAllMotors": "Resets all motors",
|
||||
"motors.stopAllMotors": "Stops all motors",
|
||||
"motors.writePWM": "Sends a command to the motors device",
|
||||
"motors.writePWM|param|buf": "the command buffer",
|
||||
"output.createBuffer": "Create a new zero-initialized buffer.",
|
||||
"output.createBuffer|param|size": "number of bytes in the buffer",
|
||||
"screen.clear": "Clear screen and reset font to normal.",
|
||||
"screen.imageOf": "Makes an image bound to a buffer.",
|
||||
"screen.unpackPNG": "Decompresses a 1-bit gray scale PNG image to image format.",
|
||||
"sensors.GyroSensor.angle": "Get the current angle from the gyroscope.",
|
||||
"sensors.GyroSensor.rate": "Get the current rotation rate from the gyroscope.",
|
||||
"serial": "Reading and writing data over a serial connection.",
|
||||
"serial.writeDmesg": "Send DMESG debug buffer over serial."
|
||||
}
|
@ -12,57 +12,71 @@
|
||||
"LightsPattern.RedFlash|block": "Flashing Red",
|
||||
"LightsPattern.RedPulse|block": "Pulsing Red",
|
||||
"LightsPattern.Red|block": "Red",
|
||||
"MoveUnit.Degrees|block": "degrees",
|
||||
"MoveUnit.MilliSeconds|block": "milliseconds",
|
||||
"MoveUnit.Rotations|block": "rotations",
|
||||
"Output.AB|block": "A+B",
|
||||
"Output.AD|block": "A+D",
|
||||
"Output.ALL|block": "All",
|
||||
"Output.A|block": "A",
|
||||
"Output.BC|block": "B+C",
|
||||
"Output.B|block": "B",
|
||||
"Output.CD|block": "C+D",
|
||||
"Output.C|block": "C",
|
||||
"Output.D|block": "D",
|
||||
"brick.Button.isPressed|block": "`icons.brickButtons` %button|is pressed",
|
||||
"brick.Button.onEvent|block": "on `icons.brickButtons` %button|%event",
|
||||
"brick.Button.waitUntil|block": "wait until `icons.brickButtons` %button|%event",
|
||||
"brick.Button.wasPressed|block": "`icons.brickButtons` %button|was pressed",
|
||||
"brick.Button.isPressed|block": "%button|is pressed",
|
||||
"brick.Button.onEvent|block": "on %button|%event",
|
||||
"brick.Button.pauseUntil|block": "pause until %button|%event",
|
||||
"brick.Button.wasPressed|block": "%button|was pressed",
|
||||
"brick._imagePicker|block": "%image",
|
||||
"brick.buttonDown|block": "down",
|
||||
"brick.buttonEnter|block": "enter",
|
||||
"brick.buttonLeft|block": "left",
|
||||
"brick.buttonRight|block": "right",
|
||||
"brick.buttonUp|block": "up",
|
||||
"brick.clearScreen|block": "clear screen",
|
||||
"brick.lightPattern|block": "%pattern",
|
||||
"brick.print|block": "`icons.brickDisplay` print %text| at x: %x| y: %y",
|
||||
"brick.setPixel|block": "`icons.brickDisplay` set pixel %on| at x: %x| y: %y",
|
||||
"brick.setStatusLight|block": "set `icons.brickButtons` to %pattern=led_pattern",
|
||||
"brick.showImage|block": "`icons.brickDisplay` show image %image=scren_image_picker",
|
||||
"brick.printPorts|block": "print ports",
|
||||
"brick.print|block": "print %text| at x: %x| y: %y",
|
||||
"brick.setLight|block": "set light to %pattern=led_pattern",
|
||||
"brick.setPixel|block": "set pixel %on| at x: %x| y: %y",
|
||||
"brick.showImage|block": "show image %image=screen_image_picker",
|
||||
"brick|block": "brick",
|
||||
"console.logValue|block": "console|log value %name|= %value",
|
||||
"console.log|block": "console|log %text",
|
||||
"console.sendToScreen|block": "send console to screen",
|
||||
"console|block": "console",
|
||||
"control.raiseEvent|block": "raise event|from %src|with value %value",
|
||||
"control|block": "control",
|
||||
"motors.Motor.count|block": "`icons.motorLarge` %motor|count",
|
||||
"motors.Motor.move|block": "move `icons.motorLarge` %motor|by %angle|degrees at %power|%",
|
||||
"motors.Motor.power|block": "power `icons.motorLarge` %motor|to %power|%",
|
||||
"motors.Motor.setBrake|block": "set `icons.motorLarge` %motor|brake %brake",
|
||||
"motors.Motor.setReversed|block": "set `icons.motorLarge` %motor|reversed %reversed",
|
||||
"motors.Motor.speed|block": "`icons.motorLarge` %motor|speed",
|
||||
"motors.Motor.stop|block": "stop `icons.motorLarge` %motor",
|
||||
"motors.Motor.tachoCount|block": "`icons.motorLarge` %motor|tacho count",
|
||||
"motors.largeMotorA|block": "large A",
|
||||
"motors.largeMotorB|block": "large B",
|
||||
"motors.largeMotorC|block": "large C",
|
||||
"motors.largeMotorD|block": "large D",
|
||||
"motors.mediumMotorA|block": "medium A",
|
||||
"motors.mediumMotorB|block": "medium B",
|
||||
"motors.mediumMotorC|block": "medium C",
|
||||
"motors.mediumMotorD|block": "medium D",
|
||||
"motors.stopAllMotors|block": "stop all `icons.motorLarge`",
|
||||
"motors.Motor.angle|block": "%motor|angle",
|
||||
"motors.Motor.speed|block": "%motor|speed",
|
||||
"motors.MotorBase.move|block": "move %motor|for %value|%unit|at %speed|%",
|
||||
"motors.MotorBase.pauseUntilReady|block": "%motor|pause until ready",
|
||||
"motors.MotorBase.setBrake|block": "set %motor|brake %brake",
|
||||
"motors.MotorBase.setReversed|block": "set %motor|reversed %reversed",
|
||||
"motors.MotorBase.setSpeed|block": "set speed of %motor|to %speed|%",
|
||||
"motors.SynchedMotorPair.steer|block": "steer %chassis|%steering|%|at speed %speed|%|by %value|%unit",
|
||||
"motors.SynchedMotorPair.tank|block": "tank %chassis|left %speedLeft|%|right %speedRight|%|by %value|%unit",
|
||||
"motors.largeAB|block": "large A+B",
|
||||
"motors.largeAD|block": "large A+D",
|
||||
"motors.largeA|block": "large A",
|
||||
"motors.largeBC|block": "large B+C",
|
||||
"motors.largeB|block": "large B",
|
||||
"motors.largeCD|block": "large C+D",
|
||||
"motors.largeC|block": "large C",
|
||||
"motors.largeD|block": "large D",
|
||||
"motors.mediumA|block": "medium A",
|
||||
"motors.mediumB|block": "medium B",
|
||||
"motors.mediumC|block": "medium C",
|
||||
"motors.mediumD|block": "medium D",
|
||||
"motors.stopAllMotors|block": "stop all motors",
|
||||
"motors|block": "motors",
|
||||
"output|block": "output",
|
||||
"screen|block": "screen",
|
||||
"sensors.GyroSensor.angle|block": "`icons.gyroSensor` %sensor|angle",
|
||||
"sensors.GyroSensor.rate|block": "`icons.gyroSensor` %sensor|rotation rate",
|
||||
"sensors.gyro1|block": "1",
|
||||
"sensors.gyro2|block": "2",
|
||||
"sensors.gyro3|block": "3",
|
||||
"sensors.gyro4|block": "4",
|
||||
"sensors|block": "sensors",
|
||||
"serial|block": "serial",
|
||||
"{id:category}Brick": "Brick",
|
||||
"{id:category}Console": "Console",
|
||||
"{id:category}Control": "Control",
|
||||
"{id:category}Image": "Image",
|
||||
"{id:category}Images": "Images",
|
||||
@ -70,11 +84,11 @@
|
||||
"{id:category}Motors": "Motors",
|
||||
"{id:category}Output": "Output",
|
||||
"{id:category}Screen": "Screen",
|
||||
"{id:category}Sensors": "Sensors",
|
||||
"{id:category}Serial": "Serial",
|
||||
"{id:group}Buttons": "Buttons",
|
||||
"{id:group}Gyro Sensor": "Gyro Sensor",
|
||||
"{id:group}Chassis": "Chassis",
|
||||
"{id:group}Light": "Light",
|
||||
"{id:group}Motors": "Motors",
|
||||
"{id:group}Screen": "Screen"
|
||||
"{id:group}Motion": "Motion",
|
||||
"{id:group}Screen": "Screen",
|
||||
"{id:group}Sensors": "Sensors"
|
||||
}
|
@ -85,7 +85,7 @@ namespace brick {
|
||||
* @param button the button to query the request
|
||||
*/
|
||||
//% help=input/button/is-pressed
|
||||
//% block="`icons.brickButtons` %button|is pressed"
|
||||
//% block="%button|is pressed"
|
||||
//% blockId=buttonIsPressed
|
||||
//% parts="brick"
|
||||
//% blockNamespace=brick
|
||||
@ -100,7 +100,7 @@ namespace brick {
|
||||
* @param button the button to query the request
|
||||
*/
|
||||
//% help=input/button/was-pressed
|
||||
//% block="`icons.brickButtons` %button|was pressed"
|
||||
//% block="%button|was pressed"
|
||||
//% blockId=buttonWasPressed
|
||||
//% parts="brick"
|
||||
//% blockNamespace=brick
|
||||
@ -119,7 +119,7 @@ namespace brick {
|
||||
* @param body code to run when the event is raised
|
||||
*/
|
||||
//% help=input/button/on-event
|
||||
//% blockId=buttonEvent block="on `icons.brickButtons` %button|%event"
|
||||
//% blockId=buttonEvent block="on %button|%event"
|
||||
//% parts="brick"
|
||||
//% blockNamespace=brick
|
||||
//% weight=99 blockGap=8
|
||||
@ -132,13 +132,13 @@ namespace brick {
|
||||
* Waits until the event is raised
|
||||
* @param ev the event to wait for
|
||||
*/
|
||||
//% help=input/button/wait-until
|
||||
//% blockId=buttonWaitUntil block="wait until `icons.brickButtons` %button|%event"
|
||||
//% help=input/button/pause-until
|
||||
//% blockId=buttonWaitUntil block="pause until %button|%event"
|
||||
//% parts="brick"
|
||||
//% blockNamespace=brick
|
||||
//% weight=98 blockGap=8
|
||||
//% group="Buttons"
|
||||
waitUntil(ev: ButtonEvent) {
|
||||
pauseUntil(ev: ButtonEvent) {
|
||||
control.waitForEvent(this._id, ev);
|
||||
}
|
||||
}
|
||||
@ -248,9 +248,9 @@ namespace brick {
|
||||
* Set lights.
|
||||
* @param pattern the lights pattern to use.
|
||||
*/
|
||||
//% blockId=setLights block="set `icons.brickButtons` to %pattern=led_pattern"
|
||||
//% weight=100 group="Light"
|
||||
export function setStatusLight(pattern: number): void {
|
||||
//% blockId=setLights block="set light to %pattern=led_pattern"
|
||||
//% weight=100 group="Buttons"
|
||||
export function setLight(pattern: number): void {
|
||||
if (currPattern === pattern)
|
||||
return
|
||||
currPattern = pattern
|
||||
|
106
libs/core/console.ts
Normal file
@ -0,0 +1,106 @@
|
||||
/// <reference no-default-lib="true"/>
|
||||
|
||||
/**
|
||||
* Reading and writing data to the console output.
|
||||
*/
|
||||
//% weight=12 color=#002050 icon="\uf120"
|
||||
//% advanced=true
|
||||
namespace console {
|
||||
type Listener = (text: string) => void;
|
||||
|
||||
const listeners: Listener[] = [
|
||||
(text: string) => serial.writeLine(text)
|
||||
];
|
||||
|
||||
/**
|
||||
* Write a line of text to the console output.
|
||||
* @param value to send
|
||||
*/
|
||||
//% weight=90
|
||||
//% help=console/log blockGap=8
|
||||
//% blockId=console_log block="console|log %text"
|
||||
export function log(text: string): void {
|
||||
for (let i = 0; i < listeners.length; ++i)
|
||||
listeners[i](text);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write a name:value pair as a line of text to the console output.
|
||||
* @param name name of the value stream, eg: "x"
|
||||
* @param value to write
|
||||
*/
|
||||
//% weight=88 blockGap=8
|
||||
//% help=console/log-value
|
||||
//% blockId=console_log_value block="console|log value %name|= %value"
|
||||
export function logValue(name: string, value: number): void {
|
||||
log(`${name}: ${value}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a listener for the log messages
|
||||
* @param listener
|
||||
*/
|
||||
//%
|
||||
export function addListener(listener: (text: string) => void) {
|
||||
if (!listener) return;
|
||||
listeners.push(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends the log messages to the brick screen and uses the brick up and down buttons to scroll.
|
||||
*/
|
||||
//% blockId=logsendtostreen block="send console to screen"
|
||||
//% weight=1
|
||||
export function sendToScreen(): void {
|
||||
console.screen.attach();
|
||||
}
|
||||
}
|
||||
|
||||
namespace console.screen {
|
||||
const maxLines = 100;
|
||||
const screenLines = 8;
|
||||
let lines: string[];
|
||||
let scrollPosition = 0;
|
||||
|
||||
export function attach() {
|
||||
if (!lines) {
|
||||
lines = [];
|
||||
console.addListener(log);
|
||||
brick.buttonUp.onEvent(ButtonEvent.Click, () => scroll(-1))
|
||||
brick.buttonDown.onEvent(ButtonEvent.Click, () => scroll(1))
|
||||
}
|
||||
}
|
||||
|
||||
function printLog() {
|
||||
brick.clearScreen()
|
||||
if (!lines) return;
|
||||
for (let i = 0; i < screenLines; ++i) {
|
||||
const line = lines[i + scrollPosition];
|
||||
if (line)
|
||||
brick.print(line, 0, 4 + i * brick.LINE_HEIGHT)
|
||||
}
|
||||
}
|
||||
|
||||
function scroll(pos: number) {
|
||||
if (!pos) return;
|
||||
|
||||
scrollPosition += pos >> 0;
|
||||
if (scrollPosition >= lines.length) scrollPosition = lines.length - 1;
|
||||
if (scrollPosition < 0) scrollPosition = 0;
|
||||
printLog();
|
||||
}
|
||||
|
||||
function log(msg: string): void {
|
||||
lines.push(msg);
|
||||
if (lines.length + 5 > maxLines) {
|
||||
lines.splice(0, maxLines - lines.length);
|
||||
scrollPosition = Math.min(scrollPosition, lines.length - 1)
|
||||
}
|
||||
// move down scroll once it gets large than the screen
|
||||
if (lines.length > screenLines
|
||||
&& lines.length >= scrollPosition + screenLines) {
|
||||
scrollPosition++;
|
||||
}
|
||||
printLog();
|
||||
}
|
||||
}
|
@ -1,260 +1,260 @@
|
||||
namespace images {
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const expressionsBigSmile = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const expressionsHeartLarge = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const expressionsHeartSmall = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const expressionsMouth1open = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const expressionsMouth1shut = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const expressionsMouth2open = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const expressionsMouth2shut = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const expressionsSad = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const expressionsSick = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const expressionsSmile = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const expressionsSwearing = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const expressionsTalking = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const expressionsWink = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const expressionsZzz = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesAngry = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesAwake = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesBlackEye = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesBottomLeft = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesBottomRight = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesCrazy1 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesCrazy2 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesDisappointed = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesDizzy = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesDown = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesEvil = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesHurt = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesKnockedOut = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesLove = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesMiddleLeft = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesMiddleRight = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesNeutral = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesNuclear = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesPinchLeft = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesPinchMiddle = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesPinchRight = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesSleeping = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesTear = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesTiredLeft = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesTiredMiddle = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesTiredRight = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesToxic = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesUp = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const eyesWinking = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const informationAccept = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const informationBackward = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const informationDecline = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const informationForward = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const informationLeft = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const informationNoGo = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const informationQuestionMark = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const informationRight = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const informationStop1 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const informationStop2 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const informationThumbsDown = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const informationThumbsUp = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const informationWarning = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const legoColorSensor = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const legoEv3icon = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const legoEv3 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const legoGyroSensor = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const legoIrBeacon = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const legoIrSensor = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const legoLego = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const legoLargeMotor = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const legoMindstorms = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const legoMediumMotor = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const legoSoundSensor = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const legoTempSensor = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const legoTouchSensor = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const legoUsSensor = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const objectsBomb = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const objectsBoom = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const objectsFire = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const objectsFlowers = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const objectsForest = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const objectsLightOff = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const objectsLightOn = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const objectsLightning = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const objectsNight = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const objectsPirate = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const objectsSnow = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const objectsTarget = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressBar0 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressBar1 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressBar2 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressBar3 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressBar4 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressDial0 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressDial1 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressDial2 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressDial3 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressDial4 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressDots0 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressDots1 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressDots2 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressDots3 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressHourglass0 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressHourglass1 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressHourglass2 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressTimer0 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressTimer1 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressTimer2 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressTimer3 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressTimer4 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressWaterLevel0 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressWaterLevel1 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressWaterLevel2 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const progressWaterLevel3 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemAccept1 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemAccept2 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemAlert = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemBox = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemBusy0 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemBusy1 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemDecline1 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemDecline2 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemDotEmpty = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemDotFull = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemEv3small = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemPlay = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemSlider0 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemSlider1 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemSlider2 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemSlider3 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemSlider4 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemSlider5 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemSlider6 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemSlider7 = screen.unpackPNG(hex``);
|
||||
//% fixedInstance jres
|
||||
//% fixedInstance jres blockIdentity=brick._imagePicker
|
||||
export const systemSlider8 = screen.unpackPNG(hex``);
|
||||
}
|
||||
|
11
libs/core/input.cpp
Normal file
@ -0,0 +1,11 @@
|
||||
#include "pxt.h"
|
||||
|
||||
namespace sensors {
|
||||
|
||||
/**
|
||||
* Mark a sensor as used
|
||||
*/
|
||||
//%
|
||||
void __sensorUsed(int port, int type) {
|
||||
}
|
||||
}
|
@ -13,6 +13,7 @@ namespace sensors.internal {
|
||||
|
||||
control.runInBackground(() => {
|
||||
let prev = query()
|
||||
changeHandler(prev, prev)
|
||||
while (true) {
|
||||
loops.pause(periodMs)
|
||||
let curr = query()
|
||||
@ -73,6 +74,11 @@ namespace sensors.internal {
|
||||
|
||||
}
|
||||
|
||||
export function getActiveSensors(): Sensor[] {
|
||||
init();
|
||||
return sensorInfos.filter(si => si.sensor && si.sensor.isActive()).map(si => si.sensor);
|
||||
}
|
||||
|
||||
function readUartInfo(port: number, mode: number) {
|
||||
let buf = output.createBuffer(UartCtlOff.Size)
|
||||
buf[UartCtlOff.Port] = port
|
||||
@ -141,6 +147,11 @@ namespace sensors.internal {
|
||||
this._port = port_ - 1
|
||||
init()
|
||||
sensorInfos[this._port].sensors.push(this)
|
||||
this.markUsed();
|
||||
}
|
||||
|
||||
markUsed() {
|
||||
sensors.__sensorUsed(this._port, this._deviceType());
|
||||
}
|
||||
|
||||
_activated() { }
|
||||
@ -190,7 +201,7 @@ namespace sensors.internal {
|
||||
private lowThreshold: number;
|
||||
private highThreshold: number;
|
||||
private level: number;
|
||||
private state: ThresholdState;
|
||||
public state: ThresholdState;
|
||||
|
||||
constructor(id: number, min = 0, max = 100, lowThreshold = 20, highThreshold = 80) {
|
||||
this.id = id;
|
||||
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 6.1 KiB |
BIN
libs/core/jres/icons/port1-icon.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
libs/core/jres/icons/port2-icon.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
libs/core/jres/icons/port3-icon.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
libs/core/jres/icons/port4-icon.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
libs/core/jres/icons/portA-icon.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
libs/core/jres/icons/portB-icon.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
libs/core/jres/icons/portC-icon.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
libs/core/jres/icons/portD-icon.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.6 KiB |
@ -13,14 +13,35 @@
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <malloc.h>
|
||||
|
||||
#define THREAD_DBG(...)
|
||||
|
||||
#define MALLOC_LIMIT (8 * 1024 * 1024)
|
||||
#define MALLOC_CHECK_PERIOD (1024 * 1024)
|
||||
|
||||
void *xmalloc(size_t sz) {
|
||||
static size_t allocBytes = 0;
|
||||
allocBytes += sz;
|
||||
if (allocBytes >= MALLOC_CHECK_PERIOD) {
|
||||
allocBytes = 0;
|
||||
auto info = mallinfo();
|
||||
DMESG("malloc used: %d kb", info.uordblks / 1024);
|
||||
if (info.uordblks > MALLOC_LIMIT) {
|
||||
target_panic(904);
|
||||
}
|
||||
}
|
||||
auto r = malloc(sz);
|
||||
if (r == NULL)
|
||||
target_panic(905); // shouldn't happen
|
||||
return r;
|
||||
}
|
||||
|
||||
void *operator new(size_t size) {
|
||||
return malloc(size);
|
||||
return xmalloc(size);
|
||||
}
|
||||
void *operator new[](size_t size) {
|
||||
return malloc(size);
|
||||
return xmalloc(size);
|
||||
}
|
||||
|
||||
void operator delete(void *p) {
|
||||
@ -200,10 +221,6 @@ int current_time_ms() {
|
||||
return currTime() - startTime;
|
||||
}
|
||||
|
||||
int getSerialNumber() {
|
||||
return 42; // TODO
|
||||
}
|
||||
|
||||
void disposeThread(Thread *t) {
|
||||
if (allThreads == t) {
|
||||
allThreads = t->next;
|
||||
@ -376,6 +393,10 @@ static void runPoller(Thread *thr) {
|
||||
// note that this is run without the user mutex held - it should not modify any state!
|
||||
TValue prev = pxt::runAction0(query);
|
||||
|
||||
startUser();
|
||||
pxt::runAction2(thr->act, prev, prev);
|
||||
stopUser();
|
||||
|
||||
while (true) {
|
||||
sleep_core_us(us);
|
||||
if (paniced)
|
||||
|
@ -1,9 +1 @@
|
||||
//% weight=100
|
||||
namespace brick {
|
||||
|
||||
}
|
||||
|
||||
//% color="#B4009E" weight=98 icon="\uf192"
|
||||
//% groups='["Ultrasonic Sensor", "Touch Sensor", "Color Sensor", "Infrared Sensor", "Remote Infrared Beacon", "Gyro Sensor"]'
|
||||
namespace sensors {
|
||||
}
|
||||
|
@ -20,3 +20,13 @@ void target_init() {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
namespace motors {
|
||||
|
||||
/**
|
||||
* Mark a motor as used
|
||||
*/
|
||||
//%
|
||||
void __motorUsed(int port, bool large) {
|
||||
}
|
||||
}
|
@ -7,6 +7,14 @@ enum Output {
|
||||
C = 0x04,
|
||||
//% block="D"
|
||||
D = 0x08,
|
||||
//% block="B+C"
|
||||
BC = Output.B | Output.C,
|
||||
//% block="A+B"
|
||||
AB = Output.A | Output.B,
|
||||
//% block="C+D"
|
||||
CD = Output.C | Output.D,
|
||||
//% block="A+D"
|
||||
AD = Output.B | Output.C,
|
||||
//% block="All"
|
||||
ALL = 0x0f
|
||||
}
|
||||
@ -17,6 +25,15 @@ enum OutputType {
|
||||
MiniTacho = 8,
|
||||
}
|
||||
|
||||
enum MoveUnit {
|
||||
//% block="rotations"
|
||||
Rotations,
|
||||
//% block="degrees"
|
||||
Degrees,
|
||||
//% block="milliseconds"
|
||||
MilliSeconds
|
||||
}
|
||||
|
||||
namespace motors {
|
||||
let pwmMM: MMap
|
||||
let motorMM: MMap
|
||||
@ -34,216 +51,493 @@ namespace motors {
|
||||
pwmMM = control.mmap("/dev/lms_pwm", 0, 0)
|
||||
if (!pwmMM) control.fail("no PWM file")
|
||||
motorMM = control.mmap("/dev/lms_motor", MotorDataOff.Size * DAL.NUM_OUTPUTS, 0)
|
||||
if (!motorMM) control.fail("no motor file")
|
||||
|
||||
resetMotors()
|
||||
resetAllMotors()
|
||||
|
||||
let buf = output.createBuffer(1)
|
||||
const buf = output.createBuffer(1)
|
||||
buf[0] = DAL.opProgramStart
|
||||
writePWM(buf)
|
||||
}
|
||||
|
||||
function writePWM(buf: Buffer): void {
|
||||
/**
|
||||
* Sends a command to the motors device
|
||||
* @param buf the command buffer
|
||||
*/
|
||||
//%
|
||||
export function writePWM(buf: Buffer): void {
|
||||
init()
|
||||
pwmMM.write(buf)
|
||||
}
|
||||
|
||||
function readPWM(buf: Buffer): void {
|
||||
/**
|
||||
* Sends and receives a message from the motors device
|
||||
* @param buf message buffer
|
||||
*/
|
||||
//%
|
||||
export function readPWM(buf: Buffer): void {
|
||||
init()
|
||||
pwmMM.read(buf);
|
||||
}
|
||||
|
||||
function mkCmd(out: Output, cmd: number, addSize: number) {
|
||||
/**
|
||||
* Allocates a message buffer
|
||||
* @param out ports
|
||||
* @param cmd command id
|
||||
* @param addSize required additional bytes
|
||||
*/
|
||||
//%
|
||||
export function mkCmd(out: Output, cmd: number, addSize: number) {
|
||||
const b = output.createBuffer(2 + addSize)
|
||||
b.setNumber(NumberFormat.UInt8LE, 0, cmd)
|
||||
b.setNumber(NumberFormat.UInt8LE, 1, out)
|
||||
return b
|
||||
}
|
||||
|
||||
function resetMotors() {
|
||||
reset(Output.ALL)
|
||||
function outputToName(out: Output): string {
|
||||
let r = "";
|
||||
for (let i = 0; i < DAL.NUM_OUTPUTS; ++i) {
|
||||
if (out & (1 << i)) {
|
||||
if (r.length > 0) r += "+";
|
||||
r += "ABCD"[i];
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops all motors
|
||||
*/
|
||||
//% blockId=motorStopAll block="stop all `icons.motorLarge`"
|
||||
//% weight=10 group="Motors" blockGap=8
|
||||
//% blockId=motorStopAll block="stop all motors"
|
||||
//% weight=97
|
||||
//% group="Motion"
|
||||
export function stopAllMotors() {
|
||||
const b = mkCmd(Output.ALL, DAL.opOutputStop, 0)
|
||||
writePWM(b)
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets all motors
|
||||
*/
|
||||
//% group="Motion"
|
||||
export function resetAllMotors() {
|
||||
reset(Output.ALL)
|
||||
}
|
||||
|
||||
//% fixedInstances
|
||||
export class Motor extends control.Component {
|
||||
private port: Output;
|
||||
private large: boolean;
|
||||
private brake: boolean;
|
||||
export class MotorBase extends control.Component {
|
||||
protected _port: Output;
|
||||
protected _portName: string;
|
||||
protected _brake: boolean;
|
||||
private _initialized: boolean;
|
||||
private _init: () => void;
|
||||
private _setSpeed: (speed: number) => void;
|
||||
private _move: (steps: boolean, stepsOrTime: number, speed: number) => void;
|
||||
|
||||
constructor(port: Output, large: boolean) {
|
||||
constructor(port: Output, init: () => void, setSpeed: (speed: number) => void, move: (steps: boolean, stepsOrTime: number, speed: number) => void) {
|
||||
super();
|
||||
this.port = port;
|
||||
this.large = large;
|
||||
this.brake = false;
|
||||
this._port = port;
|
||||
this._portName = outputToName(this._port);
|
||||
this._brake = false;
|
||||
this._initialized = false;
|
||||
this._init = init;
|
||||
this._setSpeed = setSpeed;
|
||||
this._move = move;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the motor power level from ``-100`` to ``100``.
|
||||
* @param motor the output connection that the motor is connected to
|
||||
* @param power the power from ``100`` full forward to ``-100`` full backward, eg: 50
|
||||
* Lazy initialization code
|
||||
*/
|
||||
//% blockId=motorSetPower block="power `icons.motorLarge` %motor|to %power|%"
|
||||
//% weight=99 group="Motors" blockGap=8
|
||||
//% power.min=-100 power.max=100
|
||||
power(power: number) {
|
||||
power = Math.clamp(-100, 100, power >> 0);
|
||||
|
||||
// per LEGO: call it power, use speed
|
||||
const b = mkCmd(this.port, DAL.opOutputSpeed, 1)
|
||||
b.setNumber(NumberFormat.Int8LE, 2, power)
|
||||
writePWM(b)
|
||||
if (power) {
|
||||
const b = mkCmd(this.port, DAL.opOutputStart, 0)
|
||||
writePWM(b);
|
||||
} else {
|
||||
this.stop();
|
||||
protected init() {
|
||||
if (!this._initialized) {
|
||||
this._initialized = true;
|
||||
this._init();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Moves the motor by a number of degrees
|
||||
* @param degrees the angle to turn the motor
|
||||
* @param angle the degrees to rotate, eg: 360
|
||||
* @param power the power from ``100`` full forward to ``-100`` full backward, eg: 50
|
||||
*/
|
||||
//% blockId=motorMove block="move `icons.motorLarge` %motor|by %angle|degrees at %power|%"
|
||||
//% weight=98 group="Motors" blockGap=8
|
||||
//% power.min=-100 power.max=100
|
||||
move(angle: number, power: number) {
|
||||
angle = angle >> 0;
|
||||
power = Math.clamp(-100, 100, power >> 0);
|
||||
|
||||
step(this.port, {
|
||||
speed: power,
|
||||
step1: 0,
|
||||
step2: angle,
|
||||
step3: 0,
|
||||
useSteps: true,
|
||||
useBrake: this.brake
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops the motor
|
||||
*/
|
||||
//% blockId=motorStop block="stop `icons.motorLarge` %motor"
|
||||
//% weight=97 group="Motors"
|
||||
stop() {
|
||||
const b = mkCmd(this.port, DAL.opOutputStop, 1)
|
||||
b.setNumber(NumberFormat.UInt8LE, 2, this.brake ? 1 : 0)
|
||||
writePWM(b);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the automatic brake on or off when the motor is off
|
||||
* @param brake a value indicating if the motor should break when off
|
||||
*/
|
||||
//% blockId=outputMotorSetBrakeMode block="set `icons.motorLarge` %motor|brake %brake"
|
||||
//% blockId=outputMotorSetBrakeMode block="set %motor|brake %brake"
|
||||
//% brake.fieldEditor=toggleonoff
|
||||
//% weight=60 group="Motors" blockGap=8
|
||||
//% weight=60 blockGap=8
|
||||
//% group="Motion"
|
||||
setBrake(brake: boolean) {
|
||||
this.brake = brake;
|
||||
this.init();
|
||||
this._brake = brake;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverses the motor polarity
|
||||
*/
|
||||
//% blockId=motorSetReversed block="set `icons.motorLarge` %motor|reversed %reversed"
|
||||
//% blockId=motorSetReversed block="set %motor|reversed %reversed"
|
||||
//% reversed.fieldEditor=toggleonoff
|
||||
//% weight=59 group="Motors"
|
||||
//% weight=59
|
||||
//% group="Motion"
|
||||
setReversed(reversed: boolean) {
|
||||
const b = mkCmd(this.port, DAL.opOutputPolarity, 1)
|
||||
b.setNumber(NumberFormat.Int8LE, 2, reversed ? -1 : 1);
|
||||
this.init();
|
||||
const b = mkCmd(this._port, DAL.opOutputPolarity, 1)
|
||||
b.setNumber(NumberFormat.Int8LE, 2, reversed ? 0 : 1);
|
||||
writePWM(b)
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops the motor(s).
|
||||
*/
|
||||
//%
|
||||
stop() {
|
||||
this.init();
|
||||
stop(this._port, this._brake);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets the motor(s).
|
||||
*/
|
||||
//%
|
||||
reset() {
|
||||
this.init();
|
||||
reset(this._port);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the speed of the motor.
|
||||
* @param speed the speed from ``100`` full forward to ``-100`` full backward, eg: 50
|
||||
*/
|
||||
//% blockId=motorSetSpeed block="set speed of %motor|to %speed|%"
|
||||
//% on.fieldEditor=toggleonoff
|
||||
//% weight=99 blockGap=8
|
||||
//% speed.min=-100 speed.max=100
|
||||
//% group="Motion"
|
||||
setSpeed(speed: number) {
|
||||
this.init();
|
||||
speed = Math.clamp(-100, 100, speed >> 0);
|
||||
if (!speed) // always stop
|
||||
this.stop();
|
||||
else
|
||||
this._setSpeed(speed);
|
||||
}
|
||||
|
||||
/**
|
||||
* Moves the motor by a number of rotations, degress or seconds
|
||||
* @param value the move quantity, eg: 2
|
||||
* @param unit the meaning of the value
|
||||
* @param speed the speed from ``100`` full forward to ``-100`` full backward, eg: 50
|
||||
*/
|
||||
//% blockId=motorMove block="move %motor|for %value|%unit|at %speed|%"
|
||||
//% weight=98 blockGap=8
|
||||
//% speed.min=-100 speed.max=100
|
||||
//% group="Motion"
|
||||
move(value: number, unit: MoveUnit, speed: number) {
|
||||
this.init();
|
||||
speed = Math.clamp(-100, 100, speed >> 0);
|
||||
if (!speed) {
|
||||
this.stop();
|
||||
return;
|
||||
}
|
||||
let useSteps: boolean;
|
||||
let stepsOrTime: number;
|
||||
switch (unit) {
|
||||
case MoveUnit.Rotations:
|
||||
stepsOrTime = (value * 360) >> 0;
|
||||
useSteps = true;
|
||||
break;
|
||||
case MoveUnit.Degrees:
|
||||
stepsOrTime = value >> 0;
|
||||
useSteps = true;
|
||||
break;
|
||||
default:
|
||||
stepsOrTime = value;
|
||||
useSteps = false;
|
||||
break;
|
||||
}
|
||||
|
||||
this._move(useSteps, stepsOrTime, speed);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a value indicating if the motor is still running a previous command.
|
||||
*/
|
||||
//%
|
||||
isReady(): boolean {
|
||||
this.init();
|
||||
const buf = mkCmd(this._port, DAL.opOutputTest, 2);
|
||||
readPWM(buf)
|
||||
const flags = buf.getNumber(NumberFormat.UInt8LE, 2);
|
||||
// TODO: FIX with ~ support
|
||||
for(let i = 0; i < DAL.NUM_OUTPUTS; ++i) {
|
||||
const flag = 1 << i;
|
||||
if ((this._port & flag) && (flags & flag))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Pauses the execution until the previous command finished.
|
||||
* @param timeOut optional maximum pausing time in milliseconds
|
||||
*/
|
||||
//% blockId=motorPauseUntilRead block="%motor|pause until ready"
|
||||
//% group="Motion"
|
||||
pauseUntilReady(timeOut?: number) {
|
||||
pauseUntil(() => this.isReady(), timeOut);
|
||||
}
|
||||
}
|
||||
|
||||
//% fixedInstances
|
||||
export class Motor extends MotorBase {
|
||||
private _large: boolean;
|
||||
|
||||
constructor(port: Output, large: boolean) {
|
||||
super(port, () => this.__init(), (speed) => this.__setSpeed(speed), (steps, stepsOrTime, speed) => this.__move(steps, stepsOrTime, speed));
|
||||
this._large = large;
|
||||
this.markUsed();
|
||||
}
|
||||
|
||||
markUsed() {
|
||||
motors.__motorUsed(this._port, this._large);
|
||||
}
|
||||
|
||||
private __init() {
|
||||
// specify motor size on this port
|
||||
const b = mkCmd(outOffset(this._port), DAL.opOutputSetType, 1)
|
||||
b.setNumber(NumberFormat.Int8LE, 2, this._large ? 0x07 : 0x08)
|
||||
writePWM(b)
|
||||
}
|
||||
|
||||
private __setSpeed(speed: number) {
|
||||
const b = mkCmd(this._port, DAL.opOutputSpeed, 1)
|
||||
b.setNumber(NumberFormat.Int8LE, 2, speed)
|
||||
writePWM(b)
|
||||
if (speed) {
|
||||
writePWM(mkCmd(this._port, DAL.opOutputStart, 0))
|
||||
}
|
||||
}
|
||||
|
||||
private __move(steps: boolean, stepsOrTime: number, speed: number) {
|
||||
step(this._port, {
|
||||
useSteps: steps,
|
||||
step1: 0,
|
||||
step2: stepsOrTime,
|
||||
step3: 0,
|
||||
speed: speed,
|
||||
useBrake: this._brake
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets motor actual speed.
|
||||
* @param motor the port which connects to the motor
|
||||
*/
|
||||
//% blockId=motorSpeed block="`icons.motorLarge` %motor|speed"
|
||||
//% weight=72 group="Motors" blockGap=8
|
||||
//% blockId=motorSpeed block="%motor|speed"
|
||||
//% weight=72 blockGap=8
|
||||
//% group="Sensors"
|
||||
speed(): number {
|
||||
return getMotorData(this.port).actualSpeed;
|
||||
this.init();
|
||||
return getMotorData(this._port).actualSpeed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets motor step count.
|
||||
* Gets motor ration angle.
|
||||
* @param motor the port which connects to the motor
|
||||
*/
|
||||
//% blockId=motorCount block="`icons.motorLarge` %motor|count"
|
||||
//% weight=71 group="Motors" blockGap=8
|
||||
count(): number {
|
||||
return getMotorData(this.port).count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets motor tacho count.
|
||||
* @param motor the port which connects to the motor
|
||||
*/
|
||||
//% blockId=motorTachoCount block="`icons.motorLarge` %motor|tacho count"
|
||||
//% weight=70 group="Motors"
|
||||
tachoCount(): number {
|
||||
return getMotorData(this.port).tachoCount;
|
||||
//% blockId=motorTachoCount block="%motor|angle"
|
||||
//% weight=70
|
||||
//% group="Sensors"
|
||||
angle(): number {
|
||||
this.init();
|
||||
return getMotorData(this._port).count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears the motor count
|
||||
*/
|
||||
//% group="Motion"
|
||||
clearCount() {
|
||||
const b = mkCmd(this.port, DAL.opOutputClearCount, 0)
|
||||
this.init();
|
||||
const b = mkCmd(this._port, DAL.opOutputClearCount, 0)
|
||||
writePWM(b)
|
||||
for (let i = 0; i < DAL.NUM_OUTPUTS; ++i) {
|
||||
if (this.port & (1 << i)) {
|
||||
if (this._port & (1 << i)) {
|
||||
motorMM.setNumber(NumberFormat.Int32LE, i * MotorDataOff.Size + MotorDataOff.TachoSensor, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets the motor.
|
||||
* Returns the status of the motor
|
||||
*/
|
||||
reset() {
|
||||
reset(this.port);
|
||||
//%
|
||||
toString(): string {
|
||||
return `${this._large ? "" : "M"}${this._portName} ${this.speed()}% ${this.angle()}>`;
|
||||
}
|
||||
}
|
||||
|
||||
//% whenUsed fixedInstance block="large A"
|
||||
export const largeMotorA = new Motor(Output.A, true);
|
||||
export const largeA = new Motor(Output.A, true);
|
||||
|
||||
//% whenUsed fixedInstance block="large B"
|
||||
export const largeMotorB = new Motor(Output.B, true);
|
||||
export const largeB = new Motor(Output.B, true);
|
||||
|
||||
//% whenUsed fixedInstance block="large C"
|
||||
export const largeMotorC = new Motor(Output.C, true);
|
||||
export const largeC = new Motor(Output.C, true);
|
||||
|
||||
//% whenUsed fixedInstance block="large D"
|
||||
export const largeMotorD = new Motor(Output.D, true);
|
||||
export const largeD = new Motor(Output.D, true);
|
||||
|
||||
//% whenUsed fixedInstance block="medium A"
|
||||
export const mediumMotorA = new Motor(Output.A, false);
|
||||
export const mediumA = new Motor(Output.A, false);
|
||||
|
||||
//% whenUsed fixedInstance block="medium B"
|
||||
export const mediumMotorB = new Motor(Output.B, false);
|
||||
export const mediumB = new Motor(Output.B, false);
|
||||
|
||||
//% whenUsed fixedInstance block="medium C"
|
||||
export const mediumMotorC = new Motor(Output.C, false);
|
||||
export const mediumC = new Motor(Output.C, false);
|
||||
|
||||
//% whenUsed fixedInstance block="medium D"
|
||||
export const mediumMotorD = new Motor(Output.D, false);
|
||||
export const mediumD = new Motor(Output.D, false);
|
||||
|
||||
//% fixedInstances
|
||||
export class SynchedMotorPair extends MotorBase {
|
||||
|
||||
constructor(ports: Output) {
|
||||
super(ports, () => this.__init(), (speed) => this.__setSpeed(speed), (steps, stepsOrTime, speed) => this.__move(steps, stepsOrTime, speed));
|
||||
this.markUsed();
|
||||
}
|
||||
|
||||
markUsed() {
|
||||
motors.__motorUsed(this._port, true);
|
||||
}
|
||||
|
||||
private __init() {
|
||||
for (let i = 0; i < DAL.NUM_OUTPUTS; ++i) {
|
||||
if (this._port & (1 << i)) {
|
||||
const b = mkCmd(outOffset(1 << i), DAL.opOutputSetType, 1)
|
||||
b.setNumber(NumberFormat.Int8LE, 2, 0x07) // large motor
|
||||
writePWM(b)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private __setSpeed(speed: number) {
|
||||
syncMotors(this._port, {
|
||||
speed: speed,
|
||||
turnRatio: 0,
|
||||
useBrake: !!this._brake
|
||||
})
|
||||
}
|
||||
|
||||
private __move(steps: boolean, stepsOrTime: number, speed: number) {
|
||||
syncMotors(this._port, {
|
||||
useSteps: steps,
|
||||
speed: speed,
|
||||
turnRatio: 100, // same speed
|
||||
stepsOrTime: stepsOrTime,
|
||||
useBrake: this._brake
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Turns the motor and the follower motor by a number of rotations
|
||||
* @param value the move quantity, eg: 2
|
||||
* @param unit the meaning of the value
|
||||
* @param steering the ratio of power sent to the follower motor, from ``-100`` to ``100``
|
||||
* @param speed the speed from ``100`` full forward to ``-100`` full backward, eg: 50
|
||||
*/
|
||||
//% blockId=motorPairTurn block="steer %chassis|%steering|%|at speed %speed|%|by %value|%unit"
|
||||
//% weight=9 blockGap=8
|
||||
//% steering.min=-100 steering=100
|
||||
//% inlineInputMode=inline
|
||||
//% group="Chassis"
|
||||
steer(steering: number, speed: number, value: number, unit: MoveUnit) {
|
||||
this.init();
|
||||
speed = Math.clamp(-100, 100, speed >> 0);
|
||||
if (!speed) {
|
||||
stop(this._port, this._brake);
|
||||
return;
|
||||
}
|
||||
|
||||
const turnRatio = Math.clamp(-200, 200, steering + 100 >> 0);
|
||||
let useSteps: boolean;
|
||||
let stepsOrTime: number;
|
||||
switch (unit) {
|
||||
case MoveUnit.Rotations:
|
||||
stepsOrTime = (value * 360) >> 0;
|
||||
useSteps = true;
|
||||
break;
|
||||
case MoveUnit.Degrees:
|
||||
stepsOrTime = value >> 0;
|
||||
useSteps = true;
|
||||
break;
|
||||
default:
|
||||
stepsOrTime = value;
|
||||
useSteps = false;
|
||||
break;
|
||||
}
|
||||
|
||||
syncMotors(this._port, {
|
||||
useSteps: useSteps,
|
||||
speed: speed,
|
||||
turnRatio: turnRatio,
|
||||
stepsOrTime: stepsOrTime,
|
||||
useBrake: this._brake
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* The Move Tank block can make a robot drive forward, backward, turn, or stop.
|
||||
* Use the Move Tank block for robot vehicles that have two Large Motors,
|
||||
* with one motor driving the left side of the vehicle and the other the right side.
|
||||
* You can make the two motors go at different speeds or in different directions
|
||||
* to make your robot turn.
|
||||
* @param value the amount of movement, eg: 2
|
||||
* @param unit
|
||||
* @param speedLeft the speed on the left motor, eg: 50
|
||||
* @param speedRight the speed on the right motor, eg: 50
|
||||
*/
|
||||
//% blockId=motorPairTank block="tank %chassis|left %speedLeft|%|right %speedRight|%|by %value|%unit"
|
||||
//% weight=9 blockGap=8
|
||||
//% speedLeft.min=-100 speedLeft=100
|
||||
//% speedRight.min=-100 speedRight=100
|
||||
//% inlineInputMode=inline
|
||||
//% group="Chassis"
|
||||
tank(speedLeft: number, speedRight: number, value: number, unit: MoveUnit) {
|
||||
speedLeft = Math.clamp(speedLeft >> 0, -100, 100);
|
||||
speedRight = Math.clamp(speedRight >> 0, -100, 100);
|
||||
const steering = (speedRight * 100 / speedLeft) >> 0;
|
||||
this.steer(speedLeft, steering, value, unit);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name(s) of the motor
|
||||
*/
|
||||
//%
|
||||
toString(): string {
|
||||
let r = outputToName(this._port);
|
||||
for (let i = 0; i < DAL.NUM_OUTPUTS; ++i) {
|
||||
if (this._port & (1 << i)) {
|
||||
r += ` ${getMotorData(1 << i).actualSpeed}%`
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
//% whenUsed fixedInstance block="large B+C"
|
||||
export const largeBC = new SynchedMotorPair(Output.BC);
|
||||
|
||||
//% whenUsed fixedInstance block="large A+D"
|
||||
export const largeAD = new SynchedMotorPair(Output.AD);
|
||||
|
||||
//% whenUsed fixedInstance block="large A+B"
|
||||
export const largeAB = new SynchedMotorPair(Output.AB);
|
||||
|
||||
//% whenUsed fixedInstance block="large C+D"
|
||||
export const largeCD = new SynchedMotorPair(Output.CD);
|
||||
|
||||
function reset(out: Output) {
|
||||
let b = mkCmd(out, DAL.opOutputReset, 0)
|
||||
writePWM(b)
|
||||
writePWM(mkCmd(out, DAL.opOutputReset, 0))
|
||||
writePWM(mkCmd(out, DAL.opOutputClearCount, 0))
|
||||
}
|
||||
|
||||
function outOffset(out: Output) {
|
||||
@ -254,7 +548,7 @@ namespace motors {
|
||||
return 0
|
||||
}
|
||||
|
||||
interface MotorData {
|
||||
export interface MotorData {
|
||||
actualSpeed: number; // -100..+100
|
||||
tachoCount: number;
|
||||
count: number;
|
||||
@ -262,7 +556,8 @@ namespace motors {
|
||||
|
||||
// only a single output at a time
|
||||
function getMotorData(out: Output): MotorData {
|
||||
let buf = motorMM.slice(outOffset(out), MotorDataOff.Size)
|
||||
init()
|
||||
const buf = motorMM.slice(outOffset(out), MotorDataOff.Size)
|
||||
return {
|
||||
actualSpeed: buf.getNumber(NumberFormat.Int8LE, MotorDataOff.Speed),
|
||||
tachoCount: buf.getNumber(NumberFormat.Int32LE, MotorDataOff.TachoCounts),
|
||||
@ -270,6 +565,34 @@ namespace motors {
|
||||
}
|
||||
}
|
||||
|
||||
export function getAllMotorData(): MotorData[] {
|
||||
init();
|
||||
return [Output.A, Output.B, Output.C, Output.D].map(out => getMotorData(out));
|
||||
}
|
||||
|
||||
interface SyncOptions {
|
||||
useSteps?: boolean;
|
||||
speed: number;
|
||||
turnRatio: number;
|
||||
stepsOrTime?: number;
|
||||
useBrake?: boolean;
|
||||
}
|
||||
|
||||
function syncMotors(out: Output, opts: SyncOptions) {
|
||||
const cmd = opts.useSteps ? DAL.opOutputStepSync : DAL.opOutputTimeSync;
|
||||
const b = mkCmd(out, cmd, 11);
|
||||
const speed = Math.clamp(-100, 100, opts.speed);
|
||||
const turnRatio = Math.clamp(-200, 200, opts.turnRatio);
|
||||
|
||||
b.setNumber(NumberFormat.Int8LE, 2, speed)
|
||||
// note that b[3] is padding
|
||||
b.setNumber(NumberFormat.Int16LE, 4 + 4 * 0, turnRatio)
|
||||
// b[6], b[7] is padding
|
||||
b.setNumber(NumberFormat.Int32LE, 4 + 4 * 1, opts.stepsOrTime || 0)
|
||||
b.setNumber(NumberFormat.Int8LE, 4 + 4 * 2, opts.useBrake ? 1 : 0)
|
||||
writePWM(b)
|
||||
}
|
||||
|
||||
interface StepOptions {
|
||||
power?: number;
|
||||
speed?: number; // either speed or power has to be present
|
||||
@ -280,6 +603,17 @@ namespace motors {
|
||||
useBrake?: boolean;
|
||||
}
|
||||
|
||||
function start(out: Output) {
|
||||
const b = mkCmd(out, DAL.opOutputStart, 0)
|
||||
writePWM(b);
|
||||
}
|
||||
|
||||
function stop(out: Output, brake: boolean) {
|
||||
const b = mkCmd(out, DAL.opOutputStop, 1)
|
||||
b.setNumber(NumberFormat.UInt8LE, 2, brake ? 1 : 0)
|
||||
writePWM(b);
|
||||
}
|
||||
|
||||
function step(out: Output, opts: StepOptions) {
|
||||
let op = opts.useSteps ? DAL.opOutputStepSpeed : DAL.opOutputTimeSpeed
|
||||
let speed = opts.speed
|
||||
|
@ -88,7 +88,7 @@ Image unpackPNG(Buffer png) {
|
||||
uint32_t byteW = (hd.width + 7) >> 3;
|
||||
uint32_t expSize = (byteW + 1) * hd.height;
|
||||
unsigned long sz = expSize;
|
||||
uint8_t *tmp = (uint8_t *)malloc(sz);
|
||||
uint8_t *tmp = (uint8_t *)xmalloc(sz);
|
||||
int code = uncompress(tmp, &sz, png->data + sizeof(hd), hd.lenIDAT);
|
||||
if (code != 0) {
|
||||
DMESG("PNG: zlib failed: %d", code);
|
||||
|
@ -3,6 +3,8 @@
|
||||
|
||||
#include "pxtbase.h"
|
||||
|
||||
void *xmalloc(size_t sz);
|
||||
|
||||
namespace pxt {
|
||||
void raiseEvent(int id, int event);
|
||||
int allocateNotifyEvent();
|
||||
|
@ -10,6 +10,8 @@
|
||||
"linux.cpp",
|
||||
"mmap.cpp",
|
||||
"control.cpp",
|
||||
"console.ts",
|
||||
"serialnumber.cpp",
|
||||
"buttons.ts",
|
||||
"png.cpp",
|
||||
"screen.cpp",
|
||||
@ -17,8 +19,8 @@
|
||||
"output.cpp",
|
||||
"output.ts",
|
||||
"core.ts",
|
||||
"input.cpp",
|
||||
"input.ts",
|
||||
"gyro.ts",
|
||||
"shims.d.ts",
|
||||
"enums.d.ts",
|
||||
"dal.d.ts",
|
||||
|
@ -1,4 +1,6 @@
|
||||
namespace brick {
|
||||
export const LINE_HEIGHT = 12;
|
||||
|
||||
//% shim=screen::_setPixel
|
||||
function _setPixel(p0: uint32, p1: uint32, mode: Draw): void { }
|
||||
|
||||
@ -84,7 +86,7 @@ namespace brick {
|
||||
* @param x the starting position's x coordinate, eg: 0
|
||||
* @param y the starting position's x coordinate, eg: 0
|
||||
*/
|
||||
//% blockId=screen_setpixel block="`icons.brickDisplay` set pixel %on| at x: %x| y: %y"
|
||||
//% blockId=screen_setpixel block="set pixel %on| at x: %x| y: %y"
|
||||
//% weight=98 group="Screen"
|
||||
//% x.min=0 x.max=178 y.min=0 y.max=128 on.fieldEditor=toggleonoff
|
||||
export function setPixel(on: boolean, x: number, y: number) {
|
||||
@ -100,7 +102,7 @@ namespace brick {
|
||||
* @param x the starting position's x coordinate, eg: 0
|
||||
* @param y the starting position's x coordinate, eg: 0
|
||||
*/
|
||||
//% blockId=screen_print block="`icons.brickDisplay` print %text| at x: %x| y: %y"
|
||||
//% blockId=screen_print block="print %text| at x: %x| y: %y"
|
||||
//% weight=99 group="Screen" inlineInputMode="inline" blockGap=8
|
||||
//% x.min=0 x.max=178 y.min=0 y.max=128
|
||||
export function print(text: string, x: number, y: number, mode = Draw.Normal) {
|
||||
@ -137,7 +139,7 @@ namespace brick {
|
||||
* Shows an image on screen
|
||||
* @param image image to draw
|
||||
*/
|
||||
//% blockId=screen_show_image block="`icons.brickDisplay` show image %image=scren_image_picker"
|
||||
//% blockId=screen_show_image block="show image %image=screen_image_picker"
|
||||
//% weight=95 group="Screen" blockGap=8
|
||||
export function showImage(image: Image, delay: number = 400) {
|
||||
if (!image) return;
|
||||
@ -151,15 +153,24 @@ namespace brick {
|
||||
* An image
|
||||
* @param image the image
|
||||
*/
|
||||
//% blockId=scren_image_picker block="%image" shim=TD_ID
|
||||
//% blockId=screen_image_picker block="%image" shim=TD_ID
|
||||
//% image.fieldEditor="imagedropdown"
|
||||
//% image.fieldOptions.columns=6
|
||||
//% block.fieldOptions.hasSearchBar=true
|
||||
//% image.fieldOptions.hasSearchBar=true
|
||||
//% group="Screen" weight=0 blockHidden=1
|
||||
export function _imagePicker(image: Image): Image {
|
||||
return image;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears the screen
|
||||
*/
|
||||
//% blockId=screen_clear_screen block="clear screen"
|
||||
//% weight=94 group="Screen" blockGap=8
|
||||
export function clearScreen() {
|
||||
screen.clear();
|
||||
}
|
||||
|
||||
export function drawRect(x: number, y: number, w: number, h: number, mode = Draw.Normal) {
|
||||
x |= 0;
|
||||
y |= 0;
|
||||
@ -199,5 +210,29 @@ namespace brick {
|
||||
setLineCore(x, x1, y, mode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints the port states on the screen
|
||||
*/
|
||||
//% blockId=brickPrintPorts block="print ports"
|
||||
//% weight=1 group="Screen"
|
||||
export function printPorts() {
|
||||
clearScreen();
|
||||
|
||||
// motors
|
||||
const datas = motors.getAllMotorData();
|
||||
for(let i = 0; i < datas.length; ++i) {
|
||||
const x = i * 52;
|
||||
const data = datas[i];
|
||||
print(`${data.actualSpeed}%`, x, brick.LINE_HEIGHT)
|
||||
print(`${data.count}>`, x, 2 * brick.LINE_HEIGHT)
|
||||
}
|
||||
|
||||
// sensors
|
||||
const sis = sensors.internal.getActiveSensors();
|
||||
for(let i =0; i < sis.length; ++i) {
|
||||
const si = sis[i];
|
||||
const x = (si.port() - 1) * 52;
|
||||
print(`${si._query()}`, x, 9 * brick.LINE_HEIGHT)
|
||||
}
|
||||
}
|
||||
}
|
77
libs/core/serialnumber.cpp
Normal file
@ -0,0 +1,77 @@
|
||||
#include "pxt.h"
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define BTPROTO_HCI 1
|
||||
#define HCIGETDEVLIST _IOR('H', 210, int)
|
||||
#define HCIGETDEVINFO _IOR('H', 211, int)
|
||||
|
||||
struct hci_dev_info {
|
||||
uint16_t dev_id;
|
||||
char name[8];
|
||||
uint8_t bdaddr[6];
|
||||
uint32_t padding[32];
|
||||
};
|
||||
|
||||
struct hci_dev_req {
|
||||
uint16_t dev_id;
|
||||
uint32_t dev_opt;
|
||||
};
|
||||
|
||||
struct hci_dev_list_req {
|
||||
uint16_t dev_num;
|
||||
hci_dev_req dev_req[2];
|
||||
};
|
||||
|
||||
static uint32_t bt_addr() {
|
||||
uint32_t res = -1;
|
||||
|
||||
int fd = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
|
||||
if (fd < 0) {
|
||||
DMESG("BT_ADDR: can't open HCI socket");
|
||||
return res;
|
||||
}
|
||||
|
||||
hci_dev_list_req dl;
|
||||
dl.dev_num = 1;
|
||||
|
||||
if (ioctl(fd, HCIGETDEVLIST, (void *)&dl) < 0) {
|
||||
DMESG("BT_ADDR: can't get HCI device list");
|
||||
goto done;
|
||||
}
|
||||
|
||||
hci_dev_info di;
|
||||
di.dev_id = dl.dev_req[0].dev_id;
|
||||
|
||||
if (ioctl(fd, HCIGETDEVINFO, (void *)&di) < 0) {
|
||||
DMESG("BT_ADDR: can't get HCI device info");
|
||||
goto done;
|
||||
}
|
||||
|
||||
memcpy(&res, di.bdaddr, 4);
|
||||
res *= 0x1000193;
|
||||
res += di.bdaddr[4];
|
||||
res *= 0x1000193;
|
||||
res += di.bdaddr[5];
|
||||
|
||||
done:
|
||||
close(fd);
|
||||
return res;
|
||||
}
|
||||
|
||||
namespace pxt {
|
||||
|
||||
int getSerialNumber() {
|
||||
static int serial;
|
||||
|
||||
if (serial != 0)
|
||||
return serial;
|
||||
|
||||
serial = bt_addr() & 0x7fffffff;
|
||||
|
||||
return serial;
|
||||
}
|
||||
|
||||
} // namespace pxt
|
16
libs/core/shims.d.ts
vendored
@ -120,5 +120,21 @@ declare namespace output {
|
||||
//% shim=output::createBuffer
|
||||
function createBuffer(size: int32): Buffer;
|
||||
}
|
||||
declare namespace motors {
|
||||
|
||||
/**
|
||||
* Mark a motor as used
|
||||
*/
|
||||
//% shim=motors::__motorUsed
|
||||
function __motorUsed(port: int32, large: boolean): void;
|
||||
}
|
||||
declare namespace sensors {
|
||||
|
||||
/**
|
||||
* Mark a sensor as used
|
||||
*/
|
||||
//% shim=sensors::__sensorUsed
|
||||
function __sensorUsed(port: int32, type: int32): void;
|
||||
}
|
||||
|
||||
// Auto-generated. Do not edit. Really.
|
||||
|
@ -1,81 +0,0 @@
|
||||
namespace pxsim {
|
||||
enum ThresholdState {
|
||||
High,
|
||||
Low,
|
||||
Normal
|
||||
}
|
||||
|
||||
export class AnalogSensorState {
|
||||
public sensorUsed: boolean = false;
|
||||
|
||||
private level: number;
|
||||
private state = ThresholdState.Normal;
|
||||
|
||||
constructor(public id: number, private min = 0, private max = 255, private lowThreshold = 64, private highThreshold = 192) {
|
||||
this.level = Math.ceil((max - min) / 2);
|
||||
}
|
||||
|
||||
public setUsed() {
|
||||
if (!this.sensorUsed) {
|
||||
this.sensorUsed = true;
|
||||
runtime.queueDisplayUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
public setLevel(level: number) {
|
||||
this.level = this.clampValue(level);
|
||||
|
||||
if (this.level >= this.highThreshold) {
|
||||
this.setState(ThresholdState.High);
|
||||
}
|
||||
else if (this.level <= this.lowThreshold) {
|
||||
this.setState(ThresholdState.Low);
|
||||
}
|
||||
else {
|
||||
this.setState(ThresholdState.Normal);
|
||||
}
|
||||
}
|
||||
|
||||
public getLevel(): number {
|
||||
return this.level;
|
||||
}
|
||||
|
||||
public setLowThreshold(value: number) {
|
||||
this.lowThreshold = this.clampValue(value);
|
||||
this.highThreshold = Math.max(this.lowThreshold + 1, this.highThreshold);
|
||||
}
|
||||
|
||||
public setHighThreshold(value: number) {
|
||||
this.highThreshold = this.clampValue(value);
|
||||
this.lowThreshold = Math.min(this.highThreshold - 1, this.lowThreshold);
|
||||
}
|
||||
|
||||
private clampValue(value: number) {
|
||||
if (value < this.min) {
|
||||
return this.min;
|
||||
}
|
||||
else if (value > this.max) {
|
||||
return this.max;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
private setState(state: ThresholdState) {
|
||||
if (this.state === state) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.state = state;
|
||||
switch (state) {
|
||||
case ThresholdState.High:
|
||||
board().bus.queue(this.id, DAL.ANALOG_THRESHOLD_HIGH);
|
||||
break;
|
||||
case ThresholdState.Low:
|
||||
board().bus.queue(this.id, DAL.ANALOG_THRESHOLD_LOW);
|
||||
break;
|
||||
case ThresholdState.Normal:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,177 +0,0 @@
|
||||
|
||||
namespace pxsim.pins {
|
||||
export class CommonPin extends Pin {
|
||||
used: boolean;
|
||||
}
|
||||
|
||||
export class DigitalPin extends CommonPin {
|
||||
}
|
||||
|
||||
export class AnalogPin extends CommonPin {
|
||||
|
||||
}
|
||||
|
||||
export function markUsed(name: CommonPin) {
|
||||
if (!name.used) {
|
||||
name.used = true;
|
||||
runtime.queueDisplayUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
namespace pxsim.DigitalPinMethods {
|
||||
export function digitalRead(name: pins.DigitalPin): number {
|
||||
return name.digitalReadPin();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a pin or connector value to either 0 or 1.
|
||||
* @param value value to set on the pin, 1 eg,0
|
||||
*/
|
||||
export function digitalWrite(name: pins.DigitalPin, value: number): void {
|
||||
name.digitalWritePin(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures this pin to a digital input, and generates events where the timestamp is the duration
|
||||
* that this pin was either ``high`` or ``low``.
|
||||
*/
|
||||
export function onPulsed(name: pins.DigitalPin, pulse: number, body: RefAction): void {
|
||||
// TODO
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the duration of a pulse in microseconds
|
||||
* @param value the value of the pulse (default high)
|
||||
* @param maximum duration in micro-seconds
|
||||
*/
|
||||
export function pulseIn(name: pins.DigitalPin, pulse: number, maxDuration = 2000000): number {
|
||||
// TODO
|
||||
return 500;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the pull of this pin.
|
||||
* @param pull one of the mbed pull configurations: PullUp, PullDown, PullNone
|
||||
*/
|
||||
export function setPull(name: pins.DigitalPin, pull: number): void {
|
||||
name.setPull(pull);
|
||||
}
|
||||
|
||||
/**
|
||||
* Do something when a pin is pressed.
|
||||
* @param body the code to run when the pin is pressed
|
||||
*/
|
||||
export function onPressed(name: pins.DigitalPin, body: RefAction): void {
|
||||
}
|
||||
|
||||
/**
|
||||
* Do something when a pin is released.
|
||||
* @param body the code to run when the pin is released
|
||||
*/
|
||||
export function onReleased(name: pins.DigitalPin, body: RefAction): void {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the pin state (pressed or not). Requires to hold the ground to close the circuit.
|
||||
* @param name pin used to detect the touch
|
||||
*/
|
||||
export function isPressed(name: pins.DigitalPin): boolean {
|
||||
return name.isTouched();
|
||||
}
|
||||
}
|
||||
|
||||
namespace pxsim.AnalogPinMethods {
|
||||
/**
|
||||
* Read the connector value as analog, that is, as a value comprised between 0 and 1023.
|
||||
*/
|
||||
export function analogRead(name: pins.AnalogPin): number {
|
||||
pins.markUsed(name);
|
||||
return name.analogReadPin();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the connector value as analog. Value must be comprised between 0 and 1023.
|
||||
* @param value value to write to the pin between ``0`` and ``1023``. eg:1023,0
|
||||
*/
|
||||
export function analogWrite(name: pins.AnalogPin, value: number): void {
|
||||
pins.markUsed(name);
|
||||
name.analogWritePin(value);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures the Pulse-width modulation (PWM) of the analog output to the given value in
|
||||
* **microseconds** or `1/1000` milliseconds.
|
||||
* If this pin is not configured as an analog output (using `analog write pin`), the operation has
|
||||
* no effect.
|
||||
* @param micros period in micro seconds. eg:20000
|
||||
*/
|
||||
export function analogSetPeriod(name: pins.AnalogPin, micros: number): void {
|
||||
pins.markUsed(name);
|
||||
name.analogSetPeriod(micros);
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes a value to the servo, controlling the shaft accordingly. On a standard servo, this will
|
||||
* set the angle of the shaft (in degrees), moving the shaft to that orientation. On a continuous
|
||||
* rotation servo, this will set the speed of the servo (with ``0`` being full-speed in one
|
||||
* direction, ``180`` being full speed in the other, and a value near ``90`` being no movement).
|
||||
* @param value angle or rotation speed, eg:180,90,0
|
||||
*/
|
||||
export function servoWrite(name: pins.AnalogPin, value: number): void {
|
||||
pins.markUsed(name);
|
||||
name.servoWritePin(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures this IO pin as an analog/pwm output, configures the period to be 20 ms, and sets the
|
||||
* pulse width, based on the value it is given **microseconds** or `1/1000` milliseconds.
|
||||
* @param micros pulse duration in micro seconds, eg:1500
|
||||
*/
|
||||
export function servoSetPulse(name: pins.AnalogPin, micros: number): void {
|
||||
pins.markUsed(name);
|
||||
// TODO fix pxt
|
||||
// name.servoSetPulse(micros);
|
||||
}
|
||||
}
|
||||
|
||||
namespace pxsim.PwmPinMethods {
|
||||
export function analogSetPeriod(name: pins.AnalogPin, micros: number): void {
|
||||
name.analogSetPeriod(micros);
|
||||
}
|
||||
|
||||
export function servoWrite(name: pins.AnalogPin, value: number): void {
|
||||
name.servoWritePin(value);
|
||||
}
|
||||
|
||||
export function servoSetPulse(name: pins.AnalogPin, micros: number): void {
|
||||
name.servoSetPulse(name.id, micros);
|
||||
}
|
||||
}
|
||||
|
||||
namespace pxsim.pins {
|
||||
export function pulseDuration(): number {
|
||||
// bus last event timestamp
|
||||
return 500;
|
||||
}
|
||||
|
||||
export function createBuffer(sz: number) {
|
||||
return pxsim.BufferMethods.createBuffer(sz)
|
||||
}
|
||||
|
||||
export function spiWrite(value: number): number {
|
||||
// TODO
|
||||
return 0;
|
||||
}
|
||||
|
||||
export function i2cReadBuffer(address: number, size: number, repeat?: boolean): RefBuffer {
|
||||
// fake reading zeros
|
||||
return createBuffer(size)
|
||||
}
|
||||
|
||||
export function i2cWriteBuffer(address: number, buf: RefBuffer, repeat?: boolean): void {
|
||||
// fake - noop
|
||||
}
|
||||
}
|
||||
|
@ -1,51 +1,36 @@
|
||||
screen.clear()
|
||||
screen.print("PXT!", 10, 30, Draw.Quad)
|
||||
brick.print("PXT!", 10, 30, Draw.Quad)
|
||||
|
||||
screen.drawRect(40, 40, 20, 10, Draw.Fill)
|
||||
motors.setStatusLight(LightsPattern.Orange)
|
||||
brick.drawRect(40, 40, 20, 10, Draw.Fill)
|
||||
brick.setLight(LightsPattern.Orange)
|
||||
|
||||
screen.heart.doubled().draw(100, 50, Draw.Double | Draw.Transparent)
|
||||
brick.heart.doubled().draw(100, 50, Draw.Double | Draw.Transparent)
|
||||
|
||||
sensors.buttonEnter.onEvent(ButtonEvent.Click, () => {
|
||||
brick.buttonEnter.onEvent(ButtonEvent.Click, () => {
|
||||
screen.clear()
|
||||
})
|
||||
|
||||
sensors.buttonLeft.onEvent(ButtonEvent.Click, () => {
|
||||
screen.drawRect(10, 70, 20, 10, Draw.Fill)
|
||||
motors.setStatusLight(LightsPattern.Red)
|
||||
screen.setFont(screen.microbitFont())
|
||||
brick.buttonLeft.onEvent(ButtonEvent.Click, () => {
|
||||
brick.drawRect(10, 70, 20, 10, Draw.Fill)
|
||||
brick.setLight(LightsPattern.Red)
|
||||
brick.setFont(brick.microbitFont())
|
||||
})
|
||||
|
||||
sensors.buttonRight.onEvent(ButtonEvent.Click, () => {
|
||||
screen.print("Right!", 10, 60)
|
||||
brick.buttonRight.onEvent(ButtonEvent.Click, () => {
|
||||
brick.print("Right!", 10, 60)
|
||||
})
|
||||
|
||||
sensors.buttonDown.onEvent(ButtonEvent.Click, () => {
|
||||
screen.print("Down! ", 10, 60)
|
||||
brick.buttonDown.onEvent(ButtonEvent.Click, () => {
|
||||
brick.print("Down! ", 10, 60)
|
||||
})
|
||||
|
||||
sensors.buttonUp.onEvent(ButtonEvent.Click, () => {
|
||||
screen.print("Up! ", 10, 60)
|
||||
brick.buttonUp.onEvent(ButtonEvent.Click, () => {
|
||||
brick.print("Up! ", 10, 60)
|
||||
})
|
||||
|
||||
|
||||
let num = 0
|
||||
|
||||
sensors.touchSensor1.onEvent(TouchSensorEvent.Bumped, () => {
|
||||
screen.print("Click! " + num, 10, 60)
|
||||
num++
|
||||
})
|
||||
|
||||
sensors.remoteButtonTopLeft.onEvent(ButtonEvent.Click, () => {
|
||||
screen.print("TOPLEFT " + num, 10, 60)
|
||||
num++
|
||||
})
|
||||
|
||||
sensors.remoteButtonTopRight.onEvent(ButtonEvent.Down, () => {
|
||||
screen.print("TOPRIGH " + num, 10, 60)
|
||||
num++
|
||||
})
|
||||
|
||||
loops.forever(() => {
|
||||
serial.writeDmesg()
|
||||
loops.pause(100)
|
||||
|
@ -1,24 +1,30 @@
|
||||
|
||||
//% color="#00A5C8" weight=100
|
||||
//% groups='["Light", "Buttons", "Screen"]'
|
||||
//% color="#68C3E2" weight=100
|
||||
//% groups='["Buttons", "Screen"]'
|
||||
//% labelLineWidth=0
|
||||
namespace brick {
|
||||
}
|
||||
|
||||
|
||||
//% color="#D42878" weight=95
|
||||
//% color="#C8509B" weight=95 icon="\uf192"
|
||||
//% labelLineWidth=0
|
||||
//% groups='["Ultrasonic Sensor", "Touch Sensor", "Color Sensor", "Infrared Sensor", "Remote Infrared Beacon", "Gyro Sensor"]'
|
||||
//% groupIcons='["\uf101","\uf103","\uf102","","","\uf104"]'
|
||||
namespace sensors {
|
||||
}
|
||||
|
||||
//% color="#8AC044" weight=90 icon="\uf185"
|
||||
//% color="#A5CA18" weight=90 icon="\uf185"
|
||||
//% groups='["Motion", "Sensors", "Chassis"]'
|
||||
//% labelLineWidth=0
|
||||
namespace motors {
|
||||
}
|
||||
|
||||
//% color="#DF5014" weight=80
|
||||
//% color="#D67923" weight=80
|
||||
namespace music {
|
||||
|
||||
}
|
||||
|
||||
//% color="#48150C"
|
||||
//% color="#5F3109"
|
||||
namespace control {
|
||||
|
||||
}
|
||||
@ -33,12 +39,12 @@ namespace serial {
|
||||
|
||||
}
|
||||
|
||||
//% color="#0F841C"
|
||||
//% color="#58AB41"
|
||||
namespace loops {
|
||||
|
||||
}
|
||||
|
||||
//% color="#4c97ff"
|
||||
//% color="#1E5AA8"
|
||||
namespace light {
|
||||
|
||||
}
|
@ -3,7 +3,8 @@
|
||||
"description": "The EV3 library",
|
||||
"files": [
|
||||
"README.md",
|
||||
"ns.ts"
|
||||
"ns.ts",
|
||||
"startup.ts"
|
||||
],
|
||||
"dependencies": {
|
||||
"base": "file:../base",
|
||||
@ -12,7 +13,7 @@
|
||||
"color-sensor": "file:../color-sensor",
|
||||
"touch-sensor": "file:../touch-sensor",
|
||||
"ultrasonic-sensor": "file:../ultrasonic-sensor",
|
||||
"infrared-sensor": "file:../infrared-sensor"
|
||||
"gyro-sensor": "file:../gyro-sensor"
|
||||
},
|
||||
"public": true
|
||||
}
|
||||
|
4
libs/ev3/startup.ts
Normal file
@ -0,0 +1,4 @@
|
||||
// This is the last thing executed before user code
|
||||
|
||||
// We pause for 100ms to give time to read sensor values, so they work in on_start block
|
||||
loops.pause(100)
|
3
libs/gyro-sensor/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Gyro Sensor
|
||||
|
||||
The library to interact with the Gyro Sensor.
|
4
libs/gyro-sensor/_locales/gyro-sensor-jsdoc-strings.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"sensors.GyroSensor.angle": "Get the current angle from the gyroscope.",
|
||||
"sensors.GyroSensor.rate": "Get the current rotation rate from the gyroscope."
|
||||
}
|
10
libs/gyro-sensor/_locales/gyro-sensor-strings.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"sensors.GyroSensor.angle|block": "%sensor|angle",
|
||||
"sensors.GyroSensor.rate|block": "%sensor|rotation rate",
|
||||
"sensors.gyro1|block": "gyro 1",
|
||||
"sensors.gyro2|block": "gyro 2",
|
||||
"sensors.gyro3|block": "gyro 3",
|
||||
"sensors.gyro4|block": "gyro 4",
|
||||
"{id:category}Sensors": "Sensors",
|
||||
"{id:group}Gyro Sensor": "Gyro Sensor"
|
||||
}
|
@ -24,13 +24,13 @@ namespace sensors {
|
||||
* @param sensor the gyroscope to query the request
|
||||
*/
|
||||
//% help=input/gyro/angle
|
||||
//% block="`icons.gyroSensor` %sensor|angle"
|
||||
//% block="%sensor|angle"
|
||||
//% blockId=gyroGetAngle
|
||||
//% parts="gyroscope"
|
||||
//% blockNamespace=sensors
|
||||
//% weight=65 blockGap=8
|
||||
//% group="Gyro Sensor"
|
||||
angle() {
|
||||
angle(): number {
|
||||
this.setMode(GyroSensorMode.Angle)
|
||||
return this.getNumber(NumberFormat.Int16LE, 0)
|
||||
}
|
||||
@ -40,27 +40,27 @@ namespace sensors {
|
||||
* @param sensor the gyroscope to query the request
|
||||
*/
|
||||
//% help=input/gyro/rate
|
||||
//% block="`icons.gyroSensor` %sensor|rotation rate"
|
||||
//% block="%sensor|rotation rate"
|
||||
//% blockId=gyroGetRate
|
||||
//% parts="gyroscope"
|
||||
//% blockNamespace=sensors
|
||||
//% weight=65 blockGap=8
|
||||
//% group="Gyro Sensor"
|
||||
rate() {
|
||||
rate(): number {
|
||||
this.setMode(GyroSensorMode.Rate)
|
||||
return this.getNumber(NumberFormat.Int16LE, 0)
|
||||
}
|
||||
}
|
||||
|
||||
//% fixedInstance whenUsed block="1"
|
||||
//% fixedInstance whenUsed block="gyro 1" jres=icons.port1
|
||||
export const gyro1: GyroSensor = new GyroSensor(1)
|
||||
|
||||
//% fixedInstance whenUsed block="2" weight=95
|
||||
//% fixedInstance whenUsed block="gyro 2" weight=95 jres=icons.port2
|
||||
export const gyro2: GyroSensor = new GyroSensor(2)
|
||||
|
||||
//% fixedInstance whenUsed block="3"
|
||||
//% fixedInstance whenUsed block="gyro 3" jres=icons.port3
|
||||
export const gyro3: GyroSensor = new GyroSensor(3)
|
||||
|
||||
//% fixedInstance whenUsed block="4"
|
||||
//% fixedInstance whenUsed block="gyro 4" jres=icons.port4
|
||||
export const gyro4: GyroSensor = new GyroSensor(4)
|
||||
}
|
15
libs/gyro-sensor/pxt.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "gyro-sensor",
|
||||
"description": "Gyro Sensor support",
|
||||
"files": [
|
||||
"README.md",
|
||||
"gyro.ts"
|
||||
],
|
||||
"testFiles": [
|
||||
"test.ts"
|
||||
],
|
||||
"public": true,
|
||||
"dependencies": {
|
||||
"core": "file:../core"
|
||||
}
|
||||
}
|
0
libs/gyro-sensor/test.ts
Normal file
@ -1,9 +1,9 @@
|
||||
{
|
||||
"sensors.InfraredSensor.onEvent": "Registers code to run when an object is getting near.",
|
||||
"sensors.InfraredSensor.onEvent|param|handler": "the code to run when detected",
|
||||
"sensors.InfraredSensor.pauseUntil": "Waits for the event to occur",
|
||||
"sensors.InfraredSensor.proximity": "Get the promixity measured by the infrared sensor, from ``0`` (close) to ``100`` (far)",
|
||||
"sensors.InfraredSensor.remoteCommand": "Get the remote commandreceived the infrared sensor.",
|
||||
"sensors.InfraredSensor.waitUntil": "Waits for the event to occur",
|
||||
"sensors.RemoteInfraredBeaconButton.isPressed": "Check if a remote button is currently pressed or not.",
|
||||
"sensors.RemoteInfraredBeaconButton.onEvent": "Do something when a button or sensor is clicked, up or down",
|
||||
"sensors.RemoteInfraredBeaconButton.onEvent|param|body": "code to run when the event is raised",
|
||||
|
@ -1,17 +1,17 @@
|
||||
{
|
||||
"InfraredSensorEvent.ObjectDetected|block": "object detected",
|
||||
"InfraredSensorEvent.ObjectNear|block": "object near",
|
||||
"sensors.InfraredSensor.onEvent|block": "on `icons.infraredSensor` %sensor|%event",
|
||||
"sensors.InfraredSensor.proximity|block": "`icons.infraredSensor` %infrared|proximity",
|
||||
"sensors.InfraredSensor.remoteCommand|block": "`icons.infraredSensor` %infrared|remote command",
|
||||
"sensors.InfraredSensor.waitUntil|block": "wait until `icons.infraredSensor` %sensor| %event",
|
||||
"sensors.RemoteInfraredBeaconButton.isPressed|block": "`icons.infraredSensor` %button|is pressed",
|
||||
"sensors.RemoteInfraredBeaconButton.onEvent|block": "on `icons.infraredSensor` %button|%event",
|
||||
"sensors.RemoteInfraredBeaconButton.wasPressed|block": "`icons.infraredSensor` %button|was pressed",
|
||||
"sensors.infraredSensor1|block": "1",
|
||||
"sensors.infraredSensor2|block": "2",
|
||||
"sensors.infraredSensor3|block": "3",
|
||||
"sensors.infraredSensor4|block": "4",
|
||||
"sensors.InfraredSensor.onEvent|block": "on %sensor|%event",
|
||||
"sensors.InfraredSensor.pauseUntil|block": "pause until %sensor| %event",
|
||||
"sensors.InfraredSensor.proximity|block": "%sensor|proximity",
|
||||
"sensors.InfraredSensor.remoteCommand|block": "%sensor|remote command",
|
||||
"sensors.RemoteInfraredBeaconButton.isPressed|block": "%button|is pressed",
|
||||
"sensors.RemoteInfraredBeaconButton.onEvent|block": "on %button|%event",
|
||||
"sensors.RemoteInfraredBeaconButton.wasPressed|block": "%button|was pressed",
|
||||
"sensors.infraredSensor1|block": "infrared 1",
|
||||
"sensors.infraredSensor2|block": "infrared 2",
|
||||
"sensors.infraredSensor3|block": "infrared 3",
|
||||
"sensors.infraredSensor4|block": "infrared 4",
|
||||
"sensors.remoteButtonBottomLeft|block": "bottom-left",
|
||||
"sensors.remoteButtonBottomRight|block": "bottom-right",
|
||||
"sensors.remoteButtonCenter|block": "center",
|
||||
|
@ -93,7 +93,7 @@ namespace sensors {
|
||||
* @param button the remote button to query the request
|
||||
*/
|
||||
//% help=input/remote-infrared-beacon/is-pressed
|
||||
//% block="`icons.infraredSensor` %button|is pressed"
|
||||
//% block="%button|is pressed"
|
||||
//% blockId=remoteButtonIsPressed
|
||||
//% parts="remote"
|
||||
//% blockNamespace=sensors
|
||||
@ -108,7 +108,7 @@ namespace sensors {
|
||||
* @param button the remote button to query the request
|
||||
*/
|
||||
//% help=input/remote-infrared-beacon/was-pressed
|
||||
//% block="`icons.infraredSensor` %button|was pressed"
|
||||
//% block="%button|was pressed"
|
||||
//% blockId=remotebuttonWasPressed
|
||||
//% parts="remote"
|
||||
//% blockNamespace=sensors
|
||||
@ -125,7 +125,7 @@ namespace sensors {
|
||||
* @param body code to run when the event is raised
|
||||
*/
|
||||
//% help=input/remote-infrared-beacon/on-event
|
||||
//% blockId=remotebuttonEvent block="on `icons.infraredSensor` %button|%event"
|
||||
//% blockId=remotebuttonEvent block="on %button|%event"
|
||||
//% parts="remote"
|
||||
//% blockNamespace=sensors
|
||||
//% weight=99 blockGap=8
|
||||
@ -189,7 +189,7 @@ namespace sensors {
|
||||
* @param handler the code to run when detected
|
||||
*/
|
||||
//% help=input/infrared/on
|
||||
//% block="on `icons.infraredSensor` %sensor|%event"
|
||||
//% block="on %sensor|%event"
|
||||
//% blockId=infraredOn
|
||||
//% parts="infraredsensor"
|
||||
//% blockNamespace=sensors
|
||||
@ -203,22 +203,22 @@ namespace sensors {
|
||||
* Waits for the event to occur
|
||||
*/
|
||||
//% help=input/ultrasonic/wait
|
||||
//% block="wait until `icons.infraredSensor` %sensor| %event"
|
||||
//% block="pause until %sensor| %event"
|
||||
//% blockId=infraredwait
|
||||
//% parts="infraredsensor"
|
||||
//% blockNamespace=sensors
|
||||
//% weight=99 blockGap=8
|
||||
//% group="Infrared Sensor"
|
||||
waitUntil(event: InfraredSensorEvent) {
|
||||
pauseUntil(event: InfraredSensorEvent) {
|
||||
control.waitForEvent(this._id, event);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the promixity measured by the infrared sensor, from ``0`` (close) to ``100`` (far)
|
||||
* @param ir the infrared sensor
|
||||
* @param sensor the infrared sensor
|
||||
*/
|
||||
//% help=input/infrared/proximity
|
||||
//% block="`icons.infraredSensor` %infrared|proximity"
|
||||
//% block="%sensor|proximity"
|
||||
//% blockId=infraredGetProximity
|
||||
//% parts="infrared"
|
||||
//% blockNamespace=sensors
|
||||
@ -231,10 +231,10 @@ namespace sensors {
|
||||
|
||||
/**
|
||||
* Get the remote commandreceived the infrared sensor.
|
||||
* @param ir the infrared sensor
|
||||
* @param sensor the infrared sensor
|
||||
*/
|
||||
//% help=input/infrared/remote-command
|
||||
//% block="`icons.infraredSensor` %infrared|remote command"
|
||||
//% block="%sensor|remote command"
|
||||
//% blockId=infraredGetRemoteCommand
|
||||
//% parts="infrared"
|
||||
//% blockNamespace=sensors
|
||||
@ -252,16 +252,16 @@ namespace sensors {
|
||||
}
|
||||
}
|
||||
|
||||
//% fixedInstance whenUsed block="1"
|
||||
//% fixedInstance whenUsed block="infrared 1" jres=icons.port1
|
||||
export const infraredSensor1: InfraredSensor = new InfraredSensor(1)
|
||||
|
||||
//% fixedInstance whenUsed block="2"
|
||||
//% fixedInstance whenUsed block="infrared 2" jres=icons.port2
|
||||
export const infraredSensor2: InfraredSensor = new InfraredSensor(2)
|
||||
|
||||
//% fixedInstance whenUsed block="3"
|
||||
//% fixedInstance whenUsed block="infrared 3" jres=icons.port3
|
||||
export const infraredSensor3: InfraredSensor = new InfraredSensor(3)
|
||||
|
||||
//% fixedInstance whenUsed block="4"
|
||||
//% fixedInstance whenUsed block="infrared 4" jres=icons.port4
|
||||
export const infraredSensor4: InfraredSensor = new InfraredSensor(4)
|
||||
|
||||
|
||||
|
@ -11,12 +11,10 @@
|
||||
"music.fromWAV": "Makes a sound bound to a buffer in WAV format.",
|
||||
"music.noteFrequency": "Get the frequency of a note.",
|
||||
"music.noteFrequency|param|name": "the note name, eg: Note.C",
|
||||
"music.playSound": "Start playing a sound and don't wait for it to finish.\nNotes are expressed as a string of characters with this format: NOTE[octave][:duration]",
|
||||
"music.playSoundEffect": "Plays a sound",
|
||||
"music.playSoundEffect": "Start playing a sound and don't wait for it to finish.",
|
||||
"music.playSoundEffectUntilDone": "Plays a sound",
|
||||
"music.playSoundEffectUntilDone|param|sound": "the sound to play",
|
||||
"music.playSoundEffect|param|sound": "the sound to play",
|
||||
"music.playSoundUntilDone": "Play a sound and wait until the sound is done.\nNotes are expressed as a string of characters with this format: NOTE[octave][:duration]",
|
||||
"music.playSoundUntilDone|param|sound": "the melody to play, eg: music.sounds(Sounds.PowerUp)",
|
||||
"music.playSound|param|sound": "the melody to play, eg: music.sounds(Sounds.PowerUp)",
|
||||
"music.playTone": "Play a tone through the speaker for some amount of time.",
|
||||
"music.playTone|param|frequency": "pitch of the tone to play in Hertz (Hz)",
|
||||
"music.playTone|param|ms": "tone duration in milliseconds (ms)",
|
||||
@ -28,8 +26,6 @@
|
||||
"music.setTempo|param|bpm": "The new tempo in beats per minute, eg: 120",
|
||||
"music.setVolume": "Set the output volume of the sound synthesizer.",
|
||||
"music.setVolume|param|volume": "the volume 0...256, eg: 128",
|
||||
"music.sounds": "Get the melody string for a built-in melody.",
|
||||
"music.sounds|param|name": "the note name, eg: Note.C",
|
||||
"music.stopAllSounds": "Stop all sounds from playing.",
|
||||
"music.stopAllSounds": "Play a tone through the speaker for some amount of time.",
|
||||
"music.tempo": "Return the tempo in beats per minute (bpm).\nTempo is the speed (bpm = beats per minute) at which notes play. The larger the tempo value, the faster the notes will play."
|
||||
}
|
@ -20,27 +20,17 @@
|
||||
"Note.GSharp|block": "G#",
|
||||
"SoundOutputDestination.Pin|block": "pin",
|
||||
"SoundOutputDestination.Speaker|block": "speaker",
|
||||
"Sounds.BaDing|block": "ba ding",
|
||||
"Sounds.JumpDown|block": "jump down",
|
||||
"Sounds.JumpUp|block": "jump up",
|
||||
"Sounds.MagicWand|block": "magic wand",
|
||||
"Sounds.PowerDown|block": "power down",
|
||||
"Sounds.PowerUp|block": "power up",
|
||||
"Sounds.Siren|block": "siren",
|
||||
"Sounds.Wawawawaa|block": "wawawawaa",
|
||||
"music._soundPicker|block": "%sound",
|
||||
"music.beat|block": "%fraction|beat",
|
||||
"music.changeTempoBy|block": "change tempo by %value|(bpm)",
|
||||
"music.noteFrequency|block": "%note",
|
||||
"music.playSoundEffect|block": "play %sound",
|
||||
"music.playSoundUntilDone|block": "play sound %sound=music_sounds|until done",
|
||||
"music.playSound|block": "play sound %sound=music_sounds",
|
||||
"music.playSoundEffectUntilDone|block": "play sound effect %sound|until done",
|
||||
"music.playSoundEffect|block": "play sound effect %sound",
|
||||
"music.playTone|block": "play tone|at %note=device_note|for %duration=device_beat",
|
||||
"music.rest|block": "rest|for %duration=device_beat",
|
||||
"music.ringTone|block": "ring tone|at %note=device_note",
|
||||
"music.setTempo|block": "set tempo to %value|(bpm)",
|
||||
"music.setVolume|block": "set volume %volume",
|
||||
"music.sounds|block": "%name",
|
||||
"music.stopAllSounds|block": "stop all sounds",
|
||||
"music.tempo|block": "tempo (bpm)",
|
||||
"music|block": "music",
|
||||
|
1
libs/music/melodies.ts
Normal file
@ -0,0 +1 @@
|
||||
namespace music {}
|
@ -163,6 +163,21 @@ void playTone(int frequency, int ms) {
|
||||
sleep_ms(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Play a tone through the speaker for some amount of time.
|
||||
*/
|
||||
//% help=music/stop-all-sounds
|
||||
//% blockId=music_stop_all_sounds block="stop all sounds"
|
||||
//% parts="headphone"
|
||||
//% blockNamespace=music
|
||||
//% weight=76 blockGap=8
|
||||
void stopAllSounds() {
|
||||
if (currentSample) {
|
||||
samplePtr = currentSample->length;
|
||||
}
|
||||
_stopSound();
|
||||
}
|
||||
|
||||
/** Makes a sound bound to a buffer in WAV format. */
|
||||
//%
|
||||
Sound fromWAV(Buffer buf) {
|
||||
|
@ -6,7 +6,7 @@ namespace music {
|
||||
//% weight=1 help=music/note-frequency
|
||||
//% blockId=device_note block="%note"
|
||||
//% shim=TD_ID color="#FFFFFF" colorSecondary="#FFFFFF"
|
||||
//% note.fieldEditor="note" note.defl="262"
|
||||
//% note.fieldEditor="note" note.defl="1046"
|
||||
//% note.fieldOptions.editorColour="#FF1493" note.fieldOptions.decompileLiterals=true
|
||||
//% note.fieldOptions.minNote=52 note.fieldOptions.maxNote=75
|
||||
//% useEnumVal=1
|
||||
|
10
libs/music/shims.d.ts
vendored
@ -25,6 +25,16 @@ declare namespace music {
|
||||
//% weight=76 blockGap=8 shim=music::playTone
|
||||
function playTone(frequency: int32, ms: int32): void;
|
||||
|
||||
/**
|
||||
* Play a tone through the speaker for some amount of time.
|
||||
*/
|
||||
//% help=music/stop-all-sounds
|
||||
//% blockId=music_stop_all_sounds block="stop all sounds"
|
||||
//% parts="headphone"
|
||||
//% blockNamespace=music
|
||||
//% weight=76 blockGap=8 shim=music::stopAllSounds
|
||||
function stopAllSounds(): void;
|
||||
|
||||
/** Makes a sound bound to a buffer in WAV format. */
|
||||
//% shim=music::fromWAV
|
||||
function fromWAV(buf: Buffer): Sound;
|
||||
|
@ -256,15 +256,17 @@ namespace sounds {
|
||||
}
|
||||
|
||||
namespace music {
|
||||
let numSoundsPlaying = 0;
|
||||
const soundsLimit = 1;
|
||||
|
||||
/**
|
||||
* Plays a sound
|
||||
* @param sound the sound to play
|
||||
*/
|
||||
//% blockId=music_play_sound_effect block="play %sound"
|
||||
//% blockId=music_play_sound_effect_until_done block="play sound effect %sound|until done"
|
||||
//% weight=98
|
||||
export function playSoundEffect(sound: Sound) {
|
||||
export function playSoundEffectUntilDone(sound: Sound) {
|
||||
if (!sound) return;
|
||||
|
||||
sound.play();
|
||||
}
|
||||
|
||||
@ -277,4 +279,16 @@ namespace music {
|
||||
export function _soundPicker(sound: Sound): Sound {
|
||||
return sound;
|
||||
}
|
||||
|
||||
/**
|
||||
* Start playing a sound and don't wait for it to finish.
|
||||
* @param sound the sound to play
|
||||
*/
|
||||
//% blockId=music_play_sound_effect block="play sound effect %sound"
|
||||
//% weight=99
|
||||
export function playSoundEffect(sound: Sound) {
|
||||
if (!sound || numSoundsPlaying >= soundsLimit) return;
|
||||
numSoundsPlaying++;
|
||||
control.runInBackground(() => {sound.play(); numSoundsPlaying--;});
|
||||
}
|
||||
}
|
||||
|
35
libs/tests/README.md
Normal file
@ -0,0 +1,35 @@
|
||||
# tests
|
||||
|
||||
A unit test framework
|
||||
|
||||
## Defining tests
|
||||
|
||||
Tests are registered as event handlers. They will automatically run once ``on start`` is finished.
|
||||
|
||||
```blocks
|
||||
tests.test("lgB set speed 10", () => {
|
||||
motors.largeB.setSpeed(10);
|
||||
loops.pause(100)
|
||||
tests.assertClose("speedB", 10, motors.largeB.speed(), 2)
|
||||
});
|
||||
```
|
||||
|
||||
## Assertions
|
||||
|
||||
The library has various asserts that will register fault. Note that since exceptions are not available, assertion failure **do not** stop the program execution.
|
||||
|
||||
* **assert** checks a boolean condition
|
||||
|
||||
```blocks
|
||||
tests.assert("speed positive", motors.largeB.speed() > 0)
|
||||
```
|
||||
|
||||
* **assert close** checks that a numberical value is within a particular range
|
||||
|
||||
```blocks
|
||||
tests.assertClose("speed", motors.largeB.speed(), 10, 2)
|
||||
```
|
||||
|
||||
```package
|
||||
tests
|
||||
```
|
9
libs/tests/_locales/tests-jsdoc-strings.json
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"tests": "Unit tests framework",
|
||||
"tests.assert": "Checks a boolean condition",
|
||||
"tests.assertClose": "Checks that 2 values are close to each other",
|
||||
"tests.assertClose|param|actual": "what the value was",
|
||||
"tests.assertClose|param|expected": "what the value should be",
|
||||
"tests.assertClose|param|tolerance": "the acceptable error margin",
|
||||
"tests.test": "Registers a test to run"
|
||||
}
|
6
libs/tests/_locales/tests-strings.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"tests.assert|block": "assert %message|%condition",
|
||||
"tests.test|block": "test %name",
|
||||
"tests|block": "tests",
|
||||
"{id:category}Tests": "Tests"
|
||||
}
|
14
libs/tests/pxt.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"name": "tests",
|
||||
"description": "A unit test library",
|
||||
"files": [
|
||||
"README.md",
|
||||
"tests.ts"
|
||||
],
|
||||
"testFiles": [
|
||||
],
|
||||
"public": true,
|
||||
"dependencies": {
|
||||
"core": "file:../core"
|
||||
}
|
||||
}
|