CAD Exchanger is now on Android

CAD Exchanger is now available in Google Play. Free, with in-app purchase (larger file size support, export to B-Rep formats, and more features in the future). OCC 6.9.0+ and Qt (QML) 5.5.0 based.

I would like to thank again the OCC development team (Andrey B, Kirill G, Sergey A, Ivan and others) and management (Alexander T and Michael K) for their support in porting the OCC platform as a prerequisite. See more details in the official press-release.

We met for the first time in August 2014 and the folks did their major part in a couple of months or so. Sometimes it was a bumpy road with some hot discussions but all is well that ends well. On our side we were doing a parallel port of a major version 3.0 to a totally new data model and UI, as a prerequisite to Android port. With parallel jumps between Windows, Linux and Android, with their different IDE's and toolchains - all pleasures of cross-platform development. That took us way too much time and we missed the schedule a few times. I regret we did this 6+ months later than originally planned but still would like to thank my team - Sergey, Denis and others for their extra efforts. There were multiple fruitful forum topics, bug reports and fixes - some are herehere or in Mantis, so good working relationship between the teams has been strengthened.

Among technical highlights there are probably a few interesting items - for instance an asynchronous, non-blocking visualization workflow (see discussion preview here). When we have some free cycles, we will try to share more technical details.

Meanwhile, if you have some spare time, please give a try to a brand new CAD Exchanger version and share your thoughts via Google Play, here or just email us at info@cadexhanger.com. We'd *really* be happy to hear from the community. Constructive critic, recommendations or positive comments are all valuable.

And please do keep CAD Exchanger on your device, you now know some people behind it ;-).

Thanks for your time and take care,


  1. Congrats Roman, a huge achievement, got it on my nexus phone ;)

  2. Btw, the non-blocking viz. workflow is a big deal... thanks for pushing that one!

  3. So I see cad exchanger is only able to be installed on tablets, not phones?

  4. Hi Jelle,
    Thank you for your support. CAD Exchanger should run on phones (we did have engineering versions running). The point is that the layout has not been optimized for phones yet, so user experience can be suboptimal.
    We certainly have phone port on our roadmap.
    Thanks again,

  5. hi Roman,

    Ah, so i tried installing through google play, but its stated that the app isnt compatible with my phone, which is an LG nexus 5

  6. Too bad. Sorry Jelle. I've filed a bug report to our developers for them to check. Please stay tuned.

  7. Hi Roman,

    I've just started to work on porting some of the pythonocc code to QML.
    I read that a lot of hard work was done such to port OCC to be able to utilize QML, right? I'm working on refactoring the GL widget to use Qt5's QOpenGLWidget rather than Qt4's QGLWidget. Can you comment on the minimal OCC version to be able to use QOpenGLWidget? Is that 6.8.0? IIRC that's the first demonstrating CAD Assistant / running on android, right?

    Thanks! I think you guys have been sponsoring this transition, and I'm really looking fwd combining (python)OCC and QML...


  8. Hi Jelle,

    The minimal appropriate OCC version is 6.9.0. You might certainly want to refer to samples/qt/AndroidQt.

    A couple of notes on peculiarities which we had to take into account:
    - connection to existing OpenGL context;
    - use of shaders instead of fixed pipeline
    - dedicated threads to UI, rendering and computations;
    - use of FBO.

    Good luck with the port!

  9. Hello Roman,

    Could you maybe elaborate how you did setup OCC to render into an FBO and render that FBO into a QQuickItem?

    I tried with something based on

    But I cannot get it to work. Maybe the QQuickFrameBufferObject is not the way to go because it itself is already an FBO

    Would really appreciate it,


  10. Hi Dirk,

    Sorry for getting that long to respond - although on my TODO list your inquiry got buried too quickly with other stuff.
    Anyway, if that is still relevant here are some tips shared by our lead GUI developer who made that QML/Android port:
    There are two approached to combine OCC rendering with Qt 5:

    1. Render OCC to Qt Quick Window directly when "beforeRendering" signal is emitted.

    See AndroidQt occ 7.0.0 sample and "OpenGL Under QML" Qt example (http://doc.qt.io/qt-5/qtquick-scenegraph-openglunderqml-example.html).

    Pros of this approach are:
    - minimum actions to use OCC with QtQuick;

    direct rendering to window (so it take all window space), so you cannot use QtQuickItem transformations, rotations, effects, etc.

    2. Render OCC to QtQuickFrameBuffer.
    OCC cannot use QtQuickFrameBuffer for rendering, but you can use as follows: render to OCC frameBuffer (see V3d_View::ToPixMap method as reference), then blit OCC frame buffer to Qt frame buffer (see OpenGl_View::blitBuffers method as reference).

    - full compatibility with recommended Qt Quick item rendering;
    - all features in Qml code;

    - complicated implementation and some memory overhead;
    - OCC frameBuffer size should be kept in sync with Qt frameBuffer size;
    - Qt Quick use multi-threading rendering, so you should guarantee all OCC rendering methods be called in a dedicated render thread.

    Hope this will give you some food for thought.
    Good luck!

  11. Thanks for the hints Roman!

    I will take a look!