Moho Integration

Client: “We’ve many tools from you already. Now we would like to create the new project using the Moho animation software. Can we integrate the tools in there?”

We: “Certainly. We’ll have a look.”

Host Handler

  • RnDeep Layer of abstraction for communicating with other DCCs
  • To integrate a new DCC, one needs to implement specific functionalities using the API provided by the DCC
  • Most of the DCCs in CGI support Python
  • Until now, we integrated 8 DCCs: 3 of those had Javascript APIs

What is Moho?

  • Software for creating 2D animations
  • Provides an API
  • It looks like the API contains all functionalities that we need.
  • API - programming language is Lua.

We: “Ehmmmm… Lua? Our tools are mostly written in Python!”

Architecture

  • Create on basis of previous Javascript-API-DCCs (Photoshop/After Effects/Toon Boom)
  • C++ Plugin
  • Embedded Python Thread
  • Socket Communication with the DCC
  • DCC commands can usually only be evaluated in main-thread

For Lua, we’ll work with a coroutine
We’ll use a modal Dialog to block the main-thread for us, while a python command is actively running

Proof-of-Concept

Goal: Create a C++ Lua Plugin that is capable to run a print statement with the Moho internal Lua.

  • [✓ ] Build Lua.
  • [✓ ] Write plugin.
  • [X ] Load plugin.

We found out, that the Lua52.dll is not shipped with Moho.

Solution:

Adding Lua52.dll to the plugin installation routine.

  • [✓ ] Load plugin.
  • [✓ ] Implement running python code from Lua code: Python getMenuName() → string Lua Plugin.
  • [X ] Implement running Lua code from Python code.

The reason is, that we shipped our own Lua52.dll. And that caused issues with mutable objects:

Solution:

  • We can’t use mutable objects
  • Instead of a Lua Array we’ll send a Lua JSON string
  • Lua-JSON-Parser will create an Array from the JSON string
  • [✓ ] Implement running Lua code from Python code.
  • [✓ ] Now we can open up python windows.

It Works!