{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import cadquery as cq\n", "from jupyter_cadquery import (\n", " open_viewer, show,\n", " set_defaults, get_defaults, \n", ")\n", "from cadquery_massembly import Mate, MAssembly, relocate\n", "\n", "cv = open_viewer(\"Test\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "set_defaults(axes=True, axes0=True, mate_scale=2.5)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "box0 = cq.Workplane(\"XY\").box(10,20,10)\n", "box1 = cq.Workplane(\"XZ\").box(10,20,10)\n", "box2 = cq.Workplane(\"YX\").box(10,20,10)\n", "box3 = cq.Workplane(\"YZ\").box(10,20,10)\n", "\n", "for box, name, dirs in (\n", " (box0, \"box0\", (\"Y\", \"X\")),\n", " (box1, \"box1\", (\"Z\", \"X\")),\n", " (box2, \"box2\", (\"X\", \"Y\")),\n", " (box3, \"box3\", (\"Z\", \"Y\")),\n", "):\n", " for i, direction in enumerate(dirs):\n", " box.faces(f\">{direction}\").tag(f\"{name}_m{i}\")\n", "\n", "show(box0, box1, box2, box3)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "cyl1 = cq.Workplane(\"XY\").circle(2).extrude(10)\n", "cyl2 = cq.Workplane(\"XZ\").circle(2).extrude(10)\n", "cyl3 = cq.Workplane(\"YZ\").circle(2).extrude(10)\n", "\n", "for cyl, name, ax in (\n", " (cyl1, \"cyl1\", \"Z\"), \n", " (cyl2, \"cyl2\", \"Y\"), \n", " (cyl3, \"cyl3\", \"X\"),\n", "):\n", " cyl.faces(f\">{ax}\").tag(f\"{name}_m0\")\n", " cyl.faces(f\"<{ax}\").tag(f\"{name}_m1\")\n", " \n", "show(cyl1, cyl2, cyl3)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def create():\n", " L = lambda *args: cq.Location(cq.Vector(*args))\n", " C = lambda *args: [int(args[i]*255) for i in range(3)]\n", "\n", " a = (MAssembly(cyl3, name=\"cyl3\", color=C(1,0,0), loc=L(-20, -10, 20))\n", " .add(box3, name=\"box3\", color=C(1,0,0), loc=L(20,10,0))\n", " )\n", " b = (MAssembly(cyl2, name=\"cyl2\", color=C(0,0.5, 0.25), loc=L(0, -20, 20))\n", " .add(box2, name=\"box2\", color=C(0,0.5,0.25), loc=L(0, 20, 20))\n", " .add(a, name=\"a\")\n", " )\n", " c = (MAssembly(cyl1, name=\"cyl1\", color=C(0,0,1), loc=L(10,0,-10))\n", " .add(box1, name=\"box1\", color=C(0,0,1), loc=L(10, 0,10))\n", " .add(b, name=\"b\")\n", " )\n", " d = (MAssembly(box0, name=\"box0\", color=C(0.5,0.5,0.5), loc=L(30,30,30))\n", " .add(c, name=\"c\")\n", " )\n", " return d\n", "\n", "assy = create()\n", "show(assy)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from collections import OrderedDict as odict\n", "\n", "assy = create()\n", "for obj, name in (\n", " (\"box0\", \"box0\"), (\"c/box1\", \"box1\"), (\"c/b/box2\", \"box2\"), (\"c/b/a/box3\", \"box3\"), \n", " (\"c\", \"cyl1\"), (\"c/b\", \"cyl2\"), (\"c/b/a\", \"cyl3\")\n", "):\n", " assy.mate(f\"{obj}?{name}_m0\", name=f\"{name}_m0\", transforms=odict(rx=180 if \"c\" in name else 0), origin=True)\n", " assy.mate(f\"{obj}?{name}_m1\", name=f\"{name}_m1\", transforms=odict(rx=0 if \"b\" in name else 180))\n", "\n", "show(assy, render_mates=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "assy.relocate()\n", "show(assy, render_mates=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "assy.assemble(\"cyl1_m0\", \"box0_m0\")\n", "assy.assemble(\"box1_m1\", \"cyl1_m1\")\n", "assy.assemble(\"cyl2_m0\", \"box1_m0\")\n", "assy.assemble(\"box2_m1\", \"cyl2_m1\")\n", "assy.assemble(\"cyl3_m0\", \"box2_m0\")\n", "assy.assemble(\"box3_m1\", \"cyl3_m1\")\n", "\n", "d = show(assy, render_mates=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from jupyter_cadquery import AnimationTrack\n", "\n", "d.add_track(AnimationTrack(f\"/box0/c\", \"rz\", np.linspace(0,6,13), np.linspace(0, 360, 13)))\n", "d.add_track(AnimationTrack(f\"/box0/c/b\", \"rz\", np.linspace(0,6,13), np.linspace(0, 360, 13)))\n", "d.add_track(AnimationTrack(f\"/box0/c/b/a\", \"rz\", np.linspace(0,6,13), np.linspace(0, 360, 13)))\n", " \n", "d.animate(speed=3)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "language_info": { "name": "python", "pygments_lexer": "ipython3" }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 4 }