{
  "nbformat_minor": 0, 
  "nbformat": 4, 
  "cells": [
    {
      "execution_count": null, 
      "cell_type": "code", 
      "source": [
        "%matplotlib inline"
      ], 
      "outputs": [], 
      "metadata": {
        "collapsed": false
      }
    }, 
    {
      "source": [
        "\nMesh manipulation\n-----------------\n\nUsing a mesh and modifying it while it is displayed\n\n"
      ], 
      "cell_type": "markdown", 
      "metadata": {}
    }, 
    {
      "execution_count": null, 
      "cell_type": "code", 
      "source": [
        "from __future__ import absolute_import\nfrom soma import aims\nimport time\nimport os\nimport anatomist.direct.api as anatomist\nimport sys\nfrom soma.qt_gui.qt_backend.QtGui import qApp\nfrom soma.qt_gui.qt_backend import Qt\nimport sys\nimport six\n\n# create a unit sphere of radius 1 and 500 vertices\nm = aims.SurfaceGenerator.sphere(aims.Point3df(0, 0, 0), 1, 500, False)\n\n# Multiply the sphere size by 100\nfor p in six.moves.xrange(m.vertex().size()):\n    m.vertex()[p] *= 100\n\nrunloop = Qt.QApplication.instance() is None\n\n# Open Anatomist\na = anatomist.Anatomist()\n\n# Put the mesh in anatomist\nam = a.toAObject(m)\nam.releaseAppRef()\n\n# Create a new 3D window in Anatomist\naw = a.createWindow('3D')\n# c = anatomist.CreateWindowCommand( '3D' )\n# proc.execute( c )\n# aw = c.createdWindow()\n\n# Put the mesh in the created window\na.addObjects(am, aw)\n# c = anatomist.AddObjectCommand( [ am ], [ aw ] )\n# proc.execuFalsete( c )\n\n# keep a copy of original vertices\ncoords = [aims.Point3df(m.vertex()[i])\n          for i in six.moves.xrange(len(m.vertex()))]\n# take one vertex out of 3\npoints = six.moves.xrange(0, len(coords), 3)\n\nfor i in six.moves.xrange(10):\n    # shrink\n    for s in reversed(six.moves.xrange(100)):\n        for p in points:\n            m.vertex()[p] = coords[p] * s / 100.\n        am.setChanged()\n        am.notifyObservers()\n        qApp.processEvents()\n        time.sleep(0.01)\n    # expand\n    for s in six.moves.xrange(100):\n        for p in points:\n            m.vertex()[p] = coords[p] * s / 100.\n        am.setChanged()\n        am.notifyObservers()\n        qApp.processEvents()\n        time.sleep(0.01)\n\n# display in matplotlib for sphinx_gallery\ns = 0\nfor p in points:\n    m.vertex()[p] = coords[p] * s / 100.\nam.setChanged()\nam.notifyObservers()\nif aw.sphinx_gallery_snapshot():\n    runloop = False\nif runloop:\n    Qt.QApplication.instance().exec_()\nif runloop or 'sphinx_gallery' in sys.modules:\n    del aw, am, m"
      ], 
      "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"
      }
    }
  }
}