{
  "nbformat_minor": 0, 
  "nbformat": 4, 
  "cells": [
    {
      "execution_count": null, 
      "cell_type": "code", 
      "source": [
        "%matplotlib inline"
      ], 
      "outputs": [], 
      "metadata": {
        "collapsed": false
      }
    }, 
    {
      "source": [
        "\nCustom fusion example\n=====================\n\nCreating a new custom fusion type in Anatomist\n\n"
      ], 
      "cell_type": "markdown", 
      "metadata": {}
    }, 
    {
      "execution_count": null, 
      "cell_type": "code", 
      "source": [
        "from __future__ import print_function\n\nfrom __future__ import absolute_import\nfrom soma import aims\nimport os\nimport anatomist.direct.api as anatomist\n\na = anatomist.Anatomist()\n\n\nclass MyAObjectKrakboumCallback(anatomist.cpp.ObjectMenuCallback):\n\n    def __init__(self):\n        anatomist.cpp.ObjectMenuCallback.__init__(self)\n\n    def doit(self, objects):\n        print('MyAObjectKrakboumCallback:', objects)\n\n\nclass MyAObject(anatomist.cpp.AObject):\n    _type = anatomist.cpp.AObject.registerObjectType('MyAObject')\n    _menus = None\n    icon = os.path.join(str(a.anatomistSharedPath()),\n                        'icons', 'list_cutmesh.xpm')\n    ot = anatomist.cpp.QObjectTree\n    ot.setObjectTypeName(_type, 'Example of a custom AObject')\n    ot.setObjectTypeIcon(_type, icon)\n\n    def __init__(self, filename=''):\n        anatomist.cpp.AObject.__init__(self, filename)\n        self.setType(MyAObject._type)\n        self.setReferential(a.centralReferential())\n\n    def optionTree(self):\n        # set new option menus on this new object type\n        if MyAObject._menus is None:\n            m = anatomist.cpp.ObjectMenu()\n            krak = MyAObjectKrakboumCallback()\n            m.insertItem(['File'], 'Reload',\n                         anatomist.cpp.ObjectActions.fileReloadMenuCallback())\n            m.insertItem(['Color'], 'Material',\n                         anatomist.cpp.ObjectActions.colorMaterialMenuCallback())\n            m.insertItem(['Rototo', 'pouet'], 'krakboum', krak)\n            MyAObject._menus = m.releaseTree()\n            # avoid deleting the python part of the callback\n            MyAObject._nodelete = [krak]\n        return MyAObject._menus\n\n\nclass MyFusion(anatomist.cpp.FusionMethod):\n\n    def __init__(self):\n        anatomist.cpp.FusionMethod.__init__(self)\n        print(\"init myfusion\")\n\n    def canFusion(self, objects):\n        print(\"MyFusion : canFusion\")\n        return 120\n\n    def fusion(self, objects):\n        print(\"MyFusion : fusion\")\n        return MyAObject()\n\n    def ID(self):\n        return 'myFusion'\n\n    def orderingMatters(self):\n        return False\n\n\n# Register MyFusion\nanatomist.cpp.FusionFactory.registerMethod(MyFusion())\n\n# Load an object\nobj = a.loadObject('test.mesh')\n\n# if __name__ == '__main__' :\n# import qt\n# if qt.QApplication.startingUp():\n# qt.qApp.exec_loop()"
      ], 
      "outputs": [], 
      "metadata": {
        "collapsed": false
      }
    }
  ], 
  "metadata": {
    "kernelspec": {
      "display_name": "Python 2", 
      "name": "python2", 
      "language": "python"
    }, 
    "language_info": {
      "mimetype": "text/x-python", 
      "nbconvert_exporter": "python", 
      "name": "python", 
      "file_extension": ".py", 
      "version": "2.7.17", 
      "pygments_lexer": "ipython2", 
      "codemirror_mode": {
        "version": 2, 
        "name": "ipython"
      }
    }
  }
}