{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "\n# Custom fusion example\n\nCreating a new custom fusion type in Anatomist\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "from 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()"
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.11.0"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}