3D printer / slicing GUI built on top of the Uranium framework
Find a file
Ghostkeeper 4c770587e2
Fix getting additional bytes from QImage
QImage's bytes are aligned to memory words per column of pixels. That means that one of these columns contains 99% valid image data, but with several bytes of unassigned noise at the end. How many of these padding bytes there are would depend on the image size, i.e. Cura's window size. In the end, the total number of bytes in the image ends up slightly more than w*h*3. As a result, Cura would crash because it couldn't reshape the image. Reshaping was completely unnecessary anyway, but this random noise was giving false positives also.
But how do you then get only the actual pixels from each column of data? We can't just go iterating over this array, as that would be an iteration of thousands of columns which is prohibitively slow in Python. No, we're going to do some Numpy magic. We're going to create a class that pretends to be a Numpy array. Give this class some data and say that this data has a certain pixel size but also a certain STRIDE LENGTH. This stride length can be the length of the actual pixel data. As a result when Numpy sees this object it will read out the data using these strides, all done efficiently within the C code of Numpy.

Framerate is fantastic on my computer. No problems at all. Pretty powerful computer though. But also a big 5k screen. Still no problem for Numpy. Seems to be decently efficient.

Took me quite a while to figure all of this out.

Contributes to issue CURA-7262.
2020-03-25 18:00:14 +01:00
.github Fix branch checkout for PRs with GitHub workflow 2020-01-16 13:27:17 +01:00
cmake Update invalid imports checker documentation 2020-01-20 16:35:32 +01:00
cura Merge branch 'master' into xray_in_solid_view 2020-03-24 21:45:48 +01:00
docker Rewrite invalid imports checker to Python 2020-01-20 16:24:26 +01:00
docs Add some extra drawings regarding the profiles 2019-12-20 13:50:05 +01:00
icons New application icons 2015-09-17 17:05:01 +02:00
plugins Fix getting additional bytes from QImage 2020-03-25 18:00:14 +01:00
resources Merge branch 'master' into xray_in_solid_view 2020-03-24 21:45:48 +01:00
scripts Update invalid imports checker documentation 2020-01-20 16:35:32 +01:00
tests Remove some unused code from TestCuraStackBuilder 2020-02-28 14:29:26 +01:00
.dockerignore Emit backend errors so we can process them differently than through a qml notification 2018-03-05 14:33:13 +01:00
.gitignore Ignore SettingsGuide plug-in 2019-09-06 14:35:30 +02:00
.pylintrc Fix regex for private & long functions 2020-01-10 17:43:40 +01:00
build.sh Add the scripts used to build the release package (still needs some more work, but works on my desktop) 2015-05-04 13:35:53 +02:00
CMakeLists.txt CMake: Fixing warning about path conversion 2020-02-22 18:34:21 +01:00
contributing.md Add contribution guidelines 2019-03-05 14:24:31 +01:00
cura.appdata.xml Fixed incorrect appstream data XML. 2018-06-18 08:08:28 +02:00
cura.desktop.in Add StartupWMClass=cura.real in order to group windows properly in Gnome and more. 2019-09-27 02:50:20 +01:00
cura.sharedmimeinfo Update desktop and mimeinfo to add gcode mime type 2018-11-22 15:47:12 +01:00
cura_app.py Merge pull request #7211 from Ultimaker/CURA-7150_proper_http_request_headers 2020-03-24 11:25:07 +01:00
Dockerfile Emit backend errors so we can process them differently than through a qml notification 2018-03-05 14:33:13 +01:00
Jenkinsfile Use generated Makefiles to run tests 2018-11-20 09:53:17 +01:00
LICENSE Changing AGPLv3 to LGPLv3 2017-09-28 13:00:43 +02:00
pytest.ini Added unit test stub 2016-04-29 11:32:33 +02:00
README.md Document dependency on fdm_materials 2018-11-26 08:30:24 +01:00
requirements.txt Add pytest to requirements 2020-03-20 10:57:23 +01:00
run_coverage.py Add convenience script for running complete coverage 2019-08-30 16:32:11 +02:00
run_in_docker.sh Cleanup 2018-03-01 11:00:49 +01:00
run_mypy.py Remove trailing spaces 2020-02-17 15:25:17 +01:00
test-in-docker.sh Add a script to execute the CI scripts on a local Docker instance 2020-01-13 14:43:11 +01:00

Cura

This is the new, shiny frontend for Cura. Check daid/LegacyCura for the legacy Cura that everyone knows and loves/hates. We re-worked the whole GUI code at Ultimaker, because the old code started to become unmaintainable.

Logging Issues

For crashes and similar issues, please attach the following information:

  • (On Windows) The log as produced by dxdiag (start -> run -> dxdiag -> save output)
  • The Cura GUI log file, located at
    • %APPDATA%\cura\<Cura version>\cura.log (Windows), or usually C:\Users\\<your username>\AppData\Roaming\cura\<Cura version>\cura.log
    • $USER/Library/Application Support/cura/<Cura version>/cura.log (OSX)
    • $USER/.local/share/cura/<Cura version>/cura.log (Ubuntu/Linux)

If the Cura user interface still starts, you can also reach this directory from the application menu in Help -> Show settings folder

For additional support, you could also ask in the #cura channel on FreeNode IRC. For help with development, there is also the #cura-dev channel.

Dependencies

  • Uranium Cura is built on top of the Uranium framework.
  • CuraEngine This will be needed at runtime to perform the actual slicing.
  • fdm_materials Required to load a printer that has swappable material profiles.
  • PySerial Only required for USB printing support.
  • python-zeroconf Only required to detect mDNS-enabled printers.

Build scripts

Please checkout cura-build for detailed building instructions.

Running from Source

Please check our Wiki page for details about running Cura from source.

Plugins

Please check our Wiki page for details about creating and using plugins.

Supported printers

Please check our Wiki page for guidelines about adding support for new machines.

Configuring Cura

Please check out Wiki page about configuration options for developers.

Translating Cura

Please check out Wiki page about how to translate Cura into other languages.

License

Cura is released under the terms of the LGPLv3 or higher. A copy of this license should be included with the software.