{
 "cells": [
  {
   "cell_type": "markdown",
   "source": [
    "Weaving a simple curved surface with positive curvature."
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "![](../assets/paraboloid.jpg)"
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Load packages"
   ],
   "metadata": {}
  },
  {
   "outputs": [],
   "cell_type": "code",
   "source": [
    "using IntervalSets\n",
    "using BasicBSpline\n",
    "using StaticArrays\n",
    "using ElasticSurfaceEmbedding"
   ],
   "metadata": {},
   "execution_count": 1
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Define the shape of the surface"
   ],
   "metadata": {}
  },
  {
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "D (generic function with 1 method)"
     },
     "metadata": {},
     "execution_count": 2
    }
   ],
   "cell_type": "code",
   "source": [
    "ElasticSurfaceEmbedding.𝒑₍₀₎(u¹,u²) = SVector(u¹, u², u¹^2+u²^2)\n",
    "n = 10\n",
    "D(i,n) = (-1.0..1.0, (i-1)/n..i/n)"
   ],
   "metadata": {},
   "execution_count": 2
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Compute the shape of the embeddings"
   ],
   "metadata": {}
  },
  {
   "outputs": [],
   "cell_type": "code",
   "source": [
    "steptree = ElasticSurfaceEmbedding.StepTree()\n",
    "for i in 1:10\n",
    "    initial_state!(steptree, D(i,n))\n",
    "    newton_onestep!(steptree, fixingmethod=:fix3points)\n",
    "    newton_onestep!(steptree)\n",
    "    newton_onestep!(steptree)\n",
    "    newton_onestep!(steptree)\n",
    "    newton_onestep!(steptree)\n",
    "    refinement!(steptree, p₊=(0,1), k₊=suggest_knotvector(steptree))\n",
    "    newton_onestep!(steptree)\n",
    "    newton_onestep!(steptree)\n",
    "    pin!(steptree)\n",
    "end"
   ],
   "metadata": {},
   "execution_count": 3
  },
  {
   "cell_type": "markdown",
   "source": [
    "## Export the shapes in SVG format"
   ],
   "metadata": {}
  },
  {
   "outputs": [
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": "10-element Vector{String}:\n \"paraboloid/pinned/pinned-9.svg\"\n \"paraboloid/pinned/pinned-18.svg\"\n \"paraboloid/pinned/pinned-27.svg\"\n \"paraboloid/pinned/pinned-36.svg\"\n \"paraboloid/pinned/pinned-45.svg\"\n \"paraboloid/pinned/pinned-54.svg\"\n \"paraboloid/pinned/pinned-63.svg\"\n \"paraboloid/pinned/pinned-72.svg\"\n \"paraboloid/pinned/pinned-81.svg\"\n \"paraboloid/pinned/pinned-90.svg\""
     },
     "metadata": {},
     "execution_count": 4
    }
   ],
   "cell_type": "code",
   "source": [
    "export_pinned_steps(\"paraboloid\", steptree, xlims=(-2,2), ylims=(-2,2), unitlength=(100,\"mm\"), mesh=(20,1))"
   ],
   "metadata": {},
   "execution_count": 4
  },
  {
   "cell_type": "markdown",
   "source": [
    "![](paraboloid/pinned/pinned-9.svg)\n",
    "![](paraboloid/pinned/pinned-18.svg)\n",
    "![](paraboloid/pinned/pinned-27.svg)\n",
    "![](paraboloid/pinned/pinned-36.svg)\n",
    "![](paraboloid/pinned/pinned-45.svg)\n",
    "![](paraboloid/pinned/pinned-54.svg)\n",
    "![](paraboloid/pinned/pinned-63.svg)\n",
    "![](paraboloid/pinned/pinned-72.svg)\n",
    "![](paraboloid/pinned/pinned-81.svg)\n",
    "![](paraboloid/pinned/pinned-90.svg)"
   ],
   "metadata": {}
  },
  {
   "cell_type": "markdown",
   "source": [
    "---\n",
    "\n",
    "*This notebook was generated using [Literate.jl](https://github.com/fredrikekre/Literate.jl).*"
   ],
   "metadata": {}
  }
 ],
 "nbformat_minor": 3,
 "metadata": {
  "language_info": {
   "file_extension": ".jl",
   "mimetype": "application/julia",
   "name": "julia",
   "version": "1.10.4"
  },
  "kernelspec": {
   "name": "julia-1.10",
   "display_name": "Julia 1.10.4",
   "language": "julia"
  }
 },
 "nbformat": 4
}