{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib widget" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import matplotlib as mpl\n", "mpl.rc('text', usetex = True)\n", "mpl.rc('font', family = 'serif')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from pysketcher import *" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from ipywidgets import FloatSlider, AppLayout, Label, HBox, Button, Output" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from IPython.display import HTML, SVG, display, clear_output" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "from math import tan, radians, sin, cos" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "myfig={}" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "gw = \"\"\"\\\n", "libraries: [\"from math import tan, radians, sin, cos\",\"from pysketcher import *\"]\n", "fontsize: 18\n", "g: 9.81 # constant gravity\n", "theta: 30.0 # inclined plane angle\n", "L: 10.0 # sketch sizing parameter\n", "a: 1.0 #\n", "xmin: 0.0 # sketech min Abscissa\n", "ymin: -3.0 # sketech min Ordinate \n", "rl: 2.0 # rectangle width\n", "rL: 1.0 # rectangle length\n", "setframe: # sketch setup\n", " action: \"drawing_tool.set_coordinate_system(xmin=xmin, xmax=xmin+1.5*L,ymin=ymin, ymax=ymin+1.5*L,instruction_file='tmp_mpl_friction.py')\"\n", "setblackline: # default frame values and actions\n", " action: \"drawing_tool.set_linecolor('black')\"\n", "B: point(a+L,0) # wall right end\n", "A: point(a,tan(radians(theta))*L) # wall left end\n", "normal_vec: point(sin(radians(theta)),cos(radians(theta))) # Vector normal to wall\n", "tangent_vec: point(cos(radians(theta)),-sin(radians(theta))) # Vector tangent to wall\n", "help_line: Line(A,B) # wall line\n", "x: a + 3*L/10.\n", "y: help_line(x=x) \n", "contact: point(x, y) \n", "c: contact + rL/2*normal_vec\n", "rectangle: \n", " formula: Rectangle(contact, rl, rL)\n", " style:\n", " linecolor: blue\n", " filled_curves: blue\n", " transform: [\"rotate(-theta, contact)\",\"translate(-rl/2*tangent_vec)\"]\n", "N: \n", " formula: Force(contact - rl*normal_vec, contact, r'$N$', text_pos='start')\n", " style:\n", " linecolor: black\n", "mg: \n", " formula: Gravity(c, rl, text='$Mg$')\n", " style:\n", " linecolor: black\n", "wheel: \n", " formula: \"Composition({'outer': rectangle})\" \n", " style:\n", " shadow: 1\n", "body: \n", " formula: \"Composition({'wheel': wheel, 'N': N, 'mg': mg})\"\n", " style:\n", " linecolor: black\n", "mB:\n", " formula: Text(r'$B$',B)\n", "mA:\n", " formula: Text(r'$A$', A)\n", "wall: \n", " formula: Wall(x=[A[0], B[0]], y=[A[1], B[1]], thickness=-0.25,transparent=False)\n", " style:\n", " linecolor: black \n", "angle: \n", " formula: \"Arc_wText(r'$theta$', center=B, radius=3, start_angle=180-theta, arc_angle=theta, fontsize=fontsize)\"\n", " style:\n", " linecolor: black\n", " linewidth: 1\n", "ground: \n", " formula: Line((B[0]-L/10., 0), (B[0]-L/2.,0))\n", " stlye:\n", " linecolor: black\n", " linestyle: dashed\n", " linewidth: 1\n", "x_const: \n", " formula: Line(contact, contact + point(0,4))\n", " style:\n", " linestyle: dotted\n", " transform: rotate(-theta, contact)\n", "x_axis: \n", " formula: \"Axis(start=contact+ 2*rl*normal_vec, length=2*rl,label='$x$', rotation_angle=-theta)\"\n", "plan: \n", " formula: \"Composition({'body': body, 'angle': angle, 'inclined wall': wall, 'x start': x_const, 'x axis': x_axis, 'mA': mA, 'mB': mB})\"\n", "friction: \n", " formula: \"Composition({'plan': plan, 'ground': ground})\"\n", "\"\"\"" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "sketchParse(gw,myfig)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "d = myfig['friction'].draw()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "drawing_tool.display()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "angle = myfig['theta']\n", "def doright(change):\n", " global angle\n", " rotate(-5)\n", " angle += 5\n", "def doleft(change):\n", " global angle\n", " rotate(5)\n", " angle -= 5\n", "def rotate(theta):\n", " global angle\n", " drawing_tool.erase()\n", " myfig['plan']['angle'].changeAngles(180-angle,angle)\n", " myfig['plan'].rotate(theta,myfig['B'])\n", " myfig['friction'].draw()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "left = Button(\n", " description = '',\n", " icon = 'rotate-left',\n", ")\n", "left.on_click(doleft)\n", "right = Button(\n", " description = '',\n", " icon = 'rotate-right',\n", ")\n", "right.on_click(doright)\n", "output = Output()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "applayout = AppLayout(\n", " center=output,\n", " footer=HBox([left,right]),\n", " pane_heights=[0, 6, 1]\n", ")\n", "#drawing_tool.mpl.ion()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5252ca49b2834a9f8aaaa90463c502e3", "version_major": 2, "version_minor": 0 }, "text/plain": [ "AppLayout(children=(HBox(children=(Button(icon='rotate-left', style=ButtonStyle()), Button(icon='rotate-right'…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "applayout" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "with output:\n", " clear_output()\n", " display(drawing_tool.mpl.gcf().canvas)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "drawing_tool.mpl.ion()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "import time" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [], "source": [ "for i in range(0,5):\n", " doright(None)\n", " with output:\n", " clear_output(wait=True)\n", " display(drawing_tool.mpl.gcf().canvas)\n", " time.sleep(1)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", " \n", " \n", " \n", " \n", " 2020-08-02T10:39:43.877615\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.3.0, https://matplotlib.org/\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", " \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", " \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", " \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", " \n", " \n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for i in range(0,10):\n", " doright(None)\n", " clear_output(wait=True)\n", " display(SVG(sketch2SVG()))\n", " time.sleep(0.01)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "drawing_tool.mpl" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "myfig['friction'].graphviz_dot('friction')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "!dot -Tpng -o friction.png friction.dot" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![](friction.png)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "drawing_tool.mpl.gcf().canvas.print_png(\"friction.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![](friction.png)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "display(SVG(sketch2SVG()))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "gcf = drawing_tool.mpl.gcf()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "gcf.canvas" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "applayout.widgets['f066103c31184869818fd23961bacf85']." ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [], "source": [ "from io import BytesIO\n", "from PIL import Image\n", "def sketch2PNG():\n", " f = BytesIO()\n", " drawing_tool.mpl.gcf().canvas.print_png(f)\n", " img = Image.open(f)\n", " return img" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for i in range(0,10):\n", " doright(None)\n", " clear_output(wait=True)\n", " display(sketch2PNG()) \n", " time.sleep(0.01)" ] }, { "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.7.8" } }, "nbformat": 4, "nbformat_minor": 4 }