Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c77aedcd8a | ||
|
|
7b9209681c | ||
|
|
7de33c0ce5 | ||
|
|
dbc5d327e3 | ||
|
|
2e39740e4b | ||
|
|
45e0744b3f | ||
|
|
aab6c0d3e0 | ||
|
|
8a4c4a5400 | ||
|
|
ecfbc6ca75 | ||
|
|
c3b6d44c59 | ||
|
|
db71a80f36 | ||
|
|
a80d5cf91e | ||
|
|
515d261bad | ||
|
|
dd54d67720 | ||
|
|
453332201e | ||
|
|
3548ff47ce | ||
|
|
a02b283f3f | ||
|
|
f197531979 | ||
|
|
2167b9d52d | ||
|
|
2be15fdf4d | ||
|
|
aaf3ad1b9c | ||
|
|
bd7806d2d4 | ||
|
|
24f7d7c288 | ||
|
|
5e0ba1de07 | ||
|
|
2f8ba40034 | ||
|
|
c4a09ab62a | ||
|
|
c0c53db5ee | ||
|
|
5e09a6f1bd | ||
|
|
5e9a8c5737 | ||
|
|
f934fdd9bd | ||
|
|
556728937f | ||
|
|
813ea61308 | ||
|
|
2e8e43bcdf | ||
|
|
e4ddd1ffce | ||
|
|
243f2948ef | ||
|
|
81a1379781 | ||
|
|
93a9370790 | ||
|
|
1989561c90 | ||
|
|
4101f9be79 | ||
|
|
0a31bc711f | ||
|
|
d8bd890101 | ||
|
|
2ba7edab0c | ||
|
|
616051149b | ||
|
|
e69c422f83 | ||
|
|
0ceabe8497 | ||
|
|
d3ae4ec9ee | ||
|
|
ffb2f8aa96 | ||
|
|
65c81834c9 | ||
|
|
97002948d1 | ||
|
|
70aa5ee0e2 | ||
|
|
efc1650e7f | ||
|
|
fe60636072 | ||
|
|
a1342f77c9 | ||
|
|
d806fe9fbe | ||
|
|
1259d5d33a | ||
|
|
098b8eb9cb | ||
|
|
c666009511 | ||
|
|
7f4234fc1e | ||
|
|
482289c384 | ||
|
|
30803fc017 | ||
|
|
749eceefc4 | ||
|
|
57f6f0fbef | ||
|
|
e061617c34 | ||
|
|
eb09ecd7c7 | ||
|
|
06a1542613 | ||
|
|
82a8f2ae89 | ||
|
|
7d0fe9cb85 | ||
|
|
1af876ac8f | ||
|
|
718a28c0da | ||
|
|
a2a375cb5c | ||
|
|
466d8d6c86 | ||
|
|
e77b3dcf4d | ||
|
|
b6d1eef2a1 | ||
|
|
20cb5fdde5 | ||
|
|
2f574e8c03 | ||
|
|
9d8531a85b | ||
|
|
fee122cf33 | ||
|
|
f42ed06d4f | ||
|
|
a8126f0bed | ||
|
|
2c4685f594 | ||
|
|
8b0f98d25b | ||
|
|
dd2e6e8603 | ||
|
|
a0f4818e26 | ||
|
|
af23c10566 | ||
|
|
d7096dad80 | ||
|
|
1d2b1f0307 | ||
|
|
9945b43713 | ||
|
|
4124e1dd4e | ||
|
|
d86b5584fb | ||
|
|
1c01e981e0 | ||
|
|
8a6ddf677c | ||
|
|
5d4481dbb0 | ||
|
|
786770cff2 | ||
|
|
572b573d2f | ||
|
|
15bd870140 | ||
|
|
b101d1992d | ||
|
|
b013204f88 | ||
|
|
b3c5353dd6 | ||
|
|
0ecf536cda | ||
|
|
f2124615ba | ||
|
|
49ade9d9c6 | ||
|
|
045312921e | ||
|
|
39f58b9e03 | ||
|
|
a0467b8d8e | ||
|
|
4945156d9a | ||
|
|
97b2de46ac | ||
|
|
e8d7281626 | ||
|
|
979da8b170 | ||
|
|
ac4a913be3 | ||
|
|
31a30f380f | ||
|
|
87dacfbf76 | ||
|
|
b02895e5fc | ||
|
|
486ac60ea0 | ||
|
|
a3b6507a15 | ||
|
|
75bc15f071 | ||
|
|
0b9280a8df | ||
|
|
677656f669 | ||
|
|
a8ab8b2314 | ||
|
|
62bb262b96 | ||
|
|
8463206f8e | ||
|
|
1cf6f8d31b | ||
|
|
a0bd4a6812 | ||
|
|
efc907fb0c | ||
|
|
be0903de9e | ||
|
|
20361971da | ||
|
|
cefa78270a | ||
|
|
1f5eb1790b | ||
|
|
84335d0032 | ||
|
|
cb74f8e302 | ||
|
|
78bd21b197 | ||
|
|
24bba6d24c | ||
|
|
0edddbb0c2 | ||
|
|
a11af0845b | ||
|
|
3b71bce0b0 | ||
|
|
434ff5e346 | ||
|
|
f7239fc9a9 | ||
|
|
7e13611bc5 | ||
|
|
78feab8949 | ||
|
|
f692e5a127 | ||
|
|
fbd843cb54 | ||
|
|
e4c7e5abeb | ||
|
|
8d521c1b1f | ||
|
|
1be7fce116 | ||
|
|
5ab81dc732 | ||
|
|
72e0d87f77 | ||
|
|
923e8caf84 | ||
|
|
e8d47ffca1 | ||
|
|
2c32d093d0 | ||
|
|
ba6d7ac3f5 | ||
|
|
64ea5e341c | ||
|
|
a0ea0d8ca0 | ||
|
|
29404babcf | ||
|
|
3b1fd091f1 | ||
|
|
cd7d5be748 | ||
|
|
97e368312e | ||
|
|
28af77fcfc | ||
|
|
3ed6e2dd7d | ||
|
|
4c00c3209b | ||
|
|
c656eae2f3 | ||
|
|
456dc28c1b | ||
|
|
238204d280 | ||
|
|
55aec445b1 | ||
|
|
7f622927ff | ||
|
|
8384a10c2d | ||
|
|
619fa0c968 | ||
|
|
1fab46e67f | ||
|
|
727ec3fe46 | ||
|
|
a0e4ffdb5c | ||
|
|
9b8a66e3da | ||
|
|
9944cf3adf | ||
|
|
286079fe68 | ||
|
|
d492b04402 | ||
|
|
818409f675 | ||
|
|
9dd131142e | ||
|
|
f828d11f40 | ||
|
|
532639b820 | ||
|
|
0865a58632 | ||
|
|
0eb0e160e9 | ||
|
|
7126431f9f | ||
|
|
5a8baeff4c | ||
|
|
a2801aff41 | ||
|
|
76432120c4 | ||
|
|
3ce741ac2b | ||
|
|
ce1456cb92 | ||
|
|
f8cd3451ea | ||
|
|
cb84ca87c6 | ||
|
|
e1995f9d1b | ||
|
|
7f0b1489a2 | ||
|
|
aa2019be02 | ||
|
|
1ac78b5b82 | ||
|
|
847a3d5eec | ||
|
|
1a208ddd25 | ||
|
|
07c53e9a3d | ||
|
|
b600f5029e | ||
|
|
5f767f3fee | ||
|
|
8db7892f8c | ||
|
|
b325bf4bff | ||
|
|
5d355e9892 |
@@ -35,9 +35,9 @@ jobs:
|
|||||||
run: poetry run doc8
|
run: poetry run doc8
|
||||||
- name: Build html docs for Read the Docs
|
- name: Build html docs for Read the Docs
|
||||||
run: poetry run make -C doc html
|
run: poetry run make -C doc html
|
||||||
- name: Instal IDE docs dependencies
|
- name: Install IDE docs dependencies
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install dvisvgm preview-latex-style texlive texlive-fonts-extra texlive-latex-extra
|
sudo apt-get install dvisvgm preview-latex-style texlive texlive-fonts-extra texlive-latex-extra
|
||||||
- name: Build html docs for Pybricks Code IDE
|
- name: Build html docs for Pybricks Code IDE
|
||||||
run: poetry run make -C doc html SOURCEDIR=ide
|
run: poetry run make -C doc html TAG=ide
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ jobs:
|
|||||||
node-version: '14.x'
|
node-version: '14.x'
|
||||||
registry-url: 'https://registry.npmjs.org'
|
registry-url: 'https://registry.npmjs.org'
|
||||||
- run: yarn build
|
- run: yarn build
|
||||||
working-directory: doc/ide
|
working-directory: npm/ide-docs
|
||||||
- run: yarn publish
|
- run: yarn publish
|
||||||
working-directory: doc/ide
|
working-directory: npm/ide-docs
|
||||||
env:
|
env:
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}
|
NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
# .readthedocs.yaml
|
||||||
|
# Read the Docs configuration file
|
||||||
|
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||||
|
#
|
||||||
|
# Settings in the readthedocs online dashboard will be ignored.
|
||||||
|
|
||||||
|
# Required
|
||||||
|
version: 2
|
||||||
|
|
||||||
|
# Build documentation in the doc/main directory with Sphinx
|
||||||
|
sphinx:
|
||||||
|
configuration: doc/main/conf.py
|
||||||
|
|
||||||
|
# Build your docs in additional formats such as PDF
|
||||||
|
formats:
|
||||||
|
- pdf
|
||||||
|
|
||||||
|
# Set the version of Python and requirements required to build the docs
|
||||||
|
python:
|
||||||
|
version: 3.8
|
||||||
|
install:
|
||||||
|
- requirements: rtd-requirements.txt
|
||||||
@@ -1,12 +1,17 @@
|
|||||||
{
|
{
|
||||||
"python.pythonPath": "${workspaceFolder}/.venv",
|
"python.pythonPath": "${workspaceFolder}/.venv",
|
||||||
"python.formatting.provider": "black",
|
"python.formatting.provider": "black",
|
||||||
"python.linting.pycodestyleEnabled": false,
|
"python.linting.pylintEnabled": false,
|
||||||
"python.linting.flake8Enabled": true,
|
"python.linting.flake8Enabled": true,
|
||||||
|
"python.linting.pycodestyleEnabled": false,
|
||||||
"python.linting.enabled": true,
|
"python.linting.enabled": true,
|
||||||
|
"[python]": {
|
||||||
|
"editor.formatOnSave": true,
|
||||||
|
"editor.defaultFormatter": "ms-python.python"
|
||||||
|
},
|
||||||
"python.languageServer": "Pylance",
|
"python.languageServer": "Pylance",
|
||||||
"files.associations": {"*.inc": "restructuredtext"},
|
"files.associations": {"*.inc": "restructuredtext"},
|
||||||
"restructuredtext.confPath": "${workspaceFolder}/doc/api",
|
"restructuredtext.confPath": "${workspaceFolder}/doc/main",
|
||||||
"spellright.language": [
|
"spellright.language": [
|
||||||
"en_US"
|
"en_US"
|
||||||
],
|
],
|
||||||
@@ -34,5 +39,6 @@
|
|||||||
"plaintext",
|
"plaintext",
|
||||||
"python",
|
"python",
|
||||||
"restructuredtext",
|
"restructuredtext",
|
||||||
]
|
],
|
||||||
|
"rewrap.wrappingColumn": 78,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,3 +78,4 @@ thermistor
|
|||||||
toctree
|
toctree
|
||||||
TODO
|
TODO
|
||||||
UART
|
UART
|
||||||
|
utf-8
|
||||||
|
|||||||
@@ -0,0 +1,108 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
<!-- refer to https://keepachangelog.com/en/1.0.0/ for guidance -->
|
||||||
|
|
||||||
|
## 3.2.0b1 - 2022-06-02
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Code auto-completion for `hub.charger`, `hub.imu` and `hub.system`.
|
||||||
|
- Moved typing from several `.pyi` files to the actual python modules.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fixed code completion for `DCMotor` and `Motor` classes in MS Python VS Code extension.
|
||||||
|
- Fixed missing `DCMotor` type in `ev3devices`.
|
||||||
|
- Fixed type hint for `Motor.reset_angle()` in `pupdevices`.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Setter for acceleration can now also be used to set acceleration and
|
||||||
|
deceleration to different values, using a two-valued tuple.
|
||||||
|
|
||||||
|
## 3.1.0 - 2021-12-16
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Added maximum voltage setter for `DCMotor` and `Motor`.
|
||||||
|
- Documented `DriveBase.curve()` method.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Removed `duty` setting from `Control.limits` method.
|
||||||
|
- Removed `integral_range` setting from `Control.pid` method.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Fixed link to Color Light Matrix page.
|
||||||
|
- Fixed link to Inventor Hub page.
|
||||||
|
|
||||||
|
## 3.1.0rc1 - 2021-11-19
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Added `ColorLightMatrix` class.
|
||||||
|
- Added `LWP3Device` class.
|
||||||
|
|
||||||
|
**NOTE: version number after this point were from JavaScript package and do
|
||||||
|
not correspond to Pybricks firmware version numbers.**
|
||||||
|
|
||||||
|
## 1.6.0 - 2021-08-30
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- MicroPython module documentation.
|
||||||
|
- Examples for hub system functions including stop button and shutdown.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Build IDE docs as main docs with minor changes, instead of a completely
|
||||||
|
separate build.
|
||||||
|
- Moved motor control documentation to the motor page.
|
||||||
|
|
||||||
|
## 1.5.0 - 2021-07-01
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Documentation for Powered Up Remote Control.
|
||||||
|
|
||||||
|
## 1.4.0 - 2021-06-23
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Enabled beta content that was hidden for the 3.0 release.
|
||||||
|
- Added notice about using the latest beta version.
|
||||||
|
|
||||||
|
## 1.3.3 - 2021-05-21
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Match example snippet styling to IDE.
|
||||||
|
- Add more examples.
|
||||||
|
|
||||||
|
## 1.3.2 - 2021-04-26
|
||||||
|
|
||||||
|
## Changed
|
||||||
|
- Theme style fixes.
|
||||||
|
- Example code fixes
|
||||||
|
- Match doc version to firmware version.
|
||||||
|
|
||||||
|
## 1.3.1 - 2021-04-12
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Upgrade sphinx and rtd-theme to fix style issues.
|
||||||
|
|
||||||
|
## 1.3.0 - 2021-04-12
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- Removed features which not be in the official 3.0 release. These features
|
||||||
|
are still in beta. They'll come back in future releases once tested.
|
||||||
|
|
||||||
|
## 1.2.0 - 2021-04-09
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Moved installation guide to external site.
|
||||||
|
|
||||||
|
## 1.1.1 - 2021-02-14
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Added installation guide.
|
||||||
|
- Various documentation fixes.
|
||||||
|
|
||||||
|
## 1.1.0 - 2021-01-28
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Scrollbar styling.
|
||||||
|
|
||||||
|
## 1.0.0 - 2021-01-25
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Sphinx build output.
|
||||||
@@ -20,23 +20,103 @@ will actually be implemented.
|
|||||||
|
|
||||||
- Commit messages have a one-line subject, a blank line and a multiline body:
|
- Commit messages have a one-line subject, a blank line and a multiline body:
|
||||||
|
|
||||||
prefix: subject
|
prefix: Subject of the change.
|
||||||
|
|
||||||
body...
|
body...
|
||||||
|
|
||||||
- Use a prefix to categorize the change. Usually this is the path the the file
|
- Use a prefix to categorize the change:
|
||||||
being changed.
|
- Use the import path as the prefix whenever possible. Examples:
|
||||||
- If it is a documentation change, it can be shortened to `doc/<file>` (omit
|
- pybricks.tools: Add StopWatch class.
|
||||||
`api` from the path).
|
- pybricks.tools: Reorganize RST files.
|
||||||
- If it is an API change (in the `pybricks` folder), write `api/<file>`
|
- pybricks.tools.StopWatch: Fix return type.
|
||||||
instead of `pybricks/<file>`.
|
- pybricks.tools.wait: Add example of waiting.
|
||||||
- The subject briefly describes _what_ was changed, e.g. `fix typo`.
|
- pybricks.pupdevices: Fix all sensor class ports.
|
||||||
|
- umath.sin: Fix spelling of Hypotenuse.
|
||||||
|
- If an import path makes no sense, just use the file path without
|
||||||
|
extensions:
|
||||||
|
- .vscode/settings: Fix file associations.
|
||||||
|
- The subject briefly describes _what_ was changed. Use a short full sentence
|
||||||
|
as in the examples above.
|
||||||
- The body describes _why_ the change was made, e.g. `The word "sensor" was
|
- The body describes _why_ the change was made, e.g. `The word "sensor" was
|
||||||
spelled incorrectly`.
|
spelled incorrectly`.
|
||||||
- See the [commit history][commits] for more examples.
|
|
||||||
|
|
||||||
[commits]: https://github.com/pybricks/pybricks-api/commits/master
|
[commits]: https://github.com/pybricks/pybricks-api/commits/master
|
||||||
|
|
||||||
|
**General docstring principles:**
|
||||||
|
|
||||||
|
The stubs libraries in this repository have two different purposes:
|
||||||
|
1. Auto-generating documentation with Sphinx. For this purpose, the
|
||||||
|
documentation should be concise and clear.
|
||||||
|
2. Provide autocomplete and intellisense in code editors. For this purpose,
|
||||||
|
the code needs to be 100% correct. This way, computers can parse your code
|
||||||
|
correctly and tell you when something is wrong.
|
||||||
|
|
||||||
|
Since these objectives don't always align, we address these separately in the
|
||||||
|
stubs library:
|
||||||
|
|
||||||
|
1. The first line(s) of the docstring contain the function or method signature
|
||||||
|
as it should be displayed in the human-readable documentation.
|
||||||
|
2. The real function signature can be as complex as it needs to be to make it
|
||||||
|
correct for intellisense. Overloads can be uses if needed.
|
||||||
|
|
||||||
|
In the rare case where the docstring signature is the same as the typed
|
||||||
|
version, we'll still include it for consistency.
|
||||||
|
|
||||||
|
**Docstring details:**
|
||||||
|
|
||||||
|
Make sure to look at existing function signatures and docstrings for
|
||||||
|
inspiration when documenting new functionality. As an example, consider:
|
||||||
|
|
||||||
|
```python
|
||||||
|
def run_until_stalled(
|
||||||
|
self,
|
||||||
|
speed: Number,
|
||||||
|
then: Stop = Stop.COAST,
|
||||||
|
duty_limit: Optional[Number] = None,
|
||||||
|
) -> int:
|
||||||
|
"""
|
||||||
|
run_until_stalled(speed, then=Stop.COAST, duty_limit=None) -> int: deg
|
||||||
|
|
||||||
|
Runs the motor at a constant speed until it stalls.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
speed (Number, deg/s): Speed of the motor.
|
||||||
|
then (Stop): What to do after coming to a standstill.
|
||||||
|
duty_limit (Number, %): Duty cycle limit during this
|
||||||
|
command. This is useful to avoid applying the full motor
|
||||||
|
torque to a geared or lever mechanism. If it is ``None``, the
|
||||||
|
duty limit won't be changed during this command.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Angle at which the motor becomes stalled.
|
||||||
|
"""
|
||||||
|
```
|
||||||
|
The real method signature at the top contains the full detail, including the
|
||||||
|
type of each argument and return value.
|
||||||
|
|
||||||
|
The docstring starts with the signature. Use more than one signature if needed
|
||||||
|
to represent overloaded methods. The signatures are written in the way they
|
||||||
|
should be displayed in the docs:
|
||||||
|
- Argument types are omitted because they are also shown with the argument
|
||||||
|
description below.
|
||||||
|
- Default values should be given (``then=Stop.COAST``).
|
||||||
|
- The return type should be given (``-> int``). When applicable, include
|
||||||
|
the unit of the return value, so it becomes ``-> int: deg``
|
||||||
|
|
||||||
|
Then follows a concise description of what this method, function, or class
|
||||||
|
does.
|
||||||
|
|
||||||
|
Then follows a list of arguments:
|
||||||
|
- For each argument, include the expected type and unit if applicable, e.g.
|
||||||
|
``(int)`` or ``(Number, deg/s)``.
|
||||||
|
- Use ``Number`` when ``int`` and ``float`` are both allowed.
|
||||||
|
- If the description is long, use the indentation shown above.
|
||||||
|
- Make it readable. Instead
|
||||||
|
of ``Union[float, SupportsFloat, complex, SupportsComplex]``,
|
||||||
|
just say _float or complex_.
|
||||||
|
|
||||||
|
Then follows a description of the return value. The type is omitted here since
|
||||||
|
it is already include in the docstring signature.
|
||||||
|
|
||||||
**Development environment:**
|
**Development environment:**
|
||||||
|
|
||||||
@@ -46,8 +126,8 @@ Prerequisites:
|
|||||||
- [Python 3][python]
|
- [Python 3][python]
|
||||||
- [Poetry][poetry]
|
- [Poetry][poetry]
|
||||||
|
|
||||||
Information on installing prerequisites can be found on the [pybricks-micropython
|
Information on installing prerequisites can be found on the
|
||||||
wiki][wiki].
|
[pybricks-micropython contributor's guide][contributing].
|
||||||
|
|
||||||
Initial setup:
|
Initial setup:
|
||||||
|
|
||||||
@@ -59,15 +139,24 @@ Build docs:
|
|||||||
|
|
||||||
# Linux
|
# Linux
|
||||||
poetry run make -C doc html
|
poetry run make -C doc html
|
||||||
xdg-open doc/api/build/html/index.html
|
xdg-open doc/main/build/html/index.html
|
||||||
|
|
||||||
# macOS
|
# macOS
|
||||||
poetry run make -C doc html
|
poetry run make -C doc html
|
||||||
open doc/api/build/html/index.html
|
open doc/main/build/html/index.html
|
||||||
|
|
||||||
# Windows (PowerShell)
|
# Windows (PowerShell)
|
||||||
poetry run doc\make.bat html
|
poetry run doc\make.bat html
|
||||||
Invoke-Item doc\api\build\html\index.html
|
Invoke-Item doc\main\build\html\index.html
|
||||||
|
|
||||||
|
Building IDE docs variant:
|
||||||
|
|
||||||
|
# Linux/macOS
|
||||||
|
poetry run make -C doc html TAG=ide
|
||||||
|
|
||||||
|
# Windows (PowerShell)
|
||||||
|
$env:TAG="ide"
|
||||||
|
poetry run doc\make.bat html
|
||||||
|
|
||||||
Linting:
|
Linting:
|
||||||
|
|
||||||
@@ -78,4 +167,4 @@ Linting:
|
|||||||
[git]: https://git-scm.com/
|
[git]: https://git-scm.com/
|
||||||
[python]: https://www.python.org/
|
[python]: https://www.python.org/
|
||||||
[poetry]: https://python-poetry.org/
|
[poetry]: https://python-poetry.org/
|
||||||
[wiki]: https://github.com/pybricks-micropython/wiki
|
[contributing]: https://github.com/pybricks/pybricks-micropython/blob/master/CONTRIBUTING.md
|
||||||
|
|||||||
@@ -5,12 +5,16 @@
|
|||||||
SPHINXOPTS = -W
|
SPHINXOPTS = -W
|
||||||
SPHINXBUILD = sphinx-build
|
SPHINXBUILD = sphinx-build
|
||||||
SPHINXPROJ = Pybricks
|
SPHINXPROJ = Pybricks
|
||||||
SOURCEDIR = api
|
SOURCEDIR = main
|
||||||
BUILDDIR = "$(SOURCEDIR)"/build
|
BUILDDIR = "$(SOURCEDIR)"/build
|
||||||
|
TAG = main
|
||||||
|
ifeq ($(BETA),1)
|
||||||
|
BETATAG = "-tbeta"
|
||||||
|
endif
|
||||||
|
|
||||||
# Put it first so that "make" without argument is like "make help".
|
# Put it first so that "make" without argument is like "make help".
|
||||||
help:
|
help:
|
||||||
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(TAG) $(BETATAG) $(O)
|
||||||
|
|
||||||
.PHONY: help Makefile
|
.PHONY: help Makefile
|
||||||
|
|
||||||
@@ -21,4 +25,4 @@ diagrams:
|
|||||||
# Catch-all target: route all unknown targets to Sphinx using the new
|
# Catch-all target: route all unknown targets to Sphinx using the new
|
||||||
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
||||||
%: Makefile
|
%: Makefile
|
||||||
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) -t $(TAG) $(BETATAG) $(O)
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
|
||||||
# Pybricks documentation build configuration file
|
|
||||||
#
|
|
||||||
import os
|
|
||||||
|
|
||||||
# General information about the project.
|
|
||||||
project = 'pybricks'
|
|
||||||
copyright = '2018-2021 The Pybricks Authors'
|
|
||||||
author = ''
|
|
||||||
|
|
||||||
_TITLE = 'Pybricks Modules and Examples'
|
|
||||||
_DISCLAIMER = 'LEGO, the LEGO logo, MINDSTORMS and the MINDSTORMS EV3 logo are\
|
|
||||||
trademarks and/or copyrights of the LEGO Group of companies \
|
|
||||||
which does not sponsor, authorize or endorse this site.'
|
|
||||||
|
|
||||||
html_favicon = '../common/images/favicon.ico'
|
|
||||||
html_logo = '../common/images/pybricks-logo-rtd.png'
|
|
||||||
latex_logo = '../common/images/pybricks-logo-large.png'
|
|
||||||
|
|
||||||
exec(open(os.path.abspath("../common/conf.py")).read())
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
0 Name: pupmotors.ldr
|
|
||||||
0 Author: Pybricks {laurens@pybricks.com}
|
|
||||||
0 !LICENSE MIT
|
|
||||||
0 ROTATION CENTER 0 0 0 1 "Custom"
|
|
||||||
0 ROTATION CONFIG 0 0
|
|
||||||
1 15 430 -96 190 0 0 1 1 0 0 0 1 0 54675c01.dat
|
|
||||||
1 15 430 -96 400 0 0 1 1 0 0 0 1 0 54675c01.dat
|
|
||||||
1 322 430 -72 30 0 0 1 1 0 0 0 1 0 54696c01.dat
|
|
||||||
1 71 430 -72 -180 0 0 1 1 0 0 0 1 0 54696c01.dat
|
|
||||||
1 71 190 -144 -180 1 0 0 0 1 0 0 0 1 22169c01.dat
|
|
||||||
1 71 -20 -216 -140 1 0 0 0 1 0 0 0 1 22172c01.dat
|
|
||||||
1 15 120 -320 160 1 0 0 0 1 0 0 0 1 26913c01.dat
|
|
||||||
0
|
|
||||||
|
Before Width: | Height: | Size: 866 KiB |
@@ -1,38 +0,0 @@
|
|||||||
:mod:`hubs <pybricks.hubs>` -- Programmable Hubs
|
|
||||||
================================================
|
|
||||||
|
|
||||||
.. module:: pybricks.hubs
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
:hidden:
|
|
||||||
|
|
||||||
movehub
|
|
||||||
cityhub
|
|
||||||
technichub
|
|
||||||
ev3brick
|
|
||||||
|
|
||||||
.. pybricks-classlink:: MoveHub
|
|
||||||
|
|
||||||
.. figure:: ../../api/images/movehub.png
|
|
||||||
:height: 10 em
|
|
||||||
:target: movehub.html
|
|
||||||
|
|
||||||
.. pybricks-classlink:: CityHub
|
|
||||||
|
|
||||||
.. figure:: ../../api/images/cityhub.png
|
|
||||||
:height: 10 em
|
|
||||||
:target: cityhub.html
|
|
||||||
|
|
||||||
.. pybricks-classlink:: TechnicHub
|
|
||||||
|
|
||||||
.. figure:: ../../api/images/technichub.png
|
|
||||||
:height: 10 em
|
|
||||||
:target: technichub.html
|
|
||||||
|
|
||||||
.. pybricks-classlink:: EV3Brick
|
|
||||||
|
|
||||||
.. figure:: ../../api/images/ev3brick.png
|
|
||||||
:height: 10 em
|
|
||||||
:target: ev3brick.html
|
|
||||||
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
Move Hub
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
.. _fig_movehub:
|
|
||||||
|
|
||||||
.. figure:: ../../api/images/movehub_label.png
|
|
||||||
:height: 15 em
|
|
||||||
|
|
||||||
.. autoclass:: pybricks.hubs.MoveHub
|
|
||||||
:no-members:
|
|
||||||
|
|
||||||
.. rubric:: Using the hub status light
|
|
||||||
|
|
||||||
.. automethod:: pybricks.hubs::MoveHub.light.on
|
|
||||||
|
|
||||||
.. automethod:: pybricks.hubs::MoveHub.light.off
|
|
||||||
|
|
||||||
.. automethod:: pybricks.hubs::MoveHub.light.blink
|
|
||||||
|
|
||||||
.. automethod:: pybricks.hubs::MoveHub.light.animate
|
|
||||||
|
|
||||||
.. rubric:: Using the battery
|
|
||||||
|
|
||||||
.. automethod:: pybricks.hubs::MoveHub.battery.voltage
|
|
||||||
|
|
||||||
.. automethod:: pybricks.hubs::MoveHub.battery.current
|
|
||||||
|
|
||||||
Status light examples
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
Turning the light on and off
|
|
||||||
******************************
|
|
||||||
|
|
||||||
.. literalinclude::
|
|
||||||
../../../examples/pup/hub_movehub/light_off.py
|
|
||||||
|
|
||||||
Making the light blink
|
|
||||||
******************************
|
|
||||||
|
|
||||||
.. literalinclude::
|
|
||||||
../../../examples/pup/hub_movehub/light_blink.py
|
|
||||||
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
Technic Hub
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
.. figure:: ../../api/images/technichub.png
|
|
||||||
:height: 15 em
|
|
||||||
|
|
||||||
.. class:: TechnicHub
|
|
||||||
|
|
||||||
.. rubric:: Using the hub status light
|
|
||||||
|
|
||||||
.. automethod:: pybricks.hubs::TechnicHub.light.on
|
|
||||||
|
|
||||||
.. automethod:: pybricks.hubs::TechnicHub.light.off
|
|
||||||
|
|
||||||
.. automethod:: pybricks.hubs::TechnicHub.light.blink
|
|
||||||
|
|
||||||
.. automethod:: pybricks.hubs::TechnicHub.light.animate
|
|
||||||
|
|
||||||
.. rubric:: Using the battery
|
|
||||||
|
|
||||||
.. automethod:: pybricks.hubs::TechnicHub.battery.voltage
|
|
||||||
|
|
||||||
.. automethod:: pybricks.hubs::TechnicHub.battery.current
|
|
||||||
|
|
||||||
Status light examples
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
Turning the light on and off
|
|
||||||
****************************
|
|
||||||
|
|
||||||
.. literalinclude::
|
|
||||||
../../../examples/pup/hub_technichub/light_off.py
|
|
||||||
|
|
||||||
Changing brightness and using custom colors
|
|
||||||
*******************************************
|
|
||||||
|
|
||||||
.. literalinclude::
|
|
||||||
../../../examples/pup/hub_technichub/light_hsv.py
|
|
||||||
|
|
||||||
Making the light blink
|
|
||||||
**********************
|
|
||||||
|
|
||||||
.. literalinclude::
|
|
||||||
../../../examples/pup/hub_technichub/light_blink.py
|
|
||||||
|
|
||||||
Creating light animations
|
|
||||||
*************************
|
|
||||||
|
|
||||||
.. literalinclude::
|
|
||||||
../../../examples/pup/hub_technichub/light_animate.py
|
|
||||||
|
Before Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 1009 KiB |
@@ -1,81 +0,0 @@
|
|||||||
Pybricks API Documentation
|
|
||||||
==================================================================
|
|
||||||
|
|
||||||
This documentation has everything you need to install Pybricks and
|
|
||||||
run your first scripts.
|
|
||||||
|
|
||||||
|
|
||||||
**Step 1: Install Pybricks**
|
|
||||||
|
|
||||||
Pybricks scripts are the same across all hubs. The only difference is in how
|
|
||||||
you install Pybricks and how you run scripts. To get started, click one of
|
|
||||||
the platforms below.
|
|
||||||
|
|
||||||
.. list-table::
|
|
||||||
|
|
||||||
* - **MINDSTORMS EV3**
|
|
||||||
- **Powered Up (Technic/City/BOOST)**
|
|
||||||
- **SPIKE / MINDSTORMS Inventor**
|
|
||||||
|
|
||||||
* - .. image:: ../api/images/ev3brick.png
|
|
||||||
:target: https://pybricks.com/install/mindstorms-ev3/installation
|
|
||||||
|
|
||||||
- .. figure:: ../api/images/powereduphubs.png
|
|
||||||
:target: https://pybricks.com/install/technic-boost-city/
|
|
||||||
|
|
||||||
- .. figure:: ../api/images/primeinventorhub.png
|
|
||||||
:target: https://pybricks.com/install/spike-mindstorms/
|
|
||||||
|
|
||||||
|
|
||||||
**Step 2: Start coding!**
|
|
||||||
|
|
||||||
After you've followed the installation steps for your hub,
|
|
||||||
check out the Pybricks modules in the left hand menu to see what
|
|
||||||
you can do.
|
|
||||||
|
|
||||||
**Step 3: Share what you made (or ask for help!)**
|
|
||||||
|
|
||||||
Got questions or issues? Please share your
|
|
||||||
findings on our `support page`_ so we can make Pybricks even better.
|
|
||||||
*Thank you!*
|
|
||||||
|
|
||||||
|
|
||||||
.. _support page: https://github.com/pybricks/support/issues/
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
:caption: Table of Contents
|
|
||||||
:hidden:
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
:caption: Pybricks
|
|
||||||
:hidden:
|
|
||||||
|
|
||||||
Home Page <https://pybricks.com>
|
|
||||||
Installation <https://pybricks.com/install/>
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
:caption: Pybricks Modules
|
|
||||||
:hidden:
|
|
||||||
|
|
||||||
hubs/index
|
|
||||||
pupdevices/index
|
|
||||||
ev3devices
|
|
||||||
nxtdevices
|
|
||||||
iodevices/index
|
|
||||||
parameters/index
|
|
||||||
tools/index
|
|
||||||
robotics
|
|
||||||
media
|
|
||||||
messaging
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
:caption: Engineering Extras
|
|
||||||
:hidden:
|
|
||||||
|
|
||||||
signaltypes
|
|
||||||
motors
|
|
||||||
.. frames
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
:mod:`iodevices <pybricks.iodevices>` -- Generic I/O Devices
|
|
||||||
============================================================
|
|
||||||
|
|
||||||
.. automodule:: pybricks.iodevices
|
|
||||||
:no-members:
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
:hidden:
|
|
||||||
|
|
||||||
pupdevice
|
|
||||||
i2cdevice
|
|
||||||
uartdevice
|
|
||||||
analogsensor
|
|
||||||
lumpdevice
|
|
||||||
dcmotor
|
|
||||||
ev3devsensor
|
|
||||||
|
|
||||||
.. pybricks-classlink:: PUPDevice
|
|
||||||
|
|
||||||
.. figure:: ../../api/images/sensor_pup.png
|
|
||||||
:width: 70 %
|
|
||||||
:target: pupdevice.html
|
|
||||||
|
|
||||||
This class is only available on Powered Up hubs.
|
|
||||||
|
|
||||||
.. pybricks-classlink:: I2CDevice
|
|
||||||
|
|
||||||
.. figure:: ../../api/images/sensor_rj12_bluegreen.png
|
|
||||||
:width: 25 %
|
|
||||||
:target: i2cdevice.html
|
|
||||||
|
|
||||||
.. pybricks-classlink:: UARTDevice
|
|
||||||
|
|
||||||
.. figure:: ../../api/images/sensor_rj12_gray.png
|
|
||||||
:width: 25 %
|
|
||||||
:target: uartdevice.html
|
|
||||||
|
|
||||||
.. pybricks-classlink:: AnalogSensor
|
|
||||||
|
|
||||||
.. figure:: ../../api/images/sensor_rj12_brown.png
|
|
||||||
:width: 25 %
|
|
||||||
:target: analogsensor.html
|
|
||||||
|
|
||||||
.. pybricks-classlink:: LUMPDevice
|
|
||||||
|
|
||||||
.. figure:: ../../api/images/sensor_rj12_green.png
|
|
||||||
:width: 25 %
|
|
||||||
:target: lumpdevice.html
|
|
||||||
|
|
||||||
.. pybricks-classlink:: DCMotor
|
|
||||||
|
|
||||||
.. figure:: ../../api/images/rcxmotor.png
|
|
||||||
:width: 40 %
|
|
||||||
:target: dcmotor.html
|
|
||||||
|
|
||||||
.. pybricks-classlink:: Ev3devSensor
|
|
||||||
|
|
||||||
.. figure:: ../../api/images/sensor_ev3dev.png
|
|
||||||
:width: 70 %
|
|
||||||
:target: ev3devsensor.html
|
|
||||||
@@ -1,139 +0,0 @@
|
|||||||
More about Motors
|
|
||||||
===========================================
|
|
||||||
|
|
||||||
.. Motor Tips & Tricks
|
|
||||||
.. ^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
.. The difference between ``run_angle`` and ``run_target``
|
|
||||||
.. -------------------------------------------------------
|
|
||||||
|
|
||||||
.. *TODO*
|
|
||||||
|
|
||||||
.. .. _absangles:
|
|
||||||
|
|
||||||
.. Absolute angles
|
|
||||||
.. ----------------------------
|
|
||||||
|
|
||||||
.. .. todo::
|
|
||||||
|
|
||||||
.. This section will be included in a future release.
|
|
||||||
|
|
||||||
.. .. _stalled:
|
|
||||||
|
|
||||||
.. Using stall detection
|
|
||||||
.. ---------------------
|
|
||||||
|
|
||||||
.. .. todo::
|
|
||||||
|
|
||||||
.. This section will be included in a future release.
|
|
||||||
|
|
||||||
.. When a motor cannot move any further despite using the maximally allowed
|
|
||||||
.. torque we say that the motor is stalled. Something could be blocking the
|
|
||||||
.. motor, or the load is just too heavy. For example, if you manually hold
|
|
||||||
.. the motor shaft still while the motor is busy executing a command, the
|
|
||||||
.. motor will stall.
|
|
||||||
|
|
||||||
.. What can I do with stall detection?
|
|
||||||
.. +++++++++++++++++++++++++++++++++++
|
|
||||||
|
|
||||||
.. Stall detection is useful to detect that a motor can't move any further.
|
|
||||||
.. This can be used to detect an endpoint of a mechanism. For example, you
|
|
||||||
.. can detect whether a robotic hand is fully closed, because the gripper
|
|
||||||
.. motor simply can't go further. This way, you don't need a touch or light
|
|
||||||
.. sensor to detect this.
|
|
||||||
|
|
||||||
.. *TODO: How, what, why. Explain run_until_stalled. Rack & pinion example.*
|
|
||||||
|
|
||||||
.. When is a motor stalled?
|
|
||||||
.. ++++++++++++++++++++++++
|
|
||||||
|
|
||||||
.. TODO
|
|
||||||
|
|
||||||
.. .. _gears:
|
|
||||||
|
|
||||||
.. Using gears
|
|
||||||
.. -----------------
|
|
||||||
|
|
||||||
.. .. todo::
|
|
||||||
|
|
||||||
.. This section will be included in a future release.
|
|
||||||
|
|
||||||
.. Many LEGO robots use mechanisms with gears to change the speed and torque
|
|
||||||
.. output of a motor. Let's consider the following dial mechanism.
|
|
||||||
|
|
||||||
.. *TODO: INSERT PICTURE OF MOTOR WITH 12z gear AND 36z gear.*
|
|
||||||
|
|
||||||
.. This gear train slows down the dial on the output axle by a factor of 3.
|
|
||||||
.. Therefore, if you want to rotate the dial by 90 degrees, the motor has to
|
|
||||||
.. rotate by 270 degrees. To turn at 200 degrees per second, the motor has to
|
|
||||||
.. turn at 600 degrees per second, and so on.
|
|
||||||
|
|
||||||
.. To avoid using this factor 3 everywhere in your program, you can use the
|
|
||||||
.. `gears` setting of the ``Motor`` object, as shown in this example::
|
|
||||||
|
|
||||||
.. # This example uses the EV3 brick, but the same
|
|
||||||
.. # technique applies to other programmable hubs.
|
|
||||||
.. ev3 = EV3Brick()
|
|
||||||
|
|
||||||
.. # Initialize the motor. See picture above.
|
|
||||||
.. dial = Motor(Port.C, Direction.COUNTERCLOCKWISE, gears=[12, 36])
|
|
||||||
|
|
||||||
.. # Turn the dial by 90-degrees
|
|
||||||
.. dial.run_angle(500, 90)
|
|
||||||
|
|
||||||
.. # Print the dial angle
|
|
||||||
.. print(dial.angle())
|
|
||||||
|
|
||||||
.. # Turn the dial back to the original position
|
|
||||||
.. dial.run_target(500, 0)
|
|
||||||
|
|
||||||
.. When you use any of the other methods, the same scaling is applied. For
|
|
||||||
.. example, you can print the angle of the dial as shown above. This will print
|
|
||||||
.. 90 (approximately), even though the motor has turned 270 degrees.
|
|
||||||
|
|
||||||
.. Notice that there is no magic going on. It is just a convenient scaling
|
|
||||||
.. function. This helps you organize your code. For example, if you change
|
|
||||||
.. your mechanism to use different gears, you only have to change the first
|
|
||||||
.. line of this example.
|
|
||||||
|
|
||||||
.. _control:
|
|
||||||
|
|
||||||
The Control Class
|
|
||||||
^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
The ``Motor`` class uses PID control to accurately track your commanded target
|
|
||||||
angles. Similarly, the ``DriveBase`` class uses two of such controllers:
|
|
||||||
one to control the heading and one to control the traveled distance.
|
|
||||||
|
|
||||||
You can change the control settings through the following attributes, which are
|
|
||||||
instances of the ``Control`` class given below.:
|
|
||||||
|
|
||||||
- ``Motor.control``
|
|
||||||
- ``DriveBase.heading_control``
|
|
||||||
- ``DriveBase.distance_control``
|
|
||||||
|
|
||||||
You can only change the settings while the controller is stopped. For example,
|
|
||||||
you can set the settings at the beginning of your program. Alternatively, first
|
|
||||||
call ``stop()`` to make your ``Motor`` or ``DriveBase`` stop, and then change
|
|
||||||
the settings.
|
|
||||||
|
|
||||||
.. autoclass:: pybricks._common.Control
|
|
||||||
:no-members:
|
|
||||||
|
|
||||||
.. rubric:: Status
|
|
||||||
|
|
||||||
.. automethod:: pybricks._common.Control.done
|
|
||||||
|
|
||||||
.. automethod:: pybricks._common.Control.stalled
|
|
||||||
|
|
||||||
.. automethod:: pybricks._common.Control.load
|
|
||||||
|
|
||||||
.. rubric:: Settings
|
|
||||||
|
|
||||||
.. automethod:: pybricks._common.Control.limits
|
|
||||||
|
|
||||||
.. automethod:: pybricks._common.Control.pid
|
|
||||||
|
|
||||||
.. automethod:: pybricks._common.Control.target_tolerances
|
|
||||||
|
|
||||||
.. automethod:: pybricks._common.Control.stall_tolerances
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
Port
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
.. class:: Port
|
|
||||||
|
|
||||||
Input and output ports:
|
|
||||||
|
|
||||||
.. autoattribute:: pybricks.parameters.Port.A
|
|
||||||
:annotation:
|
|
||||||
|
|
||||||
.. autoattribute:: pybricks.parameters.Port.B
|
|
||||||
:annotation:
|
|
||||||
|
|
||||||
.. autoattribute:: pybricks.parameters.Port.C
|
|
||||||
:annotation:
|
|
||||||
|
|
||||||
.. autoattribute:: pybricks.parameters.Port.D
|
|
||||||
:annotation:
|
|
||||||
|
|
||||||
.. autoattribute:: pybricks.parameters.Port.E
|
|
||||||
:annotation:
|
|
||||||
|
|
||||||
.. autoattribute:: pybricks.parameters.Port.F
|
|
||||||
:annotation:
|
|
||||||
|
|
||||||
EV3 Sensor ports:
|
|
||||||
|
|
||||||
.. autoattribute:: pybricks.parameters.Port.S1
|
|
||||||
:annotation:
|
|
||||||
|
|
||||||
.. autoattribute:: pybricks.parameters.Port.S2
|
|
||||||
:annotation:
|
|
||||||
|
|
||||||
.. autoattribute:: pybricks.parameters.Port.S3
|
|
||||||
:annotation:
|
|
||||||
|
|
||||||
.. autoattribute:: pybricks.parameters.Port.S4
|
|
||||||
:annotation:
|
|
||||||
@@ -27,22 +27,17 @@ from docutils import nodes
|
|||||||
from docutils.parsers.rst.directives import flag
|
from docutils.parsers.rst.directives import flag
|
||||||
from docutils.parsers.rst import Directive
|
from docutils.parsers.rst import Directive
|
||||||
from sphinx.application import Sphinx
|
from sphinx.application import Sphinx
|
||||||
from sphinx.domains.python import PyClassmember, PythonDomain
|
|
||||||
import toml
|
import toml
|
||||||
|
|
||||||
TOP_DIR = os.path.abspath(os.path.join('..', '..'))
|
TOP_DIR = os.path.abspath(os.path.join("..", ".."))
|
||||||
sys.path.insert(0, TOP_DIR)
|
sys.path.insert(0, os.path.join(TOP_DIR, "src"))
|
||||||
sys.path.append(os.path.abspath('../common/extensions'))
|
sys.path.append(os.path.abspath("../common/extensions"))
|
||||||
|
|
||||||
from pybricks.hubs import EV3Brick # noqa E402
|
|
||||||
from pybricks.media.ev3dev import Image # noqa E402
|
|
||||||
from pybricks._common import Speaker # noqa E402
|
|
||||||
|
|
||||||
# ON_RTD is whether we are on readthedocs.org
|
# ON_RTD is whether we are on readthedocs.org
|
||||||
# this line of code grabbed from docs.readthedocs.org
|
# this line of code grabbed from docs.readthedocs.org
|
||||||
ON_RTD = os.environ.get('READTHEDOCS', None) == 'True'
|
ON_RTD = os.environ.get("READTHEDOCS", None) == "True"
|
||||||
|
|
||||||
_pyproject = toml.load(os.path.join(TOP_DIR, 'pyproject.toml'))
|
_pyproject = toml.load(os.path.join(TOP_DIR, "pyproject.toml"))
|
||||||
|
|
||||||
# -- General configuration ------------------------------------------------
|
# -- General configuration ------------------------------------------------
|
||||||
|
|
||||||
@@ -54,25 +49,29 @@ _pyproject = toml.load(os.path.join(TOP_DIR, 'pyproject.toml'))
|
|||||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||||
# ones.
|
# ones.
|
||||||
extensions = [
|
extensions = [
|
||||||
'sphinx.ext.autodoc',
|
"sphinx.ext.autodoc",
|
||||||
'sphinx.ext.napoleon',
|
"sphinx.ext.napoleon",
|
||||||
'sphinx.ext.todo',
|
"sphinx.ext.todo",
|
||||||
'sphinx.ext.mathjax',
|
"sphinx.ext.mathjax",
|
||||||
'color',
|
# Custom Pybricks extensions
|
||||||
'classlink',
|
"color",
|
||||||
|
"classlink",
|
||||||
|
"requirements",
|
||||||
|
"requirements-static",
|
||||||
|
"versionchanged",
|
||||||
]
|
]
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
templates_path = ['../common/_templates']
|
templates_path = ["../common/_templates"]
|
||||||
|
|
||||||
# The suffix(es) of source filenames.
|
# The suffix(es) of source filenames.
|
||||||
# You can specify multiple suffix as a list of string:
|
# You can specify multiple suffix as a list of string:
|
||||||
#
|
#
|
||||||
# source_suffix = ['.rst', '.md']
|
# source_suffix = ['.rst', '.md']
|
||||||
source_suffix = '.rst'
|
source_suffix = ".rst"
|
||||||
|
|
||||||
# The master toctree document.
|
# The master toctree document.
|
||||||
master_doc = 'index'
|
master_doc = "index"
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
# |version| and |release|, also used in various other places throughout the
|
# |version| and |release|, also used in various other places throughout the
|
||||||
@@ -81,17 +80,17 @@ master_doc = 'index'
|
|||||||
# The full version, including alpha/beta/rc tags.
|
# The full version, including alpha/beta/rc tags.
|
||||||
release = "v" + _pyproject["tool"]["poetry"]["version"]
|
release = "v" + _pyproject["tool"]["poetry"]["version"]
|
||||||
# The short X.Y version.
|
# The short X.Y version.
|
||||||
version = re.match(r'(v\d+\.\d+)', release)[0]
|
version = re.match(r"(v\d+\.\d+)", release)[0]
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
# for a list of supported languages.
|
# for a list of supported languages.
|
||||||
#
|
#
|
||||||
# This is also used if you do content translation via gettext catalogs.
|
# This is also used if you do content translation via gettext catalogs.
|
||||||
# Usually you set "language" from the command line for these cases.
|
# Usually you set "language" from the command line for these cases.
|
||||||
language = None
|
language = "en"
|
||||||
|
|
||||||
# The name of the Pygments (syntax highlighting) style to use.
|
# The name of the Pygments (syntax highlighting) style to use.
|
||||||
pygments_style = 'xcode'
|
pygments_style = "xcode"
|
||||||
|
|
||||||
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
||||||
todo_include_todos = True
|
todo_include_todos = True
|
||||||
@@ -99,10 +98,10 @@ todo_include_todos = True
|
|||||||
# Figure numbering
|
# Figure numbering
|
||||||
numfig = True
|
numfig = True
|
||||||
numfig_format = {
|
numfig_format = {
|
||||||
'figure': 'Figure %s',
|
"figure": "Figure %s",
|
||||||
'table': 'Table %s',
|
"table": "Table %s",
|
||||||
'code-block': 'Listing %s',
|
"code-block": "Listing %s",
|
||||||
'section': 'Section %s'
|
"section": "Section %s",
|
||||||
}
|
}
|
||||||
|
|
||||||
# Find cross-reference errors
|
# Find cross-reference errors
|
||||||
@@ -110,45 +109,49 @@ nitpicky = True
|
|||||||
|
|
||||||
# https://stackoverflow.com/a/30624034/1976323
|
# https://stackoverflow.com/a/30624034/1976323
|
||||||
nitpick_ignore = [
|
nitpick_ignore = [
|
||||||
('py:class', 'bool'),
|
("py:class", "bool"),
|
||||||
('py:class', 'bytearray'),
|
("py:class", "bytearray"),
|
||||||
('py:class', 'bytes'),
|
("py:class", "bytes"),
|
||||||
('py:class', 'callable'),
|
("py:class", "callable"),
|
||||||
('py:class', 'dict'),
|
("py:class", "dict"),
|
||||||
('py:class', 'float'),
|
("py:class", "float"),
|
||||||
('py:class', 'int'),
|
("py:class", "int"),
|
||||||
('py:class', 'iter'),
|
("py:class", "iter"),
|
||||||
('py:class', 'list'),
|
("py:class", "list"),
|
||||||
('py:class', 'object'),
|
("py:class", "object"),
|
||||||
('py:class', 'str'),
|
("py:class", "str"),
|
||||||
('py:class', 'tuple'),
|
("py:class", "tuple"),
|
||||||
('py:exc', 'OSError'),
|
("py:exc", "OSError"),
|
||||||
('py:exc', 'RuntimeError'),
|
("py:exc", "RuntimeError"),
|
||||||
('py:exc', 'TypeError'),
|
("py:exc", "TypeError"),
|
||||||
('py:exc', 'ValueError'),
|
("py:exc", "ValueError"),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# not sure why, but this is needed for typing.IO in uselect
|
||||||
|
nitpick_ignore.append(("py:obj", "typing.IO"))
|
||||||
|
|
||||||
# -- Autodoc options ------------------------------------------------------
|
# -- Autodoc options ------------------------------------------------------
|
||||||
|
|
||||||
autodoc_member_order = 'bysource'
|
autodoc_member_order = "bysource"
|
||||||
autodoc_default_options = {
|
autodoc_default_options = {
|
||||||
'members': True,
|
"members": True,
|
||||||
'undoc-members': True,
|
"undoc-members": True,
|
||||||
}
|
}
|
||||||
autoclass_content = 'both' # This ensures init arguments are not ignored
|
autoclass_content = "both" # This ensures init arguments are not ignored
|
||||||
add_module_names = False # Hide module name
|
add_module_names = False # Hide module name
|
||||||
|
|
||||||
# -- Options for HTML output ----------------------------------------------
|
# -- Options for HTML output ----------------------------------------------
|
||||||
|
|
||||||
if ON_RTD:
|
if ON_RTD:
|
||||||
html_theme = 'default'
|
html_theme = "default"
|
||||||
else:
|
else:
|
||||||
import sphinx_rtd_theme
|
import sphinx_rtd_theme
|
||||||
html_theme = 'sphinx_rtd_theme'
|
|
||||||
|
html_theme = "sphinx_rtd_theme"
|
||||||
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
|
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
|
||||||
|
|
||||||
html_context = {
|
html_context = {
|
||||||
'disclaimer': _DISCLAIMER,
|
"disclaimer": _DISCLAIMER,
|
||||||
}
|
}
|
||||||
|
|
||||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||||
@@ -161,14 +164,14 @@ html_context = {
|
|||||||
# documentation.
|
# documentation.
|
||||||
#
|
#
|
||||||
html_theme_options = {
|
html_theme_options = {
|
||||||
'style_external_links': True,
|
"style_external_links": True,
|
||||||
'logo_only': True,
|
"logo_only": True,
|
||||||
}
|
}
|
||||||
|
|
||||||
# Add any paths that contain custom static files (such as style sheets) here,
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
# relative to this directory. They are copied after the builtin static files,
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||||
html_static_path = ['../common/_static']
|
html_static_path = ["../common/_static"]
|
||||||
|
|
||||||
# Custom sidebar templates, must be a dictionary that maps document names
|
# Custom sidebar templates, must be a dictionary that maps document names
|
||||||
# to template names.
|
# to template names.
|
||||||
@@ -176,9 +179,9 @@ html_static_path = ['../common/_static']
|
|||||||
# This is required for the alabaster theme
|
# This is required for the alabaster theme
|
||||||
# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars
|
# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars
|
||||||
html_sidebars = {
|
html_sidebars = {
|
||||||
'**': [
|
"**": [
|
||||||
'relations.html', # needs 'show_related': True theme option to display
|
"relations.html", # needs 'show_related': True theme option to display
|
||||||
'searchbox.html',
|
"searchbox.html",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,7 +191,7 @@ html_scaled_image_link = False
|
|||||||
# -- Options for HTMLHelp output ------------------------------------------
|
# -- Options for HTMLHelp output ------------------------------------------
|
||||||
|
|
||||||
# Output file base name for HTML help builder.
|
# Output file base name for HTML help builder.
|
||||||
htmlhelp_basename = 'Pybricksdoc'
|
htmlhelp_basename = "Pybricksdoc"
|
||||||
|
|
||||||
|
|
||||||
# -- Options for LaTeX output ---------------------------------------------
|
# -- Options for LaTeX output ---------------------------------------------
|
||||||
@@ -197,14 +200,12 @@ latex_elements = {
|
|||||||
# The paper size ('letterpaper' or 'a4paper').
|
# The paper size ('letterpaper' or 'a4paper').
|
||||||
#
|
#
|
||||||
# 'papersize': 'letterpaper',
|
# 'papersize': 'letterpaper',
|
||||||
|
|
||||||
# The font size ('10pt', '11pt' or '12pt').
|
# The font size ('10pt', '11pt' or '12pt').
|
||||||
#
|
#
|
||||||
# 'pointsize': '10pt',
|
# 'pointsize': '10pt',
|
||||||
|
|
||||||
# Additional stuff for the LaTeX preamble.
|
# Additional stuff for the LaTeX preamble.
|
||||||
#
|
#
|
||||||
'preamble': r'''
|
"preamble": r"""
|
||||||
\usepackage{CJKutf8}
|
\usepackage{CJKutf8}
|
||||||
\makeatletter
|
\makeatletter
|
||||||
\fancypagestyle{normal}{
|
\fancypagestyle{normal}{
|
||||||
@@ -224,34 +225,46 @@ latex_elements = {
|
|||||||
\renewcommand{\footrulewidth}{0.4pt}
|
\renewcommand{\footrulewidth}{0.4pt}
|
||||||
}
|
}
|
||||||
\makeatother
|
\makeatother
|
||||||
''' % {
|
"""
|
||||||
'disclaimer': ' '.join((_DISCLAIMER, '©', copyright)),
|
% {
|
||||||
|
"disclaimer": " ".join((_DISCLAIMER, "©", copyright)),
|
||||||
},
|
},
|
||||||
|
|
||||||
# Latex figure (float) alignment
|
# Latex figure (float) alignment
|
||||||
#
|
#
|
||||||
# 'figure_align': 'htbp',
|
# 'figure_align': 'htbp',
|
||||||
'extraclassoptions': 'openany,oneside',
|
"extraclassoptions": "openany,oneside",
|
||||||
|
"releasename": "Version",
|
||||||
'releasename': 'Version',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Grouping the document tree into LaTeX files. List of tuples
|
# Grouping the document tree into LaTeX files. List of tuples
|
||||||
# (source start file, target name, title,
|
# (source start file, target name, title,
|
||||||
# author, documentclass [howto, manual, or own class]).
|
# author, documentclass [howto, manual, or own class]).
|
||||||
latex_documents = [
|
latex_documents = [
|
||||||
(master_doc, ''.join([project, '-v', version, '.tex']), _TITLE,
|
(master_doc, "".join([project, "-v", version, ".tex"]), _TITLE, author, "manual"),
|
||||||
author, 'manual'),
|
]
|
||||||
|
|
||||||
|
# -- Content control -----------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
exclude_patterns = [
|
||||||
|
"ev3devices.rst",
|
||||||
|
"hubs/ev3brick.rst",
|
||||||
|
"iodevices/analogsensor.rst",
|
||||||
|
"iodevices/dcmotor.rst",
|
||||||
|
"iodevices/ev3devsensor.rst",
|
||||||
|
"iodevices/i2cdevice.rst",
|
||||||
|
"iodevices/lumpdevice.rst",
|
||||||
|
"iodevices/uartdevice.rst",
|
||||||
|
"media.rst",
|
||||||
|
"messaging.rst",
|
||||||
|
"nxtdevices.rst",
|
||||||
|
"tools/datalog.rst",
|
||||||
]
|
]
|
||||||
|
|
||||||
# -- Options for manual page output ---------------------------------------
|
|
||||||
|
|
||||||
# One entry per manual page. List of tuples
|
# One entry per manual page. List of tuples
|
||||||
# (source start file, name, description, authors, manual section).
|
# (source start file, name, description, authors, manual section).
|
||||||
man_pages = [
|
man_pages = [(master_doc, "pybricks", "Pybricks Documentation", [author], 1)]
|
||||||
(master_doc, 'pybricks', 'Pybricks Documentation',
|
|
||||||
[author], 1)
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for Texinfo output -------------------------------------------
|
# -- Options for Texinfo output -------------------------------------------
|
||||||
@@ -260,74 +273,83 @@ man_pages = [
|
|||||||
# (source start file, target name, title, author,
|
# (source start file, target name, title, author,
|
||||||
# dir menu entry, description, category)
|
# dir menu entry, description, category)
|
||||||
texinfo_documents = [
|
texinfo_documents = [
|
||||||
(master_doc, 'Pybricks', 'Pybricks Documentation',
|
(
|
||||||
author, 'Pybricks', 'One line description of project.',
|
master_doc,
|
||||||
'Miscellaneous'),
|
"Pybricks",
|
||||||
|
"Pybricks Documentation",
|
||||||
|
author,
|
||||||
|
"Pybricks",
|
||||||
|
"One line description of project.",
|
||||||
|
"Miscellaneous",
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
# -- .. availability:: directive
|
# -- .. availability:: directive
|
||||||
|
|
||||||
|
|
||||||
class AvailabilityDirective(Directive):
|
class AvailabilityDirective(Directive):
|
||||||
has_content = True
|
has_content = True
|
||||||
option_spec = {
|
option_spec = {
|
||||||
'movehub': flag,
|
"movehub": flag,
|
||||||
'cityhub': flag,
|
"cityhub": flag,
|
||||||
'technichub': flag,
|
"technichub": flag,
|
||||||
'ev3dev-stretch': flag,
|
"ev3dev-stretch": flag,
|
||||||
}
|
}
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
if not self.options:
|
if not self.options:
|
||||||
raise self.error('Must specify at least one platform.')
|
raise self.error("Must specify at least one platform.")
|
||||||
# TODO: make links to platform pages
|
# TODO: make links to platform pages
|
||||||
return [nodes.emphasis(text='Availability: '),
|
return [
|
||||||
nodes.Text(', '.join(self.options))]
|
nodes.emphasis(text="Availability: "),
|
||||||
|
nodes.Text(", ".join(self.options)),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def on_missing_reference(app, env, node, contnode):
|
||||||
|
# References with special characters can't exist, so we have to supress
|
||||||
|
# warnings when Sphinx tries to cross reference units like deg/s. For
|
||||||
|
# consistency, we also treat units without special characters this way.
|
||||||
|
for unit in [
|
||||||
|
"deg",
|
||||||
|
"deg/s",
|
||||||
|
"deg/s²",
|
||||||
|
"mm",
|
||||||
|
"mm/s",
|
||||||
|
"mm/s²",
|
||||||
|
"%",
|
||||||
|
"mV",
|
||||||
|
"mA",
|
||||||
|
"ms",
|
||||||
|
"mNm",
|
||||||
|
"Hz",
|
||||||
|
]:
|
||||||
|
|
||||||
|
# If they match on raw source, we are dealing with argument types.
|
||||||
|
if unit == contnode.rawsource:
|
||||||
|
# Return as-is to suppress missing cross reference warning. We
|
||||||
|
# could make this more fancy by returning an xref node that links
|
||||||
|
# to the signals page.
|
||||||
|
return contnode
|
||||||
|
|
||||||
|
# Return types are denoted as "int: deg"
|
||||||
|
try:
|
||||||
|
# Try to unpack the node.
|
||||||
|
ret_type, ret_unit = str(contnode).split(": ")
|
||||||
|
except ValueError:
|
||||||
|
# Not a valid format, so skip.
|
||||||
|
continue
|
||||||
|
|
||||||
|
# If it's a match, we could format the node so it looks a bit nicer.
|
||||||
|
# For now just keep the colon notation as is.
|
||||||
|
if unit == ret_unit:
|
||||||
|
return nodes.Text(f"{ret_type}: {ret_unit}")
|
||||||
|
|
||||||
|
|
||||||
def setup(app: Sphinx):
|
def setup(app: Sphinx):
|
||||||
app.add_directive('availability', AvailabilityDirective)
|
app.add_directive("availability", AvailabilityDirective)
|
||||||
|
app.connect("missing-reference", on_missing_reference)
|
||||||
|
|
||||||
|
|
||||||
# -- Python domain hacks ---------------------------------------------------
|
# -- Python domain hacks ---------------------------------------------------
|
||||||
|
|
||||||
real_get_signature_prefix = PyClassmember.get_signature_prefix
|
|
||||||
|
|
||||||
|
|
||||||
def get_signature_prefix(self, sig):
|
|
||||||
# hacks for battery and light
|
|
||||||
if sig.count('.') >= 2:
|
|
||||||
return ''
|
|
||||||
return real_get_signature_prefix(self, sig)
|
|
||||||
|
|
||||||
|
|
||||||
PyClassmember.get_signature_prefix = get_signature_prefix
|
|
||||||
|
|
||||||
|
|
||||||
# HACK: For certain hub attributes, we list the class members of the attributes
|
|
||||||
# class as if the attribute was a nested class so that readers don't have to
|
|
||||||
# skip around the docs as much. To make this work, we replace the attribute
|
|
||||||
# values with the type and override PythonDomain.find_obj so that references
|
|
||||||
# still work.
|
|
||||||
|
|
||||||
base_find_obj = PythonDomain.find_obj
|
|
||||||
|
|
||||||
|
|
||||||
def find_obj(self, env, modname, classname, name, type, searchmode=0):
|
|
||||||
if modname == 'pybricks.hubs':
|
|
||||||
if classname == 'screen':
|
|
||||||
if name.startswith('Font.') or name == 'Font':
|
|
||||||
modname = 'pybricks.media.ev3dev'
|
|
||||||
elif name.startswith('Image.') or name == 'Image':
|
|
||||||
modname = 'pybricks.media.ev3dev'
|
|
||||||
else:
|
|
||||||
classname = 'EV3Brick.screen'
|
|
||||||
elif classname == 'speaker':
|
|
||||||
classname = 'EV3Brick.speaker'
|
|
||||||
return base_find_obj(self, env, modname, classname, name, type, searchmode)
|
|
||||||
|
|
||||||
|
|
||||||
PythonDomain.find_obj = find_obj
|
|
||||||
|
|
||||||
EV3Brick.screen = Image
|
|
||||||
EV3Brick.speaker = Speaker
|
|
||||||
|
|||||||
@@ -5,27 +5,31 @@ from docutils.parsers.rst import Directive
|
|||||||
class PybricksClasslinkDirective(Directive):
|
class PybricksClasslinkDirective(Directive):
|
||||||
|
|
||||||
required_arguments = 1
|
required_arguments = 1
|
||||||
|
optional_arguments = 1
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
# Get link name from sphinx-directive
|
# Get link and name from sphinx-directive
|
||||||
name = self.arguments[0]
|
name = self.arguments[0]
|
||||||
|
link = name if len(self.arguments) == 1 else self.arguments[1]
|
||||||
|
|
||||||
html = (
|
html = (
|
||||||
'<a href="{0}.html">'.format(name.lower()) +
|
'<a href="{0}.html">'.format(link.lower())
|
||||||
'<dl class="py class">' +
|
+ '<dl class="py class">'
|
||||||
'<dt>' +
|
+ "<dt>"
|
||||||
'<em class="property">class </em>' +
|
+ '<em class="property">class </em>'
|
||||||
'<code class="sig-name descname">' + name + '</code>' +
|
+ '<code class="sig-name descname">'
|
||||||
'</dt>' +
|
+ name
|
||||||
'<dd></dd>' +
|
+ "</code>"
|
||||||
'</dl>' +
|
+ "</dt>"
|
||||||
'</a>'
|
+ "<dd></dd>"
|
||||||
|
+ "</dl>"
|
||||||
|
+ "</a>"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Return the node
|
# Return the node
|
||||||
node = nodes.raw('', html, format="html")
|
node = nodes.raw("", html, format="html")
|
||||||
return [node]
|
return [node]
|
||||||
|
|
||||||
|
|
||||||
def setup(app):
|
def setup(app):
|
||||||
app.add_directive_to_domain('py', 'pybricks-classlink', PybricksClasslinkDirective)
|
app.add_directive_to_domain("py", "pybricks-classlink", PybricksClasslinkDirective)
|
||||||
|
|||||||
@@ -16,28 +16,27 @@ class PybricksColorDirective(Directive):
|
|||||||
color = getattr(Color, name)
|
color = getattr(Color, name)
|
||||||
|
|
||||||
# Convert HSV to RGB
|
# Convert HSV to RGB
|
||||||
r, g, b = hsv_to_rgb(color.h/360, color.s/100, color.v/100)
|
r, g, b = hsv_to_rgb(color.h / 360, color.s / 100, color.v / 100)
|
||||||
|
|
||||||
# Convert RGB to HEX
|
# Convert RGB to HEX
|
||||||
rgbhex = '#{0:02x}{1:02x}{2:02x}'.format(
|
rgbhex = "#{0:02x}{1:02x}{2:02x}".format(
|
||||||
round(r*255),
|
round(r * 255), round(g * 255), round(b * 255)
|
||||||
round(g*255),
|
|
||||||
round(b*255)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Render a small block of the given color
|
# Render a small block of the given color
|
||||||
css = "background-color: {0}; color: {0}; width: 50px;".format(rgbhex)
|
css = "background-color: {0}; color: {0}; width: 50px;".format(rgbhex)
|
||||||
|
|
||||||
if name == "WHITE":
|
if name == "WHITE":
|
||||||
css += "border-style: solid; border-width: 0.5px;" + \
|
css += (
|
||||||
"border-color: #666666;"
|
"border-style: solid; border-width: 0.5px;" + "border-color: #666666;"
|
||||||
|
)
|
||||||
|
|
||||||
html = '<div id="test" style="{0}">_</div>'.format(css)
|
html = '<div id="test" style="{0}">_</div>'.format(css)
|
||||||
|
|
||||||
# Return the node
|
# Return the node
|
||||||
node = nodes.raw('', html, format="html")
|
node = nodes.raw("", html, format="html")
|
||||||
return [node]
|
return [node]
|
||||||
|
|
||||||
|
|
||||||
def setup(app):
|
def setup(app):
|
||||||
app.add_directive_to_domain('py', 'pybricks-color', PybricksColorDirective)
|
app.add_directive_to_domain("py", "pybricks-color", PybricksColorDirective)
|
||||||
|
|||||||
@@ -0,0 +1,102 @@
|
|||||||
|
from os import path, makedirs
|
||||||
|
|
||||||
|
from docutils import nodes
|
||||||
|
from docutils.parsers.rst import Directive
|
||||||
|
|
||||||
|
from sphinx.util.osutil import copyfile
|
||||||
|
|
||||||
|
# Base feature set.
|
||||||
|
FEATURES_SMALL = set()
|
||||||
|
|
||||||
|
# Medium feature set.
|
||||||
|
FEATURES_MEDIUM = FEATURES_SMALL | {
|
||||||
|
"pybricks-geometry",
|
||||||
|
"pybricks-iodevices",
|
||||||
|
"stm32-extra",
|
||||||
|
"stm32-float",
|
||||||
|
}
|
||||||
|
|
||||||
|
# Large feature set.
|
||||||
|
FEATURES_LARGE = FEATURES_MEDIUM | set()
|
||||||
|
|
||||||
|
# Features per hub.
|
||||||
|
HUB_FEATURES = {
|
||||||
|
"movehub": {"movehub"} | FEATURES_SMALL,
|
||||||
|
"cityhub": {"cityhub"} | FEATURES_MEDIUM,
|
||||||
|
"technichub": {"technichub"} | FEATURES_MEDIUM,
|
||||||
|
"primehub": {"primehub", "inventorhub"} | FEATURES_LARGE,
|
||||||
|
"inventorhub": {"primehub", "inventorhub"} | FEATURES_LARGE,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class PybricksRequirementsStaticDirective(Directive):
|
||||||
|
|
||||||
|
required_arguments = 0
|
||||||
|
optional_arguments = 10
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
|
||||||
|
# Copy required resources to static
|
||||||
|
# CC BY-SA 4.0 via https://stackoverflow.com/a/63728208
|
||||||
|
env = self.state.document.settings.env
|
||||||
|
|
||||||
|
destdir = path.join(env.app.builder.outdir, "_images")
|
||||||
|
if not path.exists(destdir):
|
||||||
|
makedirs(destdir)
|
||||||
|
|
||||||
|
for hub in HUB_FEATURES:
|
||||||
|
for compat in ("true", "false"):
|
||||||
|
uri = "compat_{0}_{1}_label.png".format(hub, compat)
|
||||||
|
src_uri = path.join(env.app.builder.srcdir, "images", uri)
|
||||||
|
build_uri = path.join(env.app.builder.outdir, "_images", uri)
|
||||||
|
copyfile(src_uri, build_uri)
|
||||||
|
|
||||||
|
# Get requirements from sphinx-directive.
|
||||||
|
requirements = set(self.arguments)
|
||||||
|
|
||||||
|
# Cell with image of a hub.
|
||||||
|
hub_cell = """
|
||||||
|
<th><div class="align-default">
|
||||||
|
<img alt="" src="{0}_images/compat_{1}_{2}_label.png">
|
||||||
|
</div></th>
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Determine how far up the tree we are to set correct image path.
|
||||||
|
current_document = env.docname
|
||||||
|
depth = len(current_document.split("/")) - 1
|
||||||
|
depth_path = "../" * depth
|
||||||
|
|
||||||
|
# Table row with hub images.
|
||||||
|
compat_row = "".join(
|
||||||
|
[
|
||||||
|
hub_cell.format(
|
||||||
|
depth_path, hub, "true" if requirements <= features else "false"
|
||||||
|
)
|
||||||
|
for hub, features in HUB_FEATURES.items()
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
# Generate full table.
|
||||||
|
html = """
|
||||||
|
<div class="wy-table-responsive">
|
||||||
|
<table class="docutils align-default">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
{0}
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
""".format(
|
||||||
|
compat_row
|
||||||
|
)
|
||||||
|
|
||||||
|
# Return the node.
|
||||||
|
node = nodes.raw("", html, format="html")
|
||||||
|
return [node]
|
||||||
|
|
||||||
|
|
||||||
|
def setup(app):
|
||||||
|
app.add_directive_to_domain(
|
||||||
|
"py", "pybricks-requirements-static", PybricksRequirementsStaticDirective
|
||||||
|
)
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
/*MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2017 Robert, https://github.com/ulrobix/sphinxcontrib-contentui
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE. */
|
||||||
|
|
||||||
|
.toggle-header {
|
||||||
|
display: block;
|
||||||
|
float: right;
|
||||||
|
clear: both;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.toggle-header p {display: inline;}
|
||||||
|
.toggle-header strong {color: #2980b9 }
|
||||||
|
|
||||||
|
.toggle-header:after {
|
||||||
|
content: "Compatibility ▼";
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle-header.open:after {
|
||||||
|
content: "▲";
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle-content {
|
||||||
|
display: none;
|
||||||
|
margin-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
/*MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2017 Robert, https://github.com/ulrobix/sphinxcontrib-contentui
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE. */
|
||||||
|
|
||||||
|
$(function() {
|
||||||
|
/**
|
||||||
|
* Toggle logic
|
||||||
|
*/
|
||||||
|
$('.toggle-content').hide()
|
||||||
|
$('.toggle-header').click(function () {
|
||||||
|
$(this).toggleClass("open");
|
||||||
|
$(this).next('.toggle-content').toggle('400');
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# MIT License
|
||||||
|
|
||||||
|
# Copyright (c) 2017 Robert, https://github.com/ulrobix/sphinxcontrib-requirements
|
||||||
|
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
# of this software and associated documentation files (the "Software"), to deal
|
||||||
|
# in the Software without restriction, including without limitation the rights
|
||||||
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
# copies of the Software, and to permit persons to whom the Software is
|
||||||
|
# furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
# The above copyright notice and this permission notice shall be included in all
|
||||||
|
# copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
# SOFTWARE.
|
||||||
|
|
||||||
|
|
||||||
|
import os
|
||||||
|
from docutils.parsers.rst import Directive, directives
|
||||||
|
from docutils import nodes
|
||||||
|
from docutils.statemachine import StringList
|
||||||
|
from sphinx.util.osutil import copyfile
|
||||||
|
from sphinx.util import logging
|
||||||
|
|
||||||
|
|
||||||
|
CSS_FILE = "requirements.css"
|
||||||
|
JS_FILE = "requirements.js"
|
||||||
|
|
||||||
|
|
||||||
|
class PybricksRequirementsDirective(Directive):
|
||||||
|
has_content = True
|
||||||
|
option_spec = {"header": directives.unchanged}
|
||||||
|
|
||||||
|
required_arguments = 0
|
||||||
|
optional_arguments = 10
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
node = nodes.container()
|
||||||
|
node["classes"].append("toggle-content")
|
||||||
|
|
||||||
|
par = nodes.container()
|
||||||
|
par["classes"].append("toggle-header")
|
||||||
|
|
||||||
|
content = ".. pybricks-requirements-static:: " + " ".join(self.arguments)
|
||||||
|
|
||||||
|
self.state.nested_parse(StringList([content]), self.content_offset, node)
|
||||||
|
|
||||||
|
return [par, node]
|
||||||
|
|
||||||
|
|
||||||
|
def add_assets(app):
|
||||||
|
app.add_css_file(CSS_FILE)
|
||||||
|
app.add_js_file(JS_FILE)
|
||||||
|
|
||||||
|
|
||||||
|
def copy_assets(app, exception):
|
||||||
|
if app.builder.name not in ["html", "readthedocs"] or exception:
|
||||||
|
return
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
logger.info("Copying requirements stylesheet/javascript... ", nonl=True)
|
||||||
|
dest = os.path.join(app.builder.outdir, "_static", CSS_FILE)
|
||||||
|
source = os.path.join(os.path.abspath(os.path.dirname(__file__)), CSS_FILE)
|
||||||
|
copyfile(source, dest)
|
||||||
|
dest = os.path.join(app.builder.outdir, "_static", JS_FILE)
|
||||||
|
source = os.path.join(os.path.abspath(os.path.dirname(__file__)), JS_FILE)
|
||||||
|
copyfile(source, dest)
|
||||||
|
logger.info("done")
|
||||||
|
|
||||||
|
|
||||||
|
def setup(app):
|
||||||
|
app.add_directive("pybricks-requirements", PybricksRequirementsDirective)
|
||||||
|
app.connect("builder-inited", add_assets)
|
||||||
|
app.connect("build-finished", copy_assets)
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
"""This directive hides the builtin directives
|
||||||
|
* versionchanged
|
||||||
|
* versionadded
|
||||||
|
* deprecated
|
||||||
|
when building documentation with the 'ide' tag.
|
||||||
|
"""
|
||||||
|
from docutils import nodes
|
||||||
|
from docutils.parsers.rst import Directive
|
||||||
|
|
||||||
|
|
||||||
|
class PybricksVersionDirective(Directive):
|
||||||
|
|
||||||
|
has_content = True
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
html = ""
|
||||||
|
node = nodes.raw("", html, format="html")
|
||||||
|
return [node]
|
||||||
|
|
||||||
|
|
||||||
|
def setup(app):
|
||||||
|
if "ide" in app.tags.tags:
|
||||||
|
app.add_directive_to_domain(
|
||||||
|
"py", "deprecated", PybricksVersionDirective, override=True
|
||||||
|
)
|
||||||
|
app.add_directive_to_domain(
|
||||||
|
"py", "versionadded", PybricksVersionDirective, override=True
|
||||||
|
)
|
||||||
|
app.add_directive_to_domain(
|
||||||
|
"py", "versionchanged", PybricksVersionDirective, override=True
|
||||||
|
)
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
# 1.3.3 - 2021-05-21
|
|
||||||
|
|
||||||
## Changed:
|
|
||||||
- Match example snippet styling to IDE.
|
|
||||||
- Add more examples.
|
|
||||||
|
|
||||||
# 1.3.2 - 2021-04-26
|
|
||||||
|
|
||||||
## Changed:
|
|
||||||
- Theme style fixes.
|
|
||||||
- Example code fixes
|
|
||||||
- Match doc version to firmware version.
|
|
||||||
|
|
||||||
# 1.3.1 - 2021-04-12
|
|
||||||
|
|
||||||
## Changed:
|
|
||||||
- Upgrade sphinx and rtd-theme to fix style issues.
|
|
||||||
|
|
||||||
# 1.3.0 - 2021-04-12
|
|
||||||
|
|
||||||
## Removed:
|
|
||||||
- Removed features which not be in the official 3.0 release. These features
|
|
||||||
are still in beta. They'll come back in future releases once tested.
|
|
||||||
|
|
||||||
# 1.2.0 - 2021-04-09
|
|
||||||
|
|
||||||
## Changed:
|
|
||||||
- Moved installation guide to external site.
|
|
||||||
|
|
||||||
# 1.1.1 - 2021-02-14
|
|
||||||
|
|
||||||
## Added:
|
|
||||||
- Added installation guide.
|
|
||||||
- Various documentation fixes.
|
|
||||||
|
|
||||||
# 1.1.0 - 2021-01-28
|
|
||||||
|
|
||||||
## Added:
|
|
||||||
- Scrollbar styling.
|
|
||||||
|
|
||||||
# 1.0.0 - 2021-01-25
|
|
||||||
|
|
||||||
## Added:
|
|
||||||
- Sphinx build output.
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
#
|
|
||||||
# Pybricks documentation build configuration file
|
|
||||||
#
|
|
||||||
import os
|
|
||||||
|
|
||||||
# General information about the project.
|
|
||||||
project = 'pybricks'
|
|
||||||
copyright = '2018-2021 The Pybricks Authors'
|
|
||||||
author = ''
|
|
||||||
|
|
||||||
_TITLE = 'Pybricks Modules and Examples'
|
|
||||||
_DISCLAIMER = ''
|
|
||||||
|
|
||||||
html_favicon = '../common/images/favicon.ico'
|
|
||||||
html_logo = '../common/images/pybricks-logo-rtd.png'
|
|
||||||
html_show_copyright = False
|
|
||||||
html_show_sphinx = False
|
|
||||||
html_css_files = ['css/ide.css']
|
|
||||||
html_js_files = ['js/ide.js']
|
|
||||||
|
|
||||||
imgmath_image_format = 'svg'
|
|
||||||
imgmath_use_preview = True # requires Sphinx v3
|
|
||||||
imgmath_latex_preamble = r'''
|
|
||||||
\usepackage{newtxsf}
|
|
||||||
'''
|
|
||||||
|
|
||||||
exec(open(os.path.abspath("../common/conf.py")).read())
|
|
||||||
|
|
||||||
extensions.remove('sphinx.ext.mathjax') # noqa F821
|
|
||||||
extensions.append('sphinx.ext.imgmath') # noqa F821
|
|
||||||
html_theme_options['prev_next_buttons_location'] = None # noqa F821
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
|
|
||||||
SRC_DIR = .
|
|
||||||
OUT_DIR = ../images
|
|
||||||
|
|
||||||
POSTFIX := _label
|
|
||||||
SVG := $(wildcard $(SRC_DIR)/*.svg)
|
|
||||||
DIAGRAMS := $(patsubst $(SRC_DIR)/%.svg,$(OUT_DIR)/%$(POSTFIX).png,$(SVG))
|
|
||||||
DIR := ${CURDIR}
|
|
||||||
|
|
||||||
all: $(DIAGRAMS)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f $(DIAGRAMS)
|
|
||||||
|
|
||||||
$(OUT_DIR)/%$(POSTFIX).png: $(SRC_DIR)/%.svg
|
|
||||||
if inkscape --version | grep -q "Inkscape 0"; then \
|
|
||||||
inkscape --file=$(DIR)/$< --export-area-drawing --export-png=$(DIR)/$@; \
|
|
||||||
else \
|
|
||||||
inkscape \
|
|
||||||
--export-area-drawing \
|
|
||||||
--export-background=white \
|
|
||||||
--export-background-opacity=1.0 \
|
|
||||||
--export-file=$(DIR)/$@ \
|
|
||||||
$(DIR)/$<; \
|
|
||||||
fi
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../../api/hubs/cityhub.rst
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
:mod:`hubs <pybricks.hubs>` -- Programmable Hubs
|
|
||||||
================================================
|
|
||||||
|
|
||||||
.. module:: pybricks.hubs
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
:hidden:
|
|
||||||
|
|
||||||
movehub
|
|
||||||
cityhub
|
|
||||||
technichub
|
|
||||||
|
|
||||||
.. pybricks-classlink:: MoveHub
|
|
||||||
|
|
||||||
.. figure:: ../../api/images/movehub.png
|
|
||||||
:height: 10 em
|
|
||||||
:target: movehub.html
|
|
||||||
|
|
||||||
.. pybricks-classlink:: CityHub
|
|
||||||
|
|
||||||
.. figure:: ../../api/images/cityhub.png
|
|
||||||
:height: 10 em
|
|
||||||
:target: cityhub.html
|
|
||||||
|
|
||||||
.. pybricks-classlink:: TechnicHub
|
|
||||||
|
|
||||||
.. figure:: ../../api/images/technichub.png
|
|
||||||
:height: 10 em
|
|
||||||
:target: technichub.html
|
|
||||||
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../../api/hubs/movehub.rst
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../../api/hubs/technichub.rst
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
Pybricks Documentation
|
|
||||||
==================================================================
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
:caption: Pybricks Modules
|
|
||||||
:hidden:
|
|
||||||
|
|
||||||
hubs/index
|
|
||||||
pupdevices/index
|
|
||||||
iodevices/index
|
|
||||||
parameters/index
|
|
||||||
tools/index
|
|
||||||
robotics
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
:caption: Engineering Extras
|
|
||||||
:hidden:
|
|
||||||
|
|
||||||
signaltypes
|
|
||||||
motors
|
|
||||||
|
|
||||||
To begin, install the Pybricks firmware on your hub. Check
|
|
||||||
`pybricks.com/install`_ to learn how.
|
|
||||||
|
|
||||||
Use the ☰ menu to navigate all available classes, methods, and tools. A few
|
|
||||||
commonly used devices and classes are listed below for quick reference.
|
|
||||||
|
|
||||||
.. rubric:: Programmable Hubs
|
|
||||||
|
|
||||||
.. figure:: ../api/images/powereduphubs.png
|
|
||||||
:width: 100 %
|
|
||||||
:target: hubs/index.html
|
|
||||||
|
|
||||||
.. rubric:: Powered Up Motors and Sensors
|
|
||||||
|
|
||||||
.. figure:: ../api/images/pupdevicesoverview.png
|
|
||||||
:width: 100 %
|
|
||||||
:target: pupdevices/index.html
|
|
||||||
|
|
||||||
.. _pybricks.com/install: https://pybricks.com/install/
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
:mod:`iodevices <pybricks.iodevices>` -- Generic I/O Devices
|
|
||||||
============================================================
|
|
||||||
|
|
||||||
.. automodule:: pybricks.iodevices
|
|
||||||
:no-members:
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
:hidden:
|
|
||||||
|
|
||||||
pupdevice
|
|
||||||
|
|
||||||
.. pybricks-classlink:: PUPDevice
|
|
||||||
|
|
||||||
.. figure:: ../../api/images/sensor_pup.png
|
|
||||||
:width: 70 %
|
|
||||||
:target: pupdevice.html
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../../api/iodevices/pupdevice.rst
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../api/motors.rst
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../../api/parameters/color.rst
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../../api/parameters/direction.rst
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
:mod:`parameters <pybricks.parameters>` -- Parameters and Constants
|
|
||||||
===================================================================
|
|
||||||
|
|
||||||
.. automodule:: pybricks.parameters
|
|
||||||
:no-members:
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 1
|
|
||||||
:hidden:
|
|
||||||
|
|
||||||
color
|
|
||||||
direction
|
|
||||||
port
|
|
||||||
stop
|
|
||||||
|
|
||||||
.. pybricks-classlink:: Color
|
|
||||||
|
|
||||||
.. pybricks-classlink:: Direction
|
|
||||||
|
|
||||||
.. pybricks-classlink:: Port
|
|
||||||
|
|
||||||
.. pybricks-classlink:: Stop
|
|
||||||
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../../api/parameters/stop.rst
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../../api/pupdevices/colordistancesensor.rst
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../../api/pupdevices/colorsensor.rst
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../../api/pupdevices/dcmotor.rst
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../../api/pupdevices/forcesensor.rst
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../../api/pupdevices/index.rst
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../../api/pupdevices/infraredsensor.rst
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../../api/pupdevices/light.rst
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../../api/pupdevices/motor.rst
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../../api/pupdevices/pfmotor.rst
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../../api/pupdevices/tiltsensor.rst
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../../api/pupdevices/ultrasonicsensor.rst
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../api/robotics.rst
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../api/signaltypes.rst
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
Data logging
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
This functionality is not yet available. It could be added
|
|
||||||
to Powered Up hubs in a future release. If you'd like to see this happen,
|
|
||||||
be sure to ask us on our `support page`_.
|
|
||||||
|
|
||||||
.. _support page: https://github.com/pybricks/support/issues/
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
.. include:: ../../api/tools/index.rst
|
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# Pybricks documentation build configuration file
|
||||||
|
#
|
||||||
|
import os
|
||||||
|
|
||||||
|
# General information about the project.
|
||||||
|
project = "pybricks"
|
||||||
|
copyright = "2018-2021 The Pybricks Authors"
|
||||||
|
author = ""
|
||||||
|
|
||||||
|
_TITLE = "Pybricks Modules and Examples"
|
||||||
|
_DISCLAIMER = "LEGO, the LEGO logo, MINDSTORMS and the MINDSTORMS EV3 logo are\
|
||||||
|
trademarks and/or copyrights of the LEGO Group of companies \
|
||||||
|
which does not sponsor, authorize or endorse this site."
|
||||||
|
|
||||||
|
html_favicon = "../common/images/favicon.ico"
|
||||||
|
html_logo = "../common/images/pybricks-logo-rtd.png"
|
||||||
|
latex_logo = "../common/images/pybricks-logo-large.png"
|
||||||
|
|
||||||
|
# Build main docs for RTD by default.
|
||||||
|
# Since tags cannot be passed via the TAG make variable on read the docs,
|
||||||
|
# add it manually.
|
||||||
|
if os.environ.get("READTHEDOCS", None) == "True":
|
||||||
|
tags.add("main") # noqa F821
|
||||||
|
|
||||||
|
# On https://docs.pybricks.com/en/latest/, show features tagged as beta.
|
||||||
|
if os.environ.get("READTHEDOCS_VERSION_NAME", None) == "latest":
|
||||||
|
tags.add("beta") # noqa F821
|
||||||
|
|
||||||
|
# Addtional configuration of the IDE docs
|
||||||
|
if "ide" in tags.tags: # noqa F821
|
||||||
|
_DISCLAIMER = ""
|
||||||
|
html_show_copyright = False
|
||||||
|
html_show_sphinx = False
|
||||||
|
html_css_files = ["css/ide.css"]
|
||||||
|
html_js_files = ["js/ide.js"]
|
||||||
|
|
||||||
|
imgmath_image_format = "svg"
|
||||||
|
imgmath_use_preview = True # requires Sphinx v3
|
||||||
|
imgmath_latex_preamble = r"""
|
||||||
|
\usepackage{newtxsf}
|
||||||
|
"""
|
||||||
|
|
||||||
|
exec(open(os.path.abspath("../common/conf.py")).read())
|
||||||
|
|
||||||
|
# Addtional configuration of the IDE docs
|
||||||
|
if "ide" in tags.tags: # noqa F821
|
||||||
|
|
||||||
|
extensions.remove("sphinx.ext.mathjax") # noqa F821
|
||||||
|
extensions.append("sphinx.ext.imgmath") # noqa F821
|
||||||
|
html_theme_options["prev_next_buttons_location"] = None # noqa F821
|
||||||
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
@@ -0,0 +1,104 @@
|
|||||||
|
<?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: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"
|
||||||
|
width="150"
|
||||||
|
height="135"
|
||||||
|
viewBox="0 0 39.687499 35.718751"
|
||||||
|
version="1.1"
|
||||||
|
id="svg887"
|
||||||
|
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||||
|
sodipodi:docname="compat_cityhub_false.svg">
|
||||||
|
<defs
|
||||||
|
id="defs881">
|
||||||
|
<clipPath
|
||||||
|
clipPathUnits="userSpaceOnUse"
|
||||||
|
id="clipPath1545">
|
||||||
|
<rect
|
||||||
|
style="fill:#fe2020;fill-opacity:0.48022599;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect1547"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="-25.390602"
|
||||||
|
y="312.93103" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#fcfcfc"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="3.959798"
|
||||||
|
inkscape:cx="10.681815"
|
||||||
|
inkscape:cy="89.597718"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1172"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-global="false" />
|
||||||
|
<metadata
|
||||||
|
id="metadata884">
|
||||||
|
<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 />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-261.28123)">
|
||||||
|
<rect
|
||||||
|
style="fill:#fcfcfc;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect819"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="3.5527137e-15"
|
||||||
|
y="261.28122" />
|
||||||
|
<image
|
||||||
|
sodipodi:absref="../images/cityhub.png"
|
||||||
|
xlink:href="../images/cityhub.png"
|
||||||
|
style="stroke-width:5.6583333"
|
||||||
|
width="30.908323"
|
||||||
|
height="31.75"
|
||||||
|
preserveAspectRatio="none"
|
||||||
|
id="image1470"
|
||||||
|
x="5.2042809"
|
||||||
|
y="263.16479" />
|
||||||
|
<g
|
||||||
|
id="g862"
|
||||||
|
transform="matrix(0.84064533,0,0,0.84993509,-12.416361,243.07822)"
|
||||||
|
style="stroke-width:1.18304348">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path856"
|
||||||
|
d="m 51.33389,24.998882 5.622395,5.622396"
|
||||||
|
style="fill:none;stroke:#e2302f;stroke-width:1.18304348;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#e2302f;stroke-width:1.18304348;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 56.956285,24.998882 51.33389,30.621278"
|
||||||
|
id="path858"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.5 KiB |
@@ -0,0 +1,94 @@
|
|||||||
|
<?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: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"
|
||||||
|
width="150"
|
||||||
|
height="135"
|
||||||
|
viewBox="0 0 39.687499 35.718751"
|
||||||
|
version="1.1"
|
||||||
|
id="svg887"
|
||||||
|
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||||
|
sodipodi:docname="compat_cityhub_true.svg">
|
||||||
|
<defs
|
||||||
|
id="defs881">
|
||||||
|
<clipPath
|
||||||
|
clipPathUnits="userSpaceOnUse"
|
||||||
|
id="clipPath1545">
|
||||||
|
<rect
|
||||||
|
style="fill:#fe2020;fill-opacity:0.48022599;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect1547"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="-25.390602"
|
||||||
|
y="312.93103" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#fcfcfc"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="3.959798"
|
||||||
|
inkscape:cx="10.681815"
|
||||||
|
inkscape:cy="89.597718"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1172"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-global="false" />
|
||||||
|
<metadata
|
||||||
|
id="metadata884">
|
||||||
|
<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 />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-261.28123)">
|
||||||
|
<rect
|
||||||
|
style="fill:#fcfcfc;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect819"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="4.4408921e-16"
|
||||||
|
y="261.28122" />
|
||||||
|
<image
|
||||||
|
sodipodi:absref="../images/cityhub.png"
|
||||||
|
xlink:href="../images/cityhub.png"
|
||||||
|
style="stroke-width:5.6583333"
|
||||||
|
width="30.908323"
|
||||||
|
height="31.75"
|
||||||
|
preserveAspectRatio="none"
|
||||||
|
id="image1470"
|
||||||
|
x="5.2042809"
|
||||||
|
y="263.16479" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#84ba4c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 31.147057,265.82725 1.011052,2.9815 3.622948,-4.60003"
|
||||||
|
id="path854"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,104 @@
|
|||||||
|
<?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: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"
|
||||||
|
width="150"
|
||||||
|
height="135"
|
||||||
|
viewBox="0 0 39.687499 35.718751"
|
||||||
|
version="1.1"
|
||||||
|
id="svg887"
|
||||||
|
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||||
|
sodipodi:docname="compat_inventorhub_false.svg">
|
||||||
|
<defs
|
||||||
|
id="defs881">
|
||||||
|
<clipPath
|
||||||
|
clipPathUnits="userSpaceOnUse"
|
||||||
|
id="clipPath1545">
|
||||||
|
<rect
|
||||||
|
style="fill:#fe2020;fill-opacity:0.48022599;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect1547"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="-25.390602"
|
||||||
|
y="312.93103" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#fcfcfc"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="3.959798"
|
||||||
|
inkscape:cx="10.681815"
|
||||||
|
inkscape:cy="89.597718"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1172"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-global="false" />
|
||||||
|
<metadata
|
||||||
|
id="metadata884">
|
||||||
|
<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 />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-261.28123)">
|
||||||
|
<rect
|
||||||
|
style="fill:#fcfcfc;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect819"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="0"
|
||||||
|
y="261.28122" />
|
||||||
|
<image
|
||||||
|
sodipodi:absref="../images/inventorhub.png"
|
||||||
|
xlink:href="../images/inventorhub.png"
|
||||||
|
style="stroke-width:5.92592621"
|
||||||
|
width="34.915073"
|
||||||
|
height="35.71875"
|
||||||
|
preserveAspectRatio="none"
|
||||||
|
id="image1481"
|
||||||
|
x="2.6458333"
|
||||||
|
y="261.28122" />
|
||||||
|
<g
|
||||||
|
id="g862"
|
||||||
|
transform="matrix(0.84064533,0,0,0.84993509,-12.416361,243.07822)"
|
||||||
|
style="stroke-width:1.18304348">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path856"
|
||||||
|
d="m 51.33389,24.998882 5.622395,5.622396"
|
||||||
|
style="fill:none;stroke:#e2302f;stroke-width:1.18304348;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#e2302f;stroke-width:1.18304348;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 56.956285,24.998882 51.33389,30.621278"
|
||||||
|
id="path858"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.5 KiB |
@@ -0,0 +1,94 @@
|
|||||||
|
<?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: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"
|
||||||
|
width="150"
|
||||||
|
height="135"
|
||||||
|
viewBox="0 0 39.687499 35.718751"
|
||||||
|
version="1.1"
|
||||||
|
id="svg887"
|
||||||
|
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||||
|
sodipodi:docname="compat_inventorhub_true.svg">
|
||||||
|
<defs
|
||||||
|
id="defs881">
|
||||||
|
<clipPath
|
||||||
|
clipPathUnits="userSpaceOnUse"
|
||||||
|
id="clipPath1545">
|
||||||
|
<rect
|
||||||
|
style="fill:#fe2020;fill-opacity:0.48022599;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect1547"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="-25.390602"
|
||||||
|
y="312.93103" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#fcfcfc"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="3.959798"
|
||||||
|
inkscape:cx="10.681815"
|
||||||
|
inkscape:cy="89.597718"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1172"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-global="false" />
|
||||||
|
<metadata
|
||||||
|
id="metadata884">
|
||||||
|
<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 />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-261.28123)">
|
||||||
|
<rect
|
||||||
|
style="fill:#fcfcfc;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect819"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="3.5527137e-15"
|
||||||
|
y="261.28122" />
|
||||||
|
<image
|
||||||
|
sodipodi:absref="../images/inventorhub.png"
|
||||||
|
xlink:href="../images/inventorhub.png"
|
||||||
|
style="stroke-width:5.92592621"
|
||||||
|
width="34.915073"
|
||||||
|
height="35.71875"
|
||||||
|
preserveAspectRatio="none"
|
||||||
|
id="image1481"
|
||||||
|
x="2.6458333"
|
||||||
|
y="261.28122" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#84ba4c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 31.147057,265.82725 1.011052,2.9815 3.622948,-4.60003"
|
||||||
|
id="path854"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,106 @@
|
|||||||
|
<?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: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"
|
||||||
|
width="150"
|
||||||
|
height="135"
|
||||||
|
viewBox="0 0 39.687499 35.718751"
|
||||||
|
version="1.1"
|
||||||
|
id="svg887"
|
||||||
|
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||||
|
sodipodi:docname="compat_movehub_false.svg">
|
||||||
|
<defs
|
||||||
|
id="defs881">
|
||||||
|
<clipPath
|
||||||
|
clipPathUnits="userSpaceOnUse"
|
||||||
|
id="clipPath1545">
|
||||||
|
<rect
|
||||||
|
style="fill:#fe2020;fill-opacity:0.48022599;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect1547"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="-25.390602"
|
||||||
|
y="312.93103" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#fcfcfc"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="3.959798"
|
||||||
|
inkscape:cx="10.681815"
|
||||||
|
inkscape:cy="89.597718"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1172"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-global="false" />
|
||||||
|
<metadata
|
||||||
|
id="metadata884">
|
||||||
|
<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 />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-261.28123)">
|
||||||
|
<rect
|
||||||
|
style="fill:#fcfcfc;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect819"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="3.5527137e-15"
|
||||||
|
y="261.28122" />
|
||||||
|
<image
|
||||||
|
sodipodi:absref="../images/movehub.png"
|
||||||
|
xlink:href="../images/movehub.png"
|
||||||
|
transform="translate(25.390602,-51.6498)"
|
||||||
|
clip-path="url(#clipPath1545)"
|
||||||
|
style="stroke-width:5.92592621"
|
||||||
|
width="40.183594"
|
||||||
|
height="35.71875"
|
||||||
|
preserveAspectRatio="none"
|
||||||
|
id="image1492"
|
||||||
|
x="-25.506657"
|
||||||
|
y="312.93103" />
|
||||||
|
<g
|
||||||
|
id="g862"
|
||||||
|
transform="matrix(0.84064533,0,0,0.84993509,-12.416361,243.07822)"
|
||||||
|
style="stroke-width:1.18304348">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path856"
|
||||||
|
d="m 51.33389,24.998882 5.622395,5.622396"
|
||||||
|
style="fill:none;stroke:#e2302f;stroke-width:1.18304348;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#e2302f;stroke-width:1.18304348;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 56.956285,24.998882 51.33389,30.621278"
|
||||||
|
id="path858"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.6 KiB |
@@ -0,0 +1,96 @@
|
|||||||
|
<?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: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"
|
||||||
|
width="150"
|
||||||
|
height="135"
|
||||||
|
viewBox="0 0 39.687499 35.718751"
|
||||||
|
version="1.1"
|
||||||
|
id="svg887"
|
||||||
|
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||||
|
sodipodi:docname="compat_movehub_true.svg">
|
||||||
|
<defs
|
||||||
|
id="defs881">
|
||||||
|
<clipPath
|
||||||
|
clipPathUnits="userSpaceOnUse"
|
||||||
|
id="clipPath1545">
|
||||||
|
<rect
|
||||||
|
style="fill:#fe2020;fill-opacity:0.48022599;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect1547"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="-25.390602"
|
||||||
|
y="312.93103" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#fcfcfc"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="3.959798"
|
||||||
|
inkscape:cx="69.775738"
|
||||||
|
inkscape:cy="79.243654"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1172"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-global="false" />
|
||||||
|
<metadata
|
||||||
|
id="metadata884">
|
||||||
|
<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 />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-261.28123)">
|
||||||
|
<rect
|
||||||
|
style="fill:#fcfcfc;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect819"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="7.1054274e-15"
|
||||||
|
y="261.28122" />
|
||||||
|
<image
|
||||||
|
sodipodi:absref="../images/movehub.png"
|
||||||
|
xlink:href="../images/movehub.png"
|
||||||
|
transform="translate(25.390602,-51.6498)"
|
||||||
|
clip-path="url(#clipPath1545)"
|
||||||
|
style="stroke-width:5.92592621"
|
||||||
|
width="40.183594"
|
||||||
|
height="35.71875"
|
||||||
|
preserveAspectRatio="none"
|
||||||
|
id="image1492"
|
||||||
|
x="-25.506657"
|
||||||
|
y="312.93103" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#84ba4c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 31.147057,265.82725 1.011052,2.9815 3.622948,-4.60003"
|
||||||
|
id="path854"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.2 KiB |
@@ -0,0 +1,104 @@
|
|||||||
|
<?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: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"
|
||||||
|
width="150"
|
||||||
|
height="135"
|
||||||
|
viewBox="0 0 39.687499 35.718751"
|
||||||
|
version="1.1"
|
||||||
|
id="svg887"
|
||||||
|
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||||
|
sodipodi:docname="compat_primehub_false.svg">
|
||||||
|
<defs
|
||||||
|
id="defs881">
|
||||||
|
<clipPath
|
||||||
|
clipPathUnits="userSpaceOnUse"
|
||||||
|
id="clipPath1545">
|
||||||
|
<rect
|
||||||
|
style="fill:#fe2020;fill-opacity:0.48022599;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect1547"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="-25.390602"
|
||||||
|
y="312.93103" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#fcfcfc"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="3.959798"
|
||||||
|
inkscape:cx="10.681815"
|
||||||
|
inkscape:cy="89.597718"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1172"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-global="false" />
|
||||||
|
<metadata
|
||||||
|
id="metadata884">
|
||||||
|
<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 />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-261.28123)">
|
||||||
|
<rect
|
||||||
|
style="fill:#fcfcfc;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect819"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="0"
|
||||||
|
y="261.28122" />
|
||||||
|
<image
|
||||||
|
sodipodi:absref="../images/primehub.png"
|
||||||
|
xlink:href="../images/primehub.png"
|
||||||
|
style="stroke-width:5.92592621"
|
||||||
|
width="34.915073"
|
||||||
|
height="35.71875"
|
||||||
|
preserveAspectRatio="none"
|
||||||
|
id="image1503"
|
||||||
|
x="2.6458333"
|
||||||
|
y="261.28122" />
|
||||||
|
<g
|
||||||
|
id="g862"
|
||||||
|
transform="matrix(0.84064533,0,0,0.84993509,-12.416361,243.07822)"
|
||||||
|
style="stroke-width:1.18304348">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path856"
|
||||||
|
d="m 51.33389,24.998882 5.622395,5.622396"
|
||||||
|
style="fill:none;stroke:#e2302f;stroke-width:1.18304348;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#e2302f;stroke-width:1.18304348;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 56.956285,24.998882 51.33389,30.621278"
|
||||||
|
id="path858"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.5 KiB |
@@ -0,0 +1,94 @@
|
|||||||
|
<?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: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"
|
||||||
|
width="150"
|
||||||
|
height="135"
|
||||||
|
viewBox="0 0 39.687499 35.718751"
|
||||||
|
version="1.1"
|
||||||
|
id="svg887"
|
||||||
|
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||||
|
sodipodi:docname="compat_primehub_true.svg">
|
||||||
|
<defs
|
||||||
|
id="defs881">
|
||||||
|
<clipPath
|
||||||
|
clipPathUnits="userSpaceOnUse"
|
||||||
|
id="clipPath1545">
|
||||||
|
<rect
|
||||||
|
style="fill:#fe2020;fill-opacity:0.48022599;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect1547"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="-25.390602"
|
||||||
|
y="312.93103" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#fcfcfc"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="3.959798"
|
||||||
|
inkscape:cx="10.681815"
|
||||||
|
inkscape:cy="89.597718"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1172"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-global="false" />
|
||||||
|
<metadata
|
||||||
|
id="metadata884">
|
||||||
|
<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 />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-261.28123)">
|
||||||
|
<rect
|
||||||
|
style="fill:#fcfcfc;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect819"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="0"
|
||||||
|
y="261.28122" />
|
||||||
|
<image
|
||||||
|
sodipodi:absref="../images/primehub.png"
|
||||||
|
xlink:href="../images/primehub.png"
|
||||||
|
style="stroke-width:5.92592621"
|
||||||
|
width="34.915073"
|
||||||
|
height="35.71875"
|
||||||
|
preserveAspectRatio="none"
|
||||||
|
id="image1503"
|
||||||
|
x="2.6458333"
|
||||||
|
y="261.28122" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#84ba4c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 31.147057,265.82725 1.011052,2.9815 3.622948,-4.60003"
|
||||||
|
id="path854"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,104 @@
|
|||||||
|
<?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: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"
|
||||||
|
width="150"
|
||||||
|
height="135"
|
||||||
|
viewBox="0 0 39.687499 35.718751"
|
||||||
|
version="1.1"
|
||||||
|
id="svg887"
|
||||||
|
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||||
|
sodipodi:docname="compat_technichub_false.svg">
|
||||||
|
<defs
|
||||||
|
id="defs881">
|
||||||
|
<clipPath
|
||||||
|
clipPathUnits="userSpaceOnUse"
|
||||||
|
id="clipPath1545">
|
||||||
|
<rect
|
||||||
|
style="fill:#fe2020;fill-opacity:0.48022599;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect1547"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="-25.390602"
|
||||||
|
y="312.93103" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#fcfcfc"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="3.959798"
|
||||||
|
inkscape:cx="10.681815"
|
||||||
|
inkscape:cy="89.597718"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1172"
|
||||||
|
inkscape:window-x="1920"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-global="false" />
|
||||||
|
<metadata
|
||||||
|
id="metadata884">
|
||||||
|
<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 />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-261.28123)">
|
||||||
|
<rect
|
||||||
|
style="fill:#fcfcfc;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect819"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="0"
|
||||||
|
y="261.28122" />
|
||||||
|
<image
|
||||||
|
sodipodi:absref="../images/technichub.png"
|
||||||
|
xlink:href="../images/technichub.png"
|
||||||
|
style="stroke-width:5.92592621"
|
||||||
|
width="35.71875"
|
||||||
|
height="35.71875"
|
||||||
|
preserveAspectRatio="none"
|
||||||
|
id="image1514"
|
||||||
|
x="2.1503351"
|
||||||
|
y="261.28122" />
|
||||||
|
<g
|
||||||
|
id="g862"
|
||||||
|
transform="matrix(0.84064533,0,0,0.84993509,-12.416361,243.07822)"
|
||||||
|
style="stroke-width:1.18304348">
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path856"
|
||||||
|
d="m 51.33389,24.998882 5.622395,5.622396"
|
||||||
|
style="fill:none;stroke:#e2302f;stroke-width:1.18304348;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#e2302f;stroke-width:1.18304348;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 56.956285,24.998882 51.33389,30.621278"
|
||||||
|
id="path858"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.5 KiB |
@@ -0,0 +1,94 @@
|
|||||||
|
<?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: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"
|
||||||
|
width="150"
|
||||||
|
height="135"
|
||||||
|
viewBox="0 0 39.687499 35.718751"
|
||||||
|
version="1.1"
|
||||||
|
id="svg887"
|
||||||
|
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||||
|
sodipodi:docname="compat_technichub_true.svg">
|
||||||
|
<defs
|
||||||
|
id="defs881">
|
||||||
|
<clipPath
|
||||||
|
clipPathUnits="userSpaceOnUse"
|
||||||
|
id="clipPath1545">
|
||||||
|
<rect
|
||||||
|
style="fill:#fe2020;fill-opacity:0.48022599;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect1547"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="-25.390602"
|
||||||
|
y="312.93103" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#fcfcfc"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="3.959798"
|
||||||
|
inkscape:cx="51.592993"
|
||||||
|
inkscape:cy="94.901019"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:window-width="1853"
|
||||||
|
inkscape:window-height="1145"
|
||||||
|
inkscape:window-x="67"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:snap-global="false" />
|
||||||
|
<metadata
|
||||||
|
id="metadata884">
|
||||||
|
<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 />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,-261.28123)">
|
||||||
|
<rect
|
||||||
|
style="fill:#fcfcfc;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
|
||||||
|
id="rect819"
|
||||||
|
width="39.6875"
|
||||||
|
height="35.71875"
|
||||||
|
x="0"
|
||||||
|
y="261.28122" />
|
||||||
|
<image
|
||||||
|
sodipodi:absref="../images/technichub.png"
|
||||||
|
xlink:href="../images/technichub.png"
|
||||||
|
y="261.28122"
|
||||||
|
x="2.1503351"
|
||||||
|
id="image1514"
|
||||||
|
preserveAspectRatio="none"
|
||||||
|
height="35.71875"
|
||||||
|
width="35.71875"
|
||||||
|
style="stroke-width:5.92592621" />
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#84ba4c;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 31.147057,265.82725 1.011052,2.9815 3.622948,-4.60003"
|
||||||
|
id="path854"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 236 KiB After Width: | Height: | Size: 236 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 97 KiB After Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 116 KiB |