Cura development

Cura PPA

I am already maintaining the well-known Cura PPA since 2016 and always try to keep it up to date with the latest releases by Ultimaker. In the meantime, someone else took the time and the responsibility to maintain Cura as software not only in a personal package archive, in short PPA, but also at Debian’s software repositories. To read more about the PPA, its benefits and downsides and how to use it, please take a look at this page.

Cura Developer Kit (CDK)

This project is required for one of the following projects, which is mentioned on this page “Automized plugin builds with GitLab”. While packaging Cura for example as AppImage on Linux, as NSIS installer on Windows or a .dmg on macOS, it is recommended to use tools like cura-build and cura-build-environment to build these installers and standalone packages for each operating system.

During this process, some applications need to get built before you can create these or you even need to install some in a precompiled format. An example of this is the NSIS installer, which needs to be downloaded from its website and needs to be installed. However, this has the disadvantage, that you first need to install all the required software and most disappointing is, when applications get updated and thus something else, that is depending does not work anymore.

Another problem found on cura-build-environment is the usage of an installer script for Python, called pip, which downloads and installs Numpy and SciPy from 3rd-party websites. The problem with this software, which comes in prebuilt packages, is, that they have been built with proprietary software like the Intel Compiler and their “Math Kernel Library“, in short MKL.

As a consequence to provide a complete bundle of open-source software, which is not restricted by any licenses, the cura-build-environment has been expanded heavily to provide all basic tools like the C/C++ compiler, Fortran compiler, different build utilities and Python modules for rapid programming experiences. When done, this build system will be expanded with cura-build and will be called (probably) cura-build-system. But there was no clear decision has been made so far, because, in theory, you could use it for other developments, too.

Currently planned is:

  • a minimal package, which includes all basics to build eg. a plugin,
  • a developer package, which includes all basics plus additional Python modules, which are not included in Cura itself.

This developer package should also allow to run Cura directly from there and give the possibility to add Python modules like usually done with pip. Also, there should be something like a guide, how to make use of this CDK by using eclipse + PyDev plugin.

However, the current short-term goal is the creation of the minimal package, so I’m able to build plugin packages automatically.

–> To discuss:

Plugin builder, called “Cura Plugin Oven (CPO)”

To be honest it is already there and is just kept close. The application allows building plugin packages either directly from Git or from your filesystem. Before building the package, it checks whether the project files are matched with the conventions, which are set by Ultimaker. Then it packages your plugin in different ways as you prefer. Either you can create:

  • source package – all sources of your plugin are being used inside the package and will get distributed like this,
  • binary package – all sources will be compiled before they got placed into the plugin package,
  • mixed package – all sources and binaries are included in your package.

Also, there is a switch to optimize the binary code. It basically makes use of Pythons optimization options. Additionally, it is possible to choose the compression method of your plugin package, which is basically nothing else than a Zip archive.

Finally, there are also some test procedures, which make sure that the plugin is also able to be recognized by Cura and can be loaded.

Automized plugin builds with GitLab

Now based on both software solutions, there is the main goal to build plugin packages in GitLab. The solution shall look at the end like this: Once a plugin has been tagged with a new version, GitLab shall trigger a new build. Within this build, the builder should take the latest minimal CDK and take additionally CPO to build it. Since the CDK is also being used to build all Cura software distributions, it ensures that the same software, which builds Cura, is also being used to build the plugins. Binary compiled Python modules are thus always compatible and in special cases, where for example Cython has been used to build C-extensions, the same dependencies and shared libraries are being used to build these extensions.

So what you get is a software solution for any development out of one hand. This saves time and is also important for any software developer/engineer your nerves!

CAD integration plugins

Read more at “CAD integration in Ultimaker Cura“. There will be more than enough info about this topic.