{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Boxes.py example\n", "\n", "This notebook is an interactive example of a Boxes.py generator. Feel free to play around and see how the result changes.\n", "\n", "Check out http://florianfesti.github.io/boxes/html/index.html for documentation." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from IPython.display import SVG, display\n", "import tempfile, os\n", "\n", "import sys\n", "#sys.path.append('..') # uncomments and adjust if your Boxes.py copy in not in the Python path\n", "from boxes import *" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "class Example(Boxes): # Adjust class name and call below\n", " \"\"\"Example: Single Shelve to screw to the wall\"\"\"\n", "\n", " ui_group = \"Shelves\" # change for generators belonging in another group\n", " \n", " def __init__(self):\n", " Boxes.__init__(self)\n", " # arguments\n", " self.addSettingsArgs(edges.FingerJointSettings, finger=3.0) # arguments for finger joints\n", " self.buildArgParser(x=150, y=70, h=50)\n", " self.argparser.add_argument(\n", " \"--hole_dist\", action=\"store\", type=float, default=10.,\n", " help=\"distance of the mounting holes to the boards\")\n", " self.argparser.add_argument(\n", " \"--hole_dia\", action=\"store\", type=float, default=3., # can't use \"hole\" as param name as it is a method\n", " help=\"diameter of the mounting holes\")\n", " \n", " def render(self):\n", " x, y, h = self.x, self.y, self.h\n", " t = self.thickness\n", " \n", " # render-magic goes here\n", " \n", " hole = lambda: self.hole(self.hole_dist, self.hole_dist, d=self.hole_dia) # use lambda as a callback\n", " # holes are placed relative to the inner rectangle of the back wall. The top part with the finger holes and \n", " # the finges at the sides do not count.\n", " # Callbacks start in the bottom left corner. Place holes in the third and forth corners only. \n", " self.rectangularWall(x, h, \"eFhF\", move=\"up\", callback=[None, None, hole, hole]) # back board\n", "\n", " self.rectangularWall(x, y, \"ehfh\", move=\"up\") # top board\n", " self.rectangularTriangle(y, h, \"ff\", num=2) # braces \n", " \n", "\n", "b = Example()\n", "fd, fn = tempfile.mkstemp()\n", "b.parseArgs(['--reference=0', '--debug=0', '--output=' + fn])\n", "b.open()\n", "b.render()\n", "b.close()\n", "\n", "display(SVG(fn))\n", "os.close(fd)\n", "os.remove(fn)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.6.8" } }, "nbformat": 4, "nbformat_minor": 2 }