{ "nodes": [ { "datums": [ { "expr": "\u0011[__6.__7]", "name": "a", "type": "_fabtypes.Shape", "uid": 0 }, { "expr": "\u0011[__7.__2,__4.__5]", "name": "b", "type": "_fabtypes.Shape", "uid": 1 }, { "expr": "\u0012fab.types.Shape('iiiiiiiiiiiiiiiiiiiiiiam__f1aa-f0.35X-Xf2.15a-f-1.65Y-Yf-0.65a-f-0.35Z-Zf0.35am__f1iaa-f0X-Xf2.5a-f-1.65Y-Yf-0.65aa-f0.35X-Xf2.15a-f-2Y-Yf-0.3a-f0Z-Zf0-r++q-Xf2.15q-Yf-0.65qZf0.35-r++q-Xf0.35q-Yf-0.65qZf0.35-r++q-Xf2.15q-Yf-1.65qZf0.35-r++q-Xf0.35q-Yf-1.65qZf0.35-r++q-Xf2.15q-Yf-0.65qZf0.35-r++q-Xf0.35q-Yf-0.65qZf0.35-r++q-Xf2.15q-Yf-1.65qZf0.35-r++q-Xf0.35q-Yf-1.65qZf0.35am__f1-r+q-Xf2.15q-Yf-0.65f0.35a-f0Z-Zf0a-r+q-Yf-0.65q-Zf0f0.35a-f0.35X-Xf2.15a-r+q-Xf2.15q-Zf0f0.35a-f-1.65Y-Yf-0.65am__f1-r+q-Xf0.35q-Yf-0.65f0.35a-f0Z-Zf0a-r+q-Yf-1.65q-Zf0f0.35a-f0.35X-Xf2.15a-r+q-Xf0.35q-Zf0f0.35a-f-1.65Y-Yf-0.65am__f1-r+q-Xf2.15q-Yf-1.65f0.35a-f0Z-Zf0a-r+q-Yf-0.65q-Zf0f0.35a-f0.35X-Xf2.15a-r+q-Xf2.15q-Zf0f0.35a-f-1.65Y-Yf-0.65am__f1-r+q-Xf0.35q-Yf-1.65f0.35a-f0Z-Zf0a-r+q-Yf-1.65q-Zf0f0.35a-f0.35X-Xf2.15a-r+q-Xf0.35q-Zf0f0.35a-f-1.65Y-Yf-0.65iim-Xf0-Yf-1.7-Zf0m-Xf0-Yf0-Zf0m+*f0.819152X*f0.573576Y+*f-0.573576X*f0.819152Y_m-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m+*f1X*f0ZY+*f-0X*f1Zm-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m_+*f0.642788Y*f-0.766044Z+*f0.766044Y*f0.642788Zm-Xf0-Yf0-Zf0ia-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1.81m-Xf0-Yf0-Zf1m-Xf0-Yf0-Zf0m+*f1X*f0Y+*f-0X*f1Y_m-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m+*f1X*f0ZY+*f-0X*f1Zm-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m_+*f1Y*f0Z+*f-0Y*f1Zm-Xf0-Yf0-Zf0a-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1iiim-Xf0-Yf-0.4-Zf0ia-r+q-Xf0.8q-Zf0f0.28a-f0Y-Yf1.6a-r+q-Xf0.8q-Zf0f0.28a-f0Y-Yf1.6m-Xf0-Yf-0.4-Zf0ia-r+q-Xf1.5q-Zf0f0.26a-f0Y-Yf1.2a-r+q-Xf1.5q-Zf0f0.26a-f0Y-Yf1.2m-Xf0-Yf-0.4-Zf0ia-r+q-Xf2.1q-Zf0f0.22a-f0Y-Yf0.7a-r+q-Xf2.1q-Zf0f0.22a-f0Y-Yf0.7m-Xf0.25-Yf-0.7-Zf0m-Xf0-Yf0-Zf0m+*f0.819152X*f0.573576Y+*f-0.573576X*f0.819152Y_m-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m+*f1X*f0ZY+*f-0X*f1Zm-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m_+*f1Y*f0Z+*f-0Y*f1Zm-Xf0-Yf0-Zf0ia-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1.81a-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1.81m-Xf0-Yf0-Zf0m+*f0.819152X*f0.573576Y+*f-0.573576X*f0.819152Y_m-Xf-0-Yf-0-Zf0m-Xf0-Yf-1-Zf0m_+*f0.984808Y*f-0.173648Z+*f0.173648Y*f0.984808Zm-Xf0-Yf1-Zf-0iiiiiiiiiiiiiiiiiiiiiam__f1aa-f-0.255X-Xf0.755a-f-4.755Y-Yf-2.245a-f-0.35Z-Zf0.35am__f1iaa-f-0.5X-Xf1a-f-4.755Y-Yf-2.245aa-f-0.255X-Xf0.755a-f-5Y-Yf-2a-f-0.105Z-Zf0.105-r++q-Xf0.755q-Yf-2.245q-Zf0.105f0.245-r++q-Xf-0.255q-Yf-2.245q-Zf0.105f0.245-r++q-Xf0.755q-Yf-4.755q-Zf0.105f0.245-r++q-Xf-0.255q-Yf-4.755q-Zf0.105f0.245-r++q-Xf0.755q-Yf-2.245q-Zf-0.105f0.245-r++q-Xf-0.255q-Yf-2.245q-Zf-0.105f0.245-r++q-Xf0.755q-Yf-4.755q-Zf-0.105f0.245-r++q-Xf-0.255q-Yf-4.755q-Zf-0.105f0.245am__f1-r+q-Xf0.755q-Yf-2.245f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-2.245q-Zf0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf0.755q-Zf0.105f0.245a-f-4.755Y-Yf-2.245am__f1-r+q-Xf-0.255q-Yf-2.245f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-4.755q-Zf0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf-0.255q-Zf0.105f0.245a-f-4.755Y-Yf-2.245am__f1-r+q-Xf0.755q-Yf-4.755f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-2.245q-Zf-0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf0.755q-Zf-0.105f0.245a-f-4.755Y-Yf-2.245am__f1-r+q-Xf-0.255q-Yf-4.755f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-4.755q-Zf-0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf-0.255q-Zf-0.105f0.245a-f-4.755Y-Yf-2.245',float('-1.459099'),float('-4.382555'),float('-1.566520'),float('3.687037'),float('1.200000'),float('1.039275'))", "name": "shape", "type": "_fabtypes.Shape", "uid": 2 } ], "inspector": [ 458.17630620750259, 353.11991079157229 ], "name": "Hand", "script": [ "import fab.types", "", "title('Union')", "input('a', fab.types.Shape)", "input('b', fab.types.Shape)", "", "output('shape', a | b)", "" ], "uid": 3 }, { "datums": [ { "expr": "0.8", "name": "x", "type": "float", "uid": 0 }, { "expr": "0", "name": "ymin", "type": "float", "uid": 1 }, { "expr": "1.6", "name": "ymax", "type": "float", "uid": 2 }, { "expr": "0.0", "name": "z", "type": "float", "uid": 3 }, { "expr": "0.28", "name": "r", "type": "float", "uid": 4 }, { "expr": "\u0012fab.types.Shape('a-r+q-Xf0.8q-Zf0f0.28a-f0Y-Yf1.6',float('0.520000'),float('0.000000'),float('-0.280000'),float('1.080000'),float('1.600000'),float('0.280000'))", "name": "shape", "type": "_fabtypes.Shape", "uid": 5 } ], "inspector": [ -711.30231785145099, 939.60861049421362 ], "name": "f2d1", "script": [ "import fab", "import math", "", "title('Cylinder (Y)')", "", "input('x', float)", "input('ymin', float)", "input('ymax', float)", "input('z', float)", "input('r', float)", "", "output('shape', fab.shapes.cylinder_y(x, ymin, ymax, z, r))", "", "# UI", "sb.ui.wireframe([(x, ymin, z), (x, ymax, z)])", "sb.ui.wireframe([(x, ymin, z), (x+r, ymin, z)])", "", "sb.ui.wireframe([", " (math.cos(i/36. * 2*math.pi) * r + x, ymin,", " math.sin(i/36. * 2*math.pi) * r + z)", " for i in range(36)], close=True)", "", "sb.ui.wireframe([", " (math.cos(i/36. * 2*math.pi) * r + x, ymax,", " math.sin(i/36. * 2*math.pi) * r + z)", " for i in range(36)], close=True)", "", "sb.ui.point(x, ymin, z)", "sb.ui.point(x, ymax, z)", "sb.ui.point(x+r, ymin, z, drag=(r, None, None))", "" ], "uid": 5 }, { "datums": [ { "expr": "0", "name": "xmin", "type": "float", "uid": 0 }, { "expr": "-2", "name": "ymin", "type": "float", "uid": 1 }, { "expr": "-0.35", "name": "zmin", "type": "float", "uid": 2 }, { "expr": "2.5", "name": "xmax", "type": "float", "uid": 3 }, { "expr": "-0.3", "name": "ymax", "type": "float", "uid": 4 }, { "expr": "0.35", "name": "zmax", "type": "float", "uid": 5 }, { "expr": "1", "name": "r", "type": "float", "uid": 6 }, { "expr": "\u0012fab.types.Shape('iiiiiiiiiiiiiiiiiiiiiam__f1aa-f0.35X-Xf2.15a-f-1.65Y-Yf-0.65a-f-0.35Z-Zf0.35am__f1iaa-f0X-Xf2.5a-f-1.65Y-Yf-0.65aa-f0.35X-Xf2.15a-f-2Y-Yf-0.3a-f0Z-Zf0-r++q-Xf2.15q-Yf-0.65qZf0.35-r++q-Xf0.35q-Yf-0.65qZf0.35-r++q-Xf2.15q-Yf-1.65qZf0.35-r++q-Xf0.35q-Yf-1.65qZf0.35-r++q-Xf2.15q-Yf-0.65qZf0.35-r++q-Xf0.35q-Yf-0.65qZf0.35-r++q-Xf2.15q-Yf-1.65qZf0.35-r++q-Xf0.35q-Yf-1.65qZf0.35am__f1-r+q-Xf2.15q-Yf-0.65f0.35a-f0Z-Zf0a-r+q-Yf-0.65q-Zf0f0.35a-f0.35X-Xf2.15a-r+q-Xf2.15q-Zf0f0.35a-f-1.65Y-Yf-0.65am__f1-r+q-Xf0.35q-Yf-0.65f0.35a-f0Z-Zf0a-r+q-Yf-1.65q-Zf0f0.35a-f0.35X-Xf2.15a-r+q-Xf0.35q-Zf0f0.35a-f-1.65Y-Yf-0.65am__f1-r+q-Xf2.15q-Yf-1.65f0.35a-f0Z-Zf0a-r+q-Yf-0.65q-Zf0f0.35a-f0.35X-Xf2.15a-r+q-Xf2.15q-Zf0f0.35a-f-1.65Y-Yf-0.65am__f1-r+q-Xf0.35q-Yf-1.65f0.35a-f0Z-Zf0a-r+q-Yf-1.65q-Zf0f0.35a-f0.35X-Xf2.15a-r+q-Xf0.35q-Zf0f0.35a-f-1.65Y-Yf-0.65',float('0.000000'),float('-2.000000'),float('-0.350000'),float('2.500000'),float('-0.300000'),float('0.350000'))", "name": "shape", "type": "_fabtypes.Shape", "uid": 7 } ], "inspector": [ 167.76081814629538, 163.15849152144017 ], "name": "Palm", "script": [ "# Neil Gershenfeld 1/24/15", "# Matt Keeter 5/22/15", "", "import fab", "", "title('Rounded cube (corner)')", "", "input('xmin', float)", "input('ymin', float)", "input('zmin', float)", "input('xmax', float)", "input('ymax', float)", "input('zmax', float)", "input('r', float)", "", "output('shape', fab.shapes.rounded_cube(xmin, xmax, ymin, ymax, zmin, zmax, r))", "", "# UI", "def drag_r(this, x, y, z):", " if abs(this.xmax - this.xmin) < abs(this.ymax - this.ymin):", " d = abs(this.xmax - this.xmin)", " mid = this.ymax - d / 2", " else:", " d = abs(this.ymax - this.ymin)", " mid = (this.ymin + this.ymax) / 2", " r = 1 - (y - mid) / (d/2)", " this.r = float(min(1, max(0, r)))", "", "# This is the circle's radius in actual units (not a 0-1 fraction)", "r_ = r * min([xmax - xmin, ymax - ymin, zmax - zmin]) / 2", "", "sb.ui.wireframe([(xmin, ymin, zmin), (xmax, ymin, zmin),", " (xmax, ymax, zmin), (xmin, ymax, zmin)], close=True)", "sb.ui.wireframe([(xmin, ymin, zmax), (xmax, ymin, zmax),", " (xmax, ymax, zmax), (xmin, ymax, zmax)], close=True)", "sb.ui.wireframe([(xmin, ymin, zmin), (xmin, ymax, zmin),", " (xmin, ymax, zmax), (xmin, ymin, zmax)], close=True)", "sb.ui.wireframe([(xmax, ymin, zmin), (xmax, ymax, zmin),", " (xmax, ymax, zmax), (xmax, ymin, zmax)], close=True)", "sb.ui.point(xmin, ymin, zmin)", "sb.ui.point(xmax, ymax, zmax)", "sb.ui.point(xmax, ymax - r, zmax, drag=drag_r, relative=False)", "", "", "", "" ], "uid": 6 }, { "datums": [ { "expr": "\u0011[__24.__10]", "name": "a", "type": "_fabtypes.Shape", "uid": 0 }, { "expr": "\u0011[__11.__7,__17.__7,__20.__7,__1.__10]", "name": "b", "type": "_fabtypes.Shape", "uid": 1 }, { "expr": "\u0012fab.types.Shape('im-Xf0-Yf-1.7-Zf0m-Xf0-Yf0-Zf0m+*f0.819152X*f0.573576Y+*f-0.573576X*f0.819152Y_m-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m+*f1X*f0ZY+*f-0X*f1Zm-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m_+*f0.642788Y*f-0.766044Z+*f0.766044Y*f0.642788Zm-Xf0-Yf0-Zf0ia-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1.81m-Xf0-Yf0-Zf1m-Xf0-Yf0-Zf0m+*f1X*f0Y+*f-0X*f1Y_m-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m+*f1X*f0ZY+*f-0X*f1Zm-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m_+*f1Y*f0Z+*f-0Y*f1Zm-Xf0-Yf0-Zf0a-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1iiim-Xf0-Yf-0.4-Zf0ia-r+q-Xf0.8q-Zf0f0.28a-f0Y-Yf1.6a-r+q-Xf0.8q-Zf0f0.28a-f0Y-Yf1.6m-Xf0-Yf-0.4-Zf0ia-r+q-Xf1.5q-Zf0f0.26a-f0Y-Yf1.2a-r+q-Xf1.5q-Zf0f0.26a-f0Y-Yf1.2m-Xf0-Yf-0.4-Zf0ia-r+q-Xf2.1q-Zf0f0.22a-f0Y-Yf0.7a-r+q-Xf2.1q-Zf0f0.22a-f0Y-Yf0.7m-Xf0.25-Yf-0.7-Zf0m-Xf0-Yf0-Zf0m+*f0.819152X*f0.573576Y+*f-0.573576X*f0.819152Y_m-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m+*f1X*f0ZY+*f-0X*f1Zm-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m_+*f1Y*f0Z+*f-0Y*f1Zm-Xf0-Yf0-Zf0ia-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1.81a-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1.81',float('-1.459099'),float('-2.036303'),float('-1.566520'),float('2.320000'),float('1.200000'),float('0.822769'))", "name": "shape", "type": "_fabtypes.Shape", "uid": 2 } ], "inspector": [ 177.15878552583172, 605.85599935551625 ], "name": "Fingers", "script": [ "import fab.types", "", "title('Union')", "input('a', fab.types.Shape)", "input('b', fab.types.Shape)", "", "output('shape', a | b)", "" ], "uid": 7 }, { "datums": [ { "expr": "0", "name": "x", "type": "float", "uid": 0 }, { "expr": "0", "name": "ymin", "type": "float", "uid": 1 }, { "expr": "1.81", "name": "ymax", "type": "float", "uid": 2 }, { "expr": "0.0", "name": "z", "type": "float", "uid": 3 }, { "expr": "0.28", "name": "r", "type": "float", "uid": 4 }, { "expr": "\u0012fab.types.Shape('a-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1.81',float('-0.280000'),float('0.000000'),float('-0.280000'),float('0.280000'),float('1.810000'),float('0.280000'))", "name": "shape", "type": "_fabtypes.Shape", "uid": 5 } ], "inspector": [ -716.15128735899123, 420.50295508315082 ], "name": "f1d1", "script": [ "import fab", "import math", "", "title('Cylinder (Y)')", "", "input('x', float)", "input('ymin', float)", "input('ymax', float)", "input('z', float)", "input('r', float)", "", "output('shape', fab.shapes.cylinder_y(x, ymin, ymax, z, r))", "", "# UI", "sb.ui.wireframe([(x, ymin, z), (x, ymax, z)])", "sb.ui.wireframe([(x, ymin, z), (x+r, ymin, z)])", "", "sb.ui.wireframe([", " (math.cos(i/36. * 2*math.pi) * r + x, ymin,", " math.sin(i/36. * 2*math.pi) * r + z)", " for i in range(36)], close=True)", "", "sb.ui.wireframe([", " (math.cos(i/36. * 2*math.pi) * r + x, ymax,", " math.sin(i/36. * 2*math.pi) * r + z)", " for i in range(36)], close=True)", "", "sb.ui.point(x, ymin, z)", "sb.ui.point(x, ymax, z)", "sb.ui.point(x+r, ymin, z, drag=(r, None, None))", "" ], "uid": 10 }, { "datums": [ { "expr": "-2", "name": "xmin", "type": "float", "uid": 0 }, { "expr": "-1", "name": "ymin", "type": "float", "uid": 1 }, { "expr": "0", "name": "zmin", "type": "float", "uid": 2 }, { "expr": "2", "name": "xmax", "type": "float", "uid": 3 }, { "expr": "1", "name": "ymax", "type": "float", "uid": 4 }, { "expr": "1", "name": "zmax", "type": "float", "uid": 5 }, { "expr": "0.5", "name": "r", "type": "float", "uid": 6 }, { "expr": "\u0012fab.types.Shape('iiiiiiiiiiiiiiiiiiiiiam__f1aa-f-1.75X-Xf1.75a-f-0.75Y-Yf0.75a-f0Z-Zf1am__f1iaa-f-2X-Xf2a-f-0.75Y-Yf0.75aa-f-1.75X-Xf1.75a-f-1Y-Yf1a-f0.25Z-Zf0.75-r++q-Xf1.75q-Yf0.75q-Zf0.75f0.25-r++q-Xf-1.75q-Yf0.75q-Zf0.75f0.25-r++q-Xf1.75q-Yf-0.75q-Zf0.75f0.25-r++q-Xf-1.75q-Yf-0.75q-Zf0.75f0.25-r++q-Xf1.75q-Yf0.75q-Zf0.25f0.25-r++q-Xf-1.75q-Yf0.75q-Zf0.25f0.25-r++q-Xf1.75q-Yf-0.75q-Zf0.25f0.25-r++q-Xf-1.75q-Yf-0.75q-Zf0.25f0.25am__f1-r+q-Xf1.75q-Yf0.75f0.25a-f0.25Z-Zf0.75a-r+q-Yf0.75q-Zf0.75f0.25a-f-1.75X-Xf1.75a-r+q-Xf1.75q-Zf0.75f0.25a-f-0.75Y-Yf0.75am__f1-r+q-Xf-1.75q-Yf0.75f0.25a-f0.25Z-Zf0.75a-r+q-Yf-0.75q-Zf0.75f0.25a-f-1.75X-Xf1.75a-r+q-Xf-1.75q-Zf0.75f0.25a-f-0.75Y-Yf0.75am__f1-r+q-Xf1.75q-Yf-0.75f0.25a-f0.25Z-Zf0.75a-r+q-Yf0.75q-Zf0.25f0.25a-f-1.75X-Xf1.75a-r+q-Xf1.75q-Zf0.25f0.25a-f-0.75Y-Yf0.75am__f1-r+q-Xf-1.75q-Yf-0.75f0.25a-f0.25Z-Zf0.75a-r+q-Yf-0.75q-Zf0.25f0.25a-f-1.75X-Xf1.75a-r+q-Xf-1.75q-Zf0.25f0.25a-f-0.75Y-Yf0.75',float('-2.000000'),float('-1.000000'),float('0.000000'),float('2.000000'),float('1.000000'),float('1.000000'))", "name": "shape", "type": "_fabtypes.Shape", "uid": 7 } ], "inspector": [ 170.53290317099794, -398.11722845238683 ], "name": "r4", "script": [ "# Neil Gershenfeld 1/24/15", "# Matt Keeter 5/22/15", "", "import fab", "", "title('Rounded cube (corner)')", "", "input('xmin', float)", "input('ymin', float)", "input('zmin', float)", "input('xmax', float)", "input('ymax', float)", "input('zmax', float)", "input('r', float)", "", "output('shape', fab.shapes.rounded_cube(xmin, xmax, ymin, ymax, zmin, zmax, r))", "", "# UI", "def drag_r(this, x, y, z):", " if abs(this.xmax - this.xmin) < abs(this.ymax - this.ymin):", " d = abs(this.xmax - this.xmin)", " mid = this.ymax - d / 2", " else:", " d = abs(this.ymax - this.ymin)", " mid = (this.ymin + this.ymax) / 2", " r = 1 - (y - mid) / (d/2)", " this.r = float(min(1, max(0, r)))", "", "# This is the circle's radius in actual units (not a 0-1 fraction)", "r_ = r * min([xmax - xmin, ymax - ymin, zmax - zmin]) / 2", "", "sb.ui.wireframe([(xmin, ymin, zmin), (xmax, ymin, zmin),", " (xmax, ymax, zmin), (xmin, ymax, zmin)], close=True)", "sb.ui.wireframe([(xmin, ymin, zmax), (xmax, ymin, zmax),", " (xmax, ymax, zmax), (xmin, ymax, zmax)], close=True)", "sb.ui.wireframe([(xmin, ymin, zmin), (xmin, ymax, zmin),", " (xmin, ymax, zmax), (xmin, ymin, zmax)], close=True)", "sb.ui.wireframe([(xmax, ymin, zmin), (xmax, ymax, zmin),", " (xmax, ymax, zmax), (xmax, ymin, zmax)], close=True)", "sb.ui.point(xmin, ymin, zmin)", "sb.ui.point(xmax, ymax, zmax)", "sb.ui.point(xmax, ymax - r, zmax, drag=drag_r, relative=False)", "", "", "", "" ], "uid": 12 }, { "datums": [ { "expr": "\u0011[__10.__5]", "name": "a", "type": "_fabtypes.Shape", "uid": 0 }, { "expr": "\u0011[__10.__5]", "name": "b", "type": "_fabtypes.Shape", "uid": 1 }, { "expr": "\u0012fab.types.Shape('ia-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1.81a-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1.81',float('-0.280000'),float('0.000000'),float('-0.280000'),float('0.280000'),float('1.810000'),float('0.280000'))", "name": "shape", "type": "_fabtypes.Shape", "uid": 2 } ], "inspector": [ -424.94063603311741, 370.40484096315413 ], "name": "f1", "script": [ "import fab.types", "", "title('Union')", "input('a', fab.types.Shape)", "input('b', fab.types.Shape)", "", "output('shape', a | b)", "" ], "uid": 0 }, { "datums": [ { "expr": "-1.3", "name": "dx", "type": "float", "uid": 1 }, { "expr": "0.0", "name": "dy", "type": "float", "uid": 8 }, { "expr": "1.35", "name": "dz", "type": "float", "uid": 9 }, { "expr": "0.0", "name": "x", "type": "float", "uid": 2 }, { "expr": "0.0", "name": "y", "type": "float", "uid": 3 }, { "expr": "0.0", "name": "_z", "type": "float", "uid": 4 }, { "expr": "35", "name": "a", "type": "float", "uid": 5 }, { "expr": "True", "name": "rotateFirst", "type": "bool", "uid": 10 }, { "expr": "\u0011[__3.__2]", "name": "shape", "type": "_fabtypes.Shape", "uid": 6 }, { "expr": "\u0012fab.types.Shape('m-Xf-1.3-Yf0-Zf1.35m-Xf0-Yf0-Zf0m+*f0.819152X*f0.573576Y+*f-0.573576X*f0.819152Y_m-Xf-0-Yf-0-Zf0iiiiiiiiiiiiiiiiiiiiiiam__f1aa-f0.35X-Xf2.15a-f-1.65Y-Yf-0.65a-f-0.35Z-Zf0.35am__f1iaa-f0X-Xf2.5a-f-1.65Y-Yf-0.65aa-f0.35X-Xf2.15a-f-2Y-Yf-0.3a-f0Z-Zf0-r++q-Xf2.15q-Yf-0.65qZf0.35-r++q-Xf0.35q-Yf-0.65qZf0.35-r++q-Xf2.15q-Yf-1.65qZf0.35-r++q-Xf0.35q-Yf-1.65qZf0.35-r++q-Xf2.15q-Yf-0.65qZf0.35-r++q-Xf0.35q-Yf-0.65qZf0.35-r++q-Xf2.15q-Yf-1.65qZf0.35-r++q-Xf0.35q-Yf-1.65qZf0.35am__f1-r+q-Xf2.15q-Yf-0.65f0.35a-f0Z-Zf0a-r+q-Yf-0.65q-Zf0f0.35a-f0.35X-Xf2.15a-r+q-Xf2.15q-Zf0f0.35a-f-1.65Y-Yf-0.65am__f1-r+q-Xf0.35q-Yf-0.65f0.35a-f0Z-Zf0a-r+q-Yf-1.65q-Zf0f0.35a-f0.35X-Xf2.15a-r+q-Xf0.35q-Zf0f0.35a-f-1.65Y-Yf-0.65am__f1-r+q-Xf2.15q-Yf-1.65f0.35a-f0Z-Zf0a-r+q-Yf-0.65q-Zf0f0.35a-f0.35X-Xf2.15a-r+q-Xf2.15q-Zf0f0.35a-f-1.65Y-Yf-0.65am__f1-r+q-Xf0.35q-Yf-1.65f0.35a-f0Z-Zf0a-r+q-Yf-1.65q-Zf0f0.35a-f0.35X-Xf2.15a-r+q-Xf0.35q-Zf0f0.35a-f-1.65Y-Yf-0.65iim-Xf0-Yf-1.7-Zf0m-Xf0-Yf0-Zf0m+*f0.819152X*f0.573576Y+*f-0.573576X*f0.819152Y_m-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m+*f1X*f0ZY+*f-0X*f1Zm-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m_+*f0.642788Y*f-0.766044Z+*f0.766044Y*f0.642788Zm-Xf0-Yf0-Zf0ia-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1.81m-Xf0-Yf0-Zf1m-Xf0-Yf0-Zf0m+*f1X*f0Y+*f-0X*f1Y_m-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m+*f1X*f0ZY+*f-0X*f1Zm-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m_+*f1Y*f0Z+*f-0Y*f1Zm-Xf0-Yf0-Zf0a-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1iiim-Xf0-Yf-0.4-Zf0ia-r+q-Xf0.8q-Zf0f0.28a-f0Y-Yf1.6a-r+q-Xf0.8q-Zf0f0.28a-f0Y-Yf1.6m-Xf0-Yf-0.4-Zf0ia-r+q-Xf1.5q-Zf0f0.26a-f0Y-Yf1.2a-r+q-Xf1.5q-Zf0f0.26a-f0Y-Yf1.2m-Xf0-Yf-0.4-Zf0ia-r+q-Xf2.1q-Zf0f0.22a-f0Y-Yf0.7a-r+q-Xf2.1q-Zf0f0.22a-f0Y-Yf0.7m-Xf0.25-Yf-0.7-Zf0m-Xf0-Yf0-Zf0m+*f0.819152X*f0.573576Y+*f-0.573576X*f0.819152Y_m-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m+*f1X*f0ZY+*f-0X*f1Zm-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m_+*f1Y*f0Z+*f-0Y*f1Zm-Xf0-Yf0-Zf0ia-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1.81a-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1.81m-Xf0-Yf0-Zf0m+*f0.819152X*f0.573576Y+*f-0.573576X*f0.819152Y_m-Xf-0-Yf-0-Zf0m-Xf0-Yf-1-Zf0m_+*f0.984808Y*f-0.173648Z+*f0.173648Y*f0.984808Zm-Xf0-Yf1-Zf-0iiiiiiiiiiiiiiiiiiiiiam__f1aa-f-0.255X-Xf0.755a-f-4.755Y-Yf-2.245a-f-0.35Z-Zf0.35am__f1iaa-f-0.5X-Xf1a-f-4.755Y-Yf-2.245aa-f-0.255X-Xf0.755a-f-5Y-Yf-2a-f-0.105Z-Zf0.105-r++q-Xf0.755q-Yf-2.245q-Zf0.105f0.245-r++q-Xf-0.255q-Yf-2.245q-Zf0.105f0.245-r++q-Xf0.755q-Yf-4.755q-Zf0.105f0.245-r++q-Xf-0.255q-Yf-4.755q-Zf0.105f0.245-r++q-Xf0.755q-Yf-2.245q-Zf-0.105f0.245-r++q-Xf-0.255q-Yf-2.245q-Zf-0.105f0.245-r++q-Xf0.755q-Yf-4.755q-Zf-0.105f0.245-r++q-Xf-0.255q-Yf-4.755q-Zf-0.105f0.245am__f1-r+q-Xf0.755q-Yf-2.245f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-2.245q-Zf0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf0.755q-Zf0.105f0.245a-f-4.755Y-Yf-2.245am__f1-r+q-Xf-0.255q-Yf-2.245f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-4.755q-Zf0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf-0.255q-Zf0.105f0.245a-f-4.755Y-Yf-2.245am__f1-r+q-Xf0.755q-Yf-4.755f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-2.245q-Zf-0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf0.755q-Zf-0.105f0.245a-f-4.755Y-Yf-2.245am__f1-r+q-Xf-0.255q-Yf-4.755f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-4.755q-Zf-0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf-0.255q-Zf-0.105f0.245a-f-4.755Y-Yf-2.245',float('-3.183515'),float('-4.426883'),float('-0.216520'),float('4.233972'),float('3.097778'),float('2.389275'))", "name": "T+R shape", "type": "_fabtypes.Shape", "uid": 7 } ], "inspector": [ 474.98319235522183, 513.58571552116973 ], "name": "s0", "script": [ "import fab", "import math", "", "title('Trans + Rotate (Z)')", "", "input('dx', float)", "input('dy', float)", "input('dz', float)", "input('x', float)", "input('y', float)", "input('_z', float)", "input('a', float)", "input('rotateFirst', bool)", "input('shape', fab.types.Shape)", "", "if rotateFirst:", " outShape = fab.shapes.translate(fab.shapes.rotate_z(shape, a, x, y), dx, dy, dz)", "else:", " outShape = fab.shapes.rotate_z(fab.shapes.translate(shape, dx, dy, dz), a, x, y)", "", "output('T+R shape', outShape)", "", "# UI", "rad = math.radians(a)", "sb.ui.wireframe([(x + math.cos(rad), y + math.sin(rad), _z),", " (x, y, _z),", " (x + 1, y, _z)], color=sb.color.teal)", "", "# Draw a semi-circular arc showing the rotation", "if int(a) % 360 != 0:", " sb.ui.wireframe([", " (x + math.cos(math.radians(a_)) * 0.3,", " y + math.sin(math.radians(a_)) * 0.3, _z)", " for a_ in range(int(a) % 360)], color=sb.color.teal)", "", "sb.ui.point(x, y, _z, color=sb.color.teal)", "", "def drag_pt(this, x, y, z):", " this.a = math.degrees(math.atan2(y - this.y, x - this.x))", "sb.ui.point(x + math.cos(rad), y + math.sin(rad), _z,", " color=sb.color.teal, drag=drag_pt, relative=False)", "", "" ], "uid": 14 }, { "datums": [ { "expr": "-0.5", "name": "xmin", "type": "float", "uid": 0 }, { "expr": "-5", "name": "ymin", "type": "float", "uid": 1 }, { "expr": "-0.35", "name": "zmin", "type": "float", "uid": 2 }, { "expr": "1", "name": "xmax", "type": "float", "uid": 3 }, { "expr": "-2", "name": "ymax", "type": "float", "uid": 4 }, { "expr": "0.35", "name": "zmax", "type": "float", "uid": 5 }, { "expr": "0.7", "name": "r", "type": "float", "uid": 6 }, { "expr": "\u0012fab.types.Shape('iiiiiiiiiiiiiiiiiiiiiam__f1aa-f-0.255X-Xf0.755a-f-4.755Y-Yf-2.245a-f-0.35Z-Zf0.35am__f1iaa-f-0.5X-Xf1a-f-4.755Y-Yf-2.245aa-f-0.255X-Xf0.755a-f-5Y-Yf-2a-f-0.105Z-Zf0.105-r++q-Xf0.755q-Yf-2.245q-Zf0.105f0.245-r++q-Xf-0.255q-Yf-2.245q-Zf0.105f0.245-r++q-Xf0.755q-Yf-4.755q-Zf0.105f0.245-r++q-Xf-0.255q-Yf-4.755q-Zf0.105f0.245-r++q-Xf0.755q-Yf-2.245q-Zf-0.105f0.245-r++q-Xf-0.255q-Yf-2.245q-Zf-0.105f0.245-r++q-Xf0.755q-Yf-4.755q-Zf-0.105f0.245-r++q-Xf-0.255q-Yf-4.755q-Zf-0.105f0.245am__f1-r+q-Xf0.755q-Yf-2.245f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-2.245q-Zf0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf0.755q-Zf0.105f0.245a-f-4.755Y-Yf-2.245am__f1-r+q-Xf-0.255q-Yf-2.245f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-4.755q-Zf0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf-0.255q-Zf0.105f0.245a-f-4.755Y-Yf-2.245am__f1-r+q-Xf0.755q-Yf-4.755f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-2.245q-Zf-0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf0.755q-Zf-0.105f0.245a-f-4.755Y-Yf-2.245am__f1-r+q-Xf-0.255q-Yf-4.755f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-4.755q-Zf-0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf-0.255q-Zf-0.105f0.245a-f-4.755Y-Yf-2.245',float('-0.500000'),float('-5.000000'),float('-0.350000'),float('1.000000'),float('-2.000000'),float('0.350000'))", "name": "shape", "type": "_fabtypes.Shape", "uid": 7 } ], "inspector": [ 167.70093118287741, -119.71461227302362 ], "name": "r0", "script": [ "# Neil Gershenfeld 1/24/15", "# Matt Keeter 5/22/15", "", "import fab", "", "title('Rounded cube (corner)')", "", "input('xmin', float)", "input('ymin', float)", "input('zmin', float)", "input('xmax', float)", "input('ymax', float)", "input('zmax', float)", "input('r', float)", "", "output('shape', fab.shapes.rounded_cube(xmin, xmax, ymin, ymax, zmin, zmax, r))", "", "# UI", "def drag_r(this, x, y, z):", " if abs(this.xmax - this.xmin) < abs(this.ymax - this.ymin):", " d = abs(this.xmax - this.xmin)", " mid = this.ymax - d / 2", " else:", " d = abs(this.ymax - this.ymin)", " mid = (this.ymin + this.ymax) / 2", " r = 1 - (y - mid) / (d/2)", " this.r = float(min(1, max(0, r)))", "", "# This is the circle's radius in actual units (not a 0-1 fraction)", "r_ = r * min([xmax - xmin, ymax - ymin, zmax - zmin]) / 2", "", "sb.ui.wireframe([(xmin, ymin, zmin), (xmax, ymin, zmin),", " (xmax, ymax, zmin), (xmin, ymax, zmin)], close=True)", "sb.ui.wireframe([(xmin, ymin, zmax), (xmax, ymin, zmax),", " (xmax, ymax, zmax), (xmin, ymax, zmax)], close=True)", "sb.ui.wireframe([(xmin, ymin, zmin), (xmin, ymax, zmin),", " (xmin, ymax, zmax), (xmin, ymin, zmax)], close=True)", "sb.ui.wireframe([(xmax, ymin, zmin), (xmax, ymax, zmin),", " (xmax, ymax, zmax), (xmax, ymin, zmax)], close=True)", "sb.ui.point(xmin, ymin, zmin)", "sb.ui.point(xmax, ymax, zmax)", "sb.ui.point(xmax, ymax - r, zmax, drag=drag_r, relative=False)", "", "", "", "" ], "uid": 2 }, { "datums": [ { "expr": "0.0", "name": "x", "type": "float", "uid": 0 }, { "expr": "0.0", "name": "y", "type": "float", "uid": 1 }, { "expr": "0.0", "name": "_z", "type": "float", "uid": 2 }, { "expr": "35", "name": "a", "type": "float", "uid": 3 }, { "expr": "\u0011[__9.__5]", "name": "shape", "type": "_fabtypes.Shape", "uid": 4 }, { "expr": "\u0012fab.types.Shape('m-Xf0-Yf0-Zf0m+*f0.819152X*f0.573576Y+*f-0.573576X*f0.819152Y_m-Xf-0-Yf-0-Zf0m-Xf0-Yf-1-Zf0m_+*f0.984808Y*f-0.173648Z+*f0.173648Y*f0.984808Zm-Xf0-Yf1-Zf-0iiiiiiiiiiiiiiiiiiiiiam__f1aa-f-0.255X-Xf0.755a-f-4.755Y-Yf-2.245a-f-0.35Z-Zf0.35am__f1iaa-f-0.5X-Xf1a-f-4.755Y-Yf-2.245aa-f-0.255X-Xf0.755a-f-5Y-Yf-2a-f-0.105Z-Zf0.105-r++q-Xf0.755q-Yf-2.245q-Zf0.105f0.245-r++q-Xf-0.255q-Yf-2.245q-Zf0.105f0.245-r++q-Xf0.755q-Yf-4.755q-Zf0.105f0.245-r++q-Xf-0.255q-Yf-4.755q-Zf0.105f0.245-r++q-Xf0.755q-Yf-2.245q-Zf-0.105f0.245-r++q-Xf-0.255q-Yf-2.245q-Zf-0.105f0.245-r++q-Xf0.755q-Yf-4.755q-Zf-0.105f0.245-r++q-Xf-0.255q-Yf-4.755q-Zf-0.105f0.245am__f1-r+q-Xf0.755q-Yf-2.245f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-2.245q-Zf0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf0.755q-Zf0.105f0.245a-f-4.755Y-Yf-2.245am__f1-r+q-Xf-0.255q-Yf-2.245f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-4.755q-Zf0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf-0.255q-Zf0.105f0.245a-f-4.755Y-Yf-2.245am__f1-r+q-Xf0.755q-Yf-4.755f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-2.245q-Zf-0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf0.755q-Zf-0.105f0.245a-f-4.755Y-Yf-2.245am__f1-r+q-Xf-0.255q-Yf-4.755f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-4.755q-Zf-0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf-0.255q-Zf-0.105f0.245a-f-4.755Y-Yf-2.245',float('0.694002'),float('-4.382555'),float('-0.171035'),float('3.687037'),float('-1.002498'),float('1.039275'))", "name": "rotated", "type": "_fabtypes.Shape", "uid": 5 } ], "inspector": [ 498.9249987159584, 87.021802101620665 ], "name": "r1", "script": [ "import fab", "import math", "", "title('Rotate (Z)')", "", "input('x', float)", "input('y', float)", "input('_z', float)", "input('a', float)", "", "input('shape', fab.types.Shape)", "output('rotated', fab.shapes.rotate_z(shape, a, x, y))", "", "# UI", "rad = math.radians(a)", "sb.ui.wireframe([(x + math.cos(rad), y + math.sin(rad), _z),", " (x, y, _z),", " (x + 1, y, _z)], color=sb.color.teal)", "", "# Draw a semi-circular arc showing the rotation", "if int(a) % 360 != 0:", " sb.ui.wireframe([", " (x + math.cos(math.radians(a_)) * 0.3,", " y + math.sin(math.radians(a_)) * 0.3, _z)", " for a_ in range(int(a) % 360)], color=sb.color.teal)", "", "sb.ui.point(x, y, _z, color=sb.color.teal)", "", "def drag_pt(this, x, y, z):", " this.a = math.degrees(math.atan2(y - this.y, x - this.x))", "sb.ui.point(x + math.cos(rad), y + math.sin(rad), _z,", " color=sb.color.teal, drag=drag_pt, relative=False)", "", "" ], "uid": 4 }, { "datums": [ { "expr": "0.0", "name": "_x", "type": "float", "uid": 0 }, { "expr": "-1.0", "name": "y", "type": "float", "uid": 1 }, { "expr": "0", "name": "z", "type": "float", "uid": 2 }, { "expr": "-10", "name": "a", "type": "float", "uid": 3 }, { "expr": "\u0011[__2.__7]", "name": "shape", "type": "_fabtypes.Shape", "uid": 4 }, { "expr": "\u0012fab.types.Shape('m-Xf0-Yf-1-Zf0m_+*f0.984808Y*f-0.173648Z+*f0.173648Y*f0.984808Zm-Xf0-Yf1-Zf-0iiiiiiiiiiiiiiiiiiiiiam__f1aa-f-0.255X-Xf0.755a-f-4.755Y-Yf-2.245a-f-0.35Z-Zf0.35am__f1iaa-f-0.5X-Xf1a-f-4.755Y-Yf-2.245aa-f-0.255X-Xf0.755a-f-5Y-Yf-2a-f-0.105Z-Zf0.105-r++q-Xf0.755q-Yf-2.245q-Zf0.105f0.245-r++q-Xf-0.255q-Yf-2.245q-Zf0.105f0.245-r++q-Xf0.755q-Yf-4.755q-Zf0.105f0.245-r++q-Xf-0.255q-Yf-4.755q-Zf0.105f0.245-r++q-Xf0.755q-Yf-2.245q-Zf-0.105f0.245-r++q-Xf-0.255q-Yf-2.245q-Zf-0.105f0.245-r++q-Xf0.755q-Yf-4.755q-Zf-0.105f0.245-r++q-Xf-0.255q-Yf-4.755q-Zf-0.105f0.245am__f1-r+q-Xf0.755q-Yf-2.245f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-2.245q-Zf0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf0.755q-Zf0.105f0.245a-f-4.755Y-Yf-2.245am__f1-r+q-Xf-0.255q-Yf-2.245f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-4.755q-Zf0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf-0.255q-Zf0.105f0.245a-f-4.755Y-Yf-2.245am__f1-r+q-Xf0.755q-Yf-4.755f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-2.245q-Zf-0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf0.755q-Zf-0.105f0.245a-f-4.755Y-Yf-2.245am__f1-r+q-Xf-0.255q-Yf-4.755f0.245a-f-0.105Z-Zf0.105a-r+q-Yf-4.755q-Zf-0.105f0.245a-f-0.255X-Xf0.755a-r+q-Xf-0.255q-Zf-0.105f0.245a-f-4.755Y-Yf-2.245',float('-0.500000'),float('-5.000009'),float('-0.171035'),float('1.000000'),float('-1.924031'),float('1.039275'))", "name": "rotated", "type": "_fabtypes.Shape", "uid": 5 } ], "inspector": [ 494.57390861087742, -194.34869136028613 ], "name": "r2", "script": [ "import fab", "import math", "", "title('Rotate (X)')", "", "input('_x', float)", "input('y', float)", "input('z', float)", "input('a', float)", "", "input('shape', fab.types.Shape)", "output('rotated', fab.shapes.rotate_x(shape, a, y, z))", "", "# UI", "rad = math.radians(a)", "sb.ui.wireframe([(_x, y + math.cos(rad), z + math.sin(rad)),", " (_x, y, z),", " (_x, y + 1, z)], color=sb.color.teal)", "", "# Draw a semi-circular arc showing the rotation", "if int(a) % 360 != 0:", " sb.ui.wireframe([", " (_x, y + math.cos(math.radians(a_)) * 0.3,", " z + math.sin(math.radians(a_)) * 0.3)", " for a_ in range(int(a) % 360)], color=sb.color.teal)", "", "sb.ui.point(_x, y, z, color=sb.color.teal)", "", "def drag_pt(this, x, y, z):", " this.a = math.degrees(math.atan2(z - this.z, y - this.y))", "sb.ui.point(_x, y + math.cos(rad), z + math.sin(rad),", " color=sb.color.teal, drag=drag_pt, relative=False)", "", "" ], "uid": 9 }, { "datums": [ { "expr": "0.0", "name": "_x", "type": "float", "uid": 0 }, { "expr": "0.0", "name": "_y", "type": "float", "uid": 1 }, { "expr": "0.0", "name": "_z", "type": "float", "uid": 2 }, { "expr": "0", "name": "dx", "type": "float", "uid": 3 }, { "expr": "-0.4", "name": "dy", "type": "float", "uid": 4 }, { "expr": "0", "name": "dz", "type": "float", "uid": 5 }, { "expr": "\u0011[__15.__2]", "name": "shape", "type": "_fabtypes.Shape", "uid": 6 }, { "expr": "\u0012fab.types.Shape('m-Xf0-Yf-0.4-Zf0ia-r+q-Xf0.8q-Zf0f0.28a-f0Y-Yf1.6a-r+q-Xf0.8q-Zf0f0.28a-f0Y-Yf1.6',float('0.520000'),float('-0.400000'),float('-0.280000'),float('1.080000'),float('1.200000'),float('0.280000'))", "name": "out", "type": "_fabtypes.Shape", "uid": 7 } ], "inspector": [ -423.43642671290422, 1028.6322886756343 ], "name": "t0", "script": [ "import fab", "", "title('Translate')", "", "input('_x', float)", "input('_y', float)", "input('_z', float)", "input('dx', float)", "input('dy', float)", "input('dz', float)", "", "input('shape', fab.types.Shape)", "output('out', fab.shapes.translate(shape, dx, dy, dz))", "", "# UI", "sb.ui.wireframe([(_x, _y, _z),", " (_x + dx, _y + dy, _z + dz)], color=sb.color.teal)", "sb.ui.wireframe([(_x, _y - 0.3, _z),", " (_x, _y + 0.3, _z)], color=sb.color.teal)", "sb.ui.wireframe([(_x - 0.3, _y, _z),", " (_x + 0.3, _y, _z)], color=sb.color.teal)", "sb.ui.wireframe([(_x, _y, _z - 0.3),", " (_x, _y, _z + 0.3)], color=sb.color.teal)", "", "sb.ui.point(_x, _y, _z, color=sb.color.teal)", "sb.ui.point(_x + dx, _y + dy, _z + dz, color=sb.color.teal, drag=(dx, dy, dz))", "" ], "uid": 11 }, { "datums": [ { "expr": "\u0011[__5.__5]", "name": "a", "type": "_fabtypes.Shape", "uid": 0 }, { "expr": "\u0011[__5.__5]", "name": "b", "type": "_fabtypes.Shape", "uid": 1 }, { "expr": "\u0012fab.types.Shape('ia-r+q-Xf0.8q-Zf0f0.28a-f0Y-Yf1.6a-r+q-Xf0.8q-Zf0f0.28a-f0Y-Yf1.6',float('0.520000'),float('0.000000'),float('-0.280000'),float('1.080000'),float('1.600000'),float('0.280000'))", "name": "shape", "type": "_fabtypes.Shape", "uid": 2 } ], "inspector": [ -420.28180572183874, 880.3378614840002 ], "name": "f2", "script": [ "import fab.types", "", "title('Union')", "input('a', fab.types.Shape)", "input('b', fab.types.Shape)", "", "output('shape', a | b)", "" ], "uid": 15 }, { "datums": [ { "expr": "\u0011[__18.__5]", "name": "a", "type": "_fabtypes.Shape", "uid": 0 }, { "expr": "\u0011[__18.__5]", "name": "b", "type": "_fabtypes.Shape", "uid": 1 }, { "expr": "\u0012fab.types.Shape('ia-r+q-Xf1.5q-Zf0f0.26a-f0Y-Yf1.2a-r+q-Xf1.5q-Zf0f0.26a-f0Y-Yf1.2',float('1.240000'),float('0.000000'),float('-0.260000'),float('1.760000'),float('1.200000'),float('0.260000'))", "name": "shape", "type": "_fabtypes.Shape", "uid": 2 } ], "inspector": [ -425.30123301829292, 1304.3462893904957 ], "name": "f3", "script": [ "import fab.types", "", "title('Union')", "input('a', fab.types.Shape)", "input('b', fab.types.Shape)", "", "output('shape', a | b)", "" ], "uid": 16 }, { "datums": [ { "expr": "0.0", "name": "_x", "type": "float", "uid": 0 }, { "expr": "0.0", "name": "_y", "type": "float", "uid": 1 }, { "expr": "0.0", "name": "_z", "type": "float", "uid": 2 }, { "expr": "0", "name": "dx", "type": "float", "uid": 3 }, { "expr": "\u0011[__11.__4]", "name": "dy", "type": "float", "uid": 4 }, { "expr": "0", "name": "dz", "type": "float", "uid": 5 }, { "expr": "\u0011[__16.__2]", "name": "shape", "type": "_fabtypes.Shape", "uid": 6 }, { "expr": "\u0012fab.types.Shape('m-Xf0-Yf-0.4-Zf0ia-r+q-Xf1.5q-Zf0f0.26a-f0Y-Yf1.2a-r+q-Xf1.5q-Zf0f0.26a-f0Y-Yf1.2',float('1.240000'),float('-0.400000'),float('-0.260000'),float('1.760000'),float('0.800000'),float('0.260000'))", "name": "out", "type": "_fabtypes.Shape", "uid": 7 } ], "inspector": [ -420.68824355470599, 1462.3502296504453 ], "name": "t1", "script": [ "import fab", "", "title('Translate')", "", "input('_x', float)", "input('_y', float)", "input('_z', float)", "input('dx', float)", "input('dy', float)", "input('dz', float)", "", "input('shape', fab.types.Shape)", "output('out', fab.shapes.translate(shape, dx, dy, dz))", "", "# UI", "sb.ui.wireframe([(_x, _y, _z),", " (_x + dx, _y + dy, _z + dz)], color=sb.color.teal)", "sb.ui.wireframe([(_x, _y - 0.3, _z),", " (_x, _y + 0.3, _z)], color=sb.color.teal)", "sb.ui.wireframe([(_x - 0.3, _y, _z),", " (_x + 0.3, _y, _z)], color=sb.color.teal)", "sb.ui.wireframe([(_x, _y, _z - 0.3),", " (_x, _y, _z + 0.3)], color=sb.color.teal)", "", "sb.ui.point(_x, _y, _z, color=sb.color.teal)", "sb.ui.point(_x + dx, _y + dy, _z + dz, color=sb.color.teal, drag=(dx, dy, dz))", "" ], "uid": 17 }, { "datums": [ { "expr": "1.5", "name": "x", "type": "float", "uid": 0 }, { "expr": "0", "name": "ymin", "type": "float", "uid": 1 }, { "expr": "1.2", "name": "ymax", "type": "float", "uid": 2 }, { "expr": "0.0", "name": "z", "type": "float", "uid": 3 }, { "expr": "0.26", "name": "r", "type": "float", "uid": 4 }, { "expr": "\u0012fab.types.Shape('a-r+q-Xf1.5q-Zf0f0.26a-f0Y-Yf1.2',float('1.240000'),float('0.000000'),float('-0.260000'),float('1.760000'),float('1.200000'),float('0.260000'))", "name": "shape", "type": "_fabtypes.Shape", "uid": 5 } ], "inspector": [ -712.4379399205792, 1375.2684540826881 ], "name": "f3d1", "script": [ "import fab", "import math", "", "title('Cylinder (Y)')", "", "input('x', float)", "input('ymin', float)", "input('ymax', float)", "input('z', float)", "input('r', float)", "", "output('shape', fab.shapes.cylinder_y(x, ymin, ymax, z, r))", "", "# UI", "sb.ui.wireframe([(x, ymin, z), (x, ymax, z)])", "sb.ui.wireframe([(x, ymin, z), (x+r, ymin, z)])", "", "sb.ui.wireframe([", " (math.cos(i/36. * 2*math.pi) * r + x, ymin,", " math.sin(i/36. * 2*math.pi) * r + z)", " for i in range(36)], close=True)", "", "sb.ui.wireframe([", " (math.cos(i/36. * 2*math.pi) * r + x, ymax,", " math.sin(i/36. * 2*math.pi) * r + z)", " for i in range(36)], close=True)", "", "sb.ui.point(x, ymin, z)", "sb.ui.point(x, ymax, z)", "sb.ui.point(x+r, ymin, z, drag=(r, None, None))", "" ], "uid": 18 }, { "datums": [ { "expr": "\u0011[__21.__5]", "name": "a", "type": "_fabtypes.Shape", "uid": 0 }, { "expr": "\u0011[__21.__5]", "name": "b", "type": "_fabtypes.Shape", "uid": 1 }, { "expr": "\u0012fab.types.Shape('ia-r+q-Xf2.1q-Zf0f0.22a-f0Y-Yf0.7a-r+q-Xf2.1q-Zf0f0.22a-f0Y-Yf0.7',float('1.880000'),float('0.000000'),float('-0.220000'),float('2.320000'),float('0.700000'),float('0.220000'))", "name": "shape", "type": "_fabtypes.Shape", "uid": 2 } ], "inspector": [ -419.47552517730367, 1740.7714876405348 ], "name": "f4", "script": [ "import fab.types", "", "title('Union')", "input('a', fab.types.Shape)", "input('b', fab.types.Shape)", "", "output('shape', a | b)", "" ], "uid": 19 }, { "datums": [ { "expr": "0.0", "name": "_x", "type": "float", "uid": 0 }, { "expr": "0.0", "name": "_y", "type": "float", "uid": 1 }, { "expr": "0.0", "name": "_z", "type": "float", "uid": 2 }, { "expr": "0", "name": "dx", "type": "float", "uid": 3 }, { "expr": "\u0011[__11.__4]", "name": "dy", "type": "float", "uid": 4 }, { "expr": "0", "name": "dz", "type": "float", "uid": 5 }, { "expr": "\u0011[__19.__2]", "name": "shape", "type": "_fabtypes.Shape", "uid": 6 }, { "expr": "\u0012fab.types.Shape('m-Xf0-Yf-0.4-Zf0ia-r+q-Xf2.1q-Zf0f0.22a-f0Y-Yf0.7a-r+q-Xf2.1q-Zf0f0.22a-f0Y-Yf0.7',float('1.880000'),float('-0.400000'),float('-0.220000'),float('2.320000'),float('0.300000'),float('0.220000'))", "name": "out", "type": "_fabtypes.Shape", "uid": 7 } ], "inspector": [ -418.74634094104283, 1892.9497200594956 ], "name": "t2", "script": [ "import fab", "", "title('Translate')", "", "input('_x', float)", "input('_y', float)", "input('_z', float)", "input('dx', float)", "input('dy', float)", "input('dz', float)", "", "input('shape', fab.types.Shape)", "output('out', fab.shapes.translate(shape, dx, dy, dz))", "", "# UI", "sb.ui.wireframe([(_x, _y, _z),", " (_x + dx, _y + dy, _z + dz)], color=sb.color.teal)", "sb.ui.wireframe([(_x, _y - 0.3, _z),", " (_x, _y + 0.3, _z)], color=sb.color.teal)", "sb.ui.wireframe([(_x - 0.3, _y, _z),", " (_x + 0.3, _y, _z)], color=sb.color.teal)", "sb.ui.wireframe([(_x, _y, _z - 0.3),", " (_x, _y, _z + 0.3)], color=sb.color.teal)", "", "sb.ui.point(_x, _y, _z, color=sb.color.teal)", "sb.ui.point(_x + dx, _y + dy, _z + dz, color=sb.color.teal, drag=(dx, dy, dz))", "" ], "uid": 20 }, { "datums": [ { "expr": "2.1", "name": "x", "type": "float", "uid": 0 }, { "expr": "0", "name": "ymin", "type": "float", "uid": 1 }, { "expr": "0.7", "name": "ymax", "type": "float", "uid": 2 }, { "expr": "0.0", "name": "z", "type": "float", "uid": 3 }, { "expr": "0.22", "name": "r", "type": "float", "uid": 4 }, { "expr": "\u0012fab.types.Shape('a-r+q-Xf2.1q-Zf0f0.22a-f0Y-Yf0.7',float('1.880000'),float('0.000000'),float('-0.220000'),float('2.320000'),float('0.700000'),float('0.220000'))", "name": "shape", "type": "_fabtypes.Shape", "uid": 5 } ], "inspector": [ -714.37984253424258, 1805.8679444917379 ], "name": "f4d1", "script": [ "import fab", "import math", "", "title('Cylinder (Y)')", "", "input('x', float)", "input('ymin', float)", "input('ymax', float)", "input('z', float)", "input('r', float)", "", "output('shape', fab.shapes.cylinder_y(x, ymin, ymax, z, r))", "", "# UI", "sb.ui.wireframe([(x, ymin, z), (x, ymax, z)])", "sb.ui.wireframe([(x, ymin, z), (x+r, ymin, z)])", "", "sb.ui.wireframe([", " (math.cos(i/36. * 2*math.pi) * r + x, ymin,", " math.sin(i/36. * 2*math.pi) * r + z)", " for i in range(36)], close=True)", "", "sb.ui.wireframe([", " (math.cos(i/36. * 2*math.pi) * r + x, ymax,", " math.sin(i/36. * 2*math.pi) * r + z)", " for i in range(36)], close=True)", "", "sb.ui.point(x, ymin, z)", "sb.ui.point(x, ymax, z)", "sb.ui.point(x+r, ymin, z, drag=(r, None, None))", "" ], "uid": 21 }, { "datums": [ { "expr": "\u0011[__22.__5]", "name": "a", "type": "_fabtypes.Shape", "uid": 0 }, { "expr": "\u0011[__23.__10]", "name": "b", "type": "_fabtypes.Shape", "uid": 1 }, { "expr": "\u0012fab.types.Shape('ia-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1.81m-Xf0-Yf0-Zf1m-Xf0-Yf0-Zf0m+*f1X*f0Y+*f-0X*f1Y_m-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m+*f1X*f0ZY+*f-0X*f1Zm-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m_+*f1Y*f0Z+*f-0Y*f1Zm-Xf0-Yf0-Zf0a-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1',float('-0.280000'),float('0.000000'),float('-0.280000'),float('0.280000'),float('1.810000'),float('1.280000'))", "name": "shape", "type": "_fabtypes.Shape", "uid": 2 } ], "inspector": [ -405.07893407177664, -390.59366410543089 ], "name": "thumb", "script": [ "import fab.types", "", "title('Union')", "input('a', fab.types.Shape)", "input('b', fab.types.Shape)", "", "output('shape', a | b)", "" ], "uid": 8 }, { "datums": [ { "expr": "0", "name": "x", "type": "float", "uid": 0 }, { "expr": "0", "name": "ymin", "type": "float", "uid": 1 }, { "expr": "1.81", "name": "ymax", "type": "float", "uid": 2 }, { "expr": "0.0", "name": "z", "type": "float", "uid": 3 }, { "expr": "0.28", "name": "r", "type": "float", "uid": 4 }, { "expr": "\u0012fab.types.Shape('a-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1.81',float('-0.280000'),float('0.000000'),float('-0.280000'),float('0.280000'),float('1.810000'),float('0.280000'))", "name": "shape", "type": "_fabtypes.Shape", "uid": 5 } ], "inspector": [ -703.5049218096691, -348.66477002201037 ], "name": "f0d1", "script": [ "import fab", "import math", "", "title('Cylinder (Y)')", "", "input('x', float)", "input('ymin', float)", "input('ymax', float)", "input('z', float)", "input('r', float)", "", "output('shape', fab.shapes.cylinder_y(x, ymin, ymax, z, r))", "", "# UI", "sb.ui.wireframe([(x, ymin, z), (x, ymax, z)])", "sb.ui.wireframe([(x, ymin, z), (x+r, ymin, z)])", "", "sb.ui.wireframe([", " (math.cos(i/36. * 2*math.pi) * r + x, ymin,", " math.sin(i/36. * 2*math.pi) * r + z)", " for i in range(36)], close=True)", "", "sb.ui.wireframe([", " (math.cos(i/36. * 2*math.pi) * r + x, ymax,", " math.sin(i/36. * 2*math.pi) * r + z)", " for i in range(36)], close=True)", "", "sb.ui.point(x, ymin, z)", "sb.ui.point(x, ymax, z)", "sb.ui.point(x+r, ymin, z, drag=(r, None, None))", "" ], "uid": 22 }, { "datums": [ { "expr": "-50", "name": "ax", "type": "float", "uid": 0 }, { "expr": "0", "name": "ay", "type": "float", "uid": 11 }, { "expr": "35", "name": "az", "type": "float", "uid": 1 }, { "expr": "0.0", "name": "_x", "type": "float", "uid": 3 }, { "expr": "0.0", "name": "_y", "type": "float", "uid": 4 }, { "expr": "0.0", "name": "_z", "type": "float", "uid": 5 }, { "expr": "0", "name": "dx", "type": "float", "uid": 6 }, { "expr": "-1.7", "name": "dy", "type": "float", "uid": 7 }, { "expr": "0.0", "name": "dz", "type": "float", "uid": 8 }, { "expr": "\u0011[__8.__2]", "name": "shape", "type": "_fabtypes.Shape", "uid": 9 }, { "expr": "\u0012fab.types.Shape('m-Xf0-Yf-1.7-Zf0m-Xf0-Yf0-Zf0m+*f0.819152X*f0.573576Y+*f-0.573576X*f0.819152Y_m-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m+*f1X*f0ZY+*f-0X*f1Zm-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m_+*f0.642788Y*f-0.766044Z+*f0.766044Y*f0.642788Zm-Xf0-Yf0-Zf0ia-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1.81m-Xf0-Yf0-Zf1m-Xf0-Yf0-Zf0m+*f1X*f0Y+*f-0X*f1Y_m-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m+*f1X*f0ZY+*f-0X*f1Zm-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m_+*f1Y*f0Z+*f-0Y*f1Zm-Xf0-Yf0-Zf0a-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1',float('-1.459099'),float('-2.036303'),float('-1.566520'),float('0.352390'),float('0.216849'),float('0.822769'))", "name": "out", "type": "_fabtypes.Shape", "uid": 10 } ], "inspector": [ -118.53267682955625, -192.86672840063397 ], "name": "s3", "script": [ "import fab", "", "title('Rotate, Translate')", "", "input('ax', float)", "input('ay', float)", "input('az', float)", "input('_x', float)", "input('_y', float)", "input('_z', float)", "input('dx', float)", "input('dy', float)", "input('dz', float)", "", "input('shape', fab.types.Shape)", "", "rotated = fab.shapes.rotate_x(shape, ax, 0, 0)", "rotated = fab.shapes.rotate_y(rotated, ay, 0, 0)", "rotated = fab.shapes.rotate_z(rotated, az, 0, 0)", "", "output('out', fab.shapes.translate(rotated, dx, dy, dz))", "", "# UI", "sb.ui.wireframe([(_x, _y, _z),", " (_x + dx, _y + dy, _z + dz)], color=sb.color.teal)", "sb.ui.wireframe([(_x, _y - 0.3, _z),", " (_x, _y + 0.3, _z)], color=sb.color.teal)", "sb.ui.wireframe([(_x - 0.3, _y, _z),", " (_x + 0.3, _y, _z)], color=sb.color.teal)", "sb.ui.wireframe([(_x, _y, _z - 0.3),", " (_x, _y, _z + 0.3)], color=sb.color.teal)", "", "sb.ui.point(_x, _y, _z, color=sb.color.teal)", "sb.ui.point(_x + dx, _y + dy, _z + dz, color=sb.color.teal, drag=(dx, dy, dz))" ], "uid": 24 }, { "datums": [ { "expr": "0", "name": "ax", "type": "float", "uid": 0 }, { "expr": "0", "name": "ay", "type": "float", "uid": 11 }, { "expr": "35", "name": "az", "type": "float", "uid": 1 }, { "expr": "0.0", "name": "_x", "type": "float", "uid": 3 }, { "expr": "0.0", "name": "_y", "type": "float", "uid": 4 }, { "expr": "0.0", "name": "_z", "type": "float", "uid": 5 }, { "expr": "0.25", "name": "dx", "type": "float", "uid": 6 }, { "expr": "-0.70", "name": "dy", "type": "float", "uid": 7 }, { "expr": "0.0", "name": "dz", "type": "float", "uid": 8 }, { "expr": "\u0011[__0.__2]", "name": "shape", "type": "_fabtypes.Shape", "uid": 9 }, { "expr": "\u0012fab.types.Shape('m-Xf0.25-Yf-0.7-Zf0m-Xf0-Yf0-Zf0m+*f0.819152X*f0.573576Y+*f-0.573576X*f0.819152Y_m-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m+*f1X*f0ZY+*f-0X*f1Zm-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m_+*f1Y*f0Z+*f-0Y*f1Zm-Xf0-Yf0-Zf0ia-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1.81a-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1.81',float('-1.017535'),float('-0.860601'),float('-0.280000'),float('0.479363'),float('0.943266'),float('0.280000'))", "name": "out", "type": "_fabtypes.Shape", "uid": 10 } ], "inspector": [ -126.61393261711569, 210.90284208399356 ], "name": "s2", "script": [ "import fab", "", "title('Rotate, Translate')", "", "input('ax', float)", "input('ay', float)", "input('az', float)", "input('_x', float)", "input('_y', float)", "input('_z', float)", "input('dx', float)", "input('dy', float)", "input('dz', float)", "", "input('shape', fab.types.Shape)", "", "rotated = fab.shapes.rotate_x(shape, ax, 0, 0)", "rotated = fab.shapes.rotate_y(rotated, ay, 0, 0)", "rotated = fab.shapes.rotate_z(rotated, az, 0, 0)", "", "output('out', fab.shapes.translate(rotated, dx, dy, dz))", "", "# UI", "sb.ui.wireframe([(_x, _y, _z),", " (_x + dx, _y + dy, _z + dz)], color=sb.color.teal)", "sb.ui.wireframe([(_x, _y - 0.3, _z),", " (_x, _y + 0.3, _z)], color=sb.color.teal)", "sb.ui.wireframe([(_x - 0.3, _y, _z),", " (_x + 0.3, _y, _z)], color=sb.color.teal)", "sb.ui.wireframe([(_x, _y, _z - 0.3),", " (_x, _y, _z + 0.3)], color=sb.color.teal)", "", "sb.ui.point(_x, _y, _z, color=sb.color.teal)", "sb.ui.point(_x + dx, _y + dy, _z + dz, color=sb.color.teal, drag=(dx, dy, dz))" ], "uid": 1 }, { "datums": [ { "expr": "0.0", "name": "x", "type": "float", "uid": 0 }, { "expr": "0.0", "name": "ymin", "type": "float", "uid": 1 }, { "expr": "1", "name": "ymax", "type": "float", "uid": 2 }, { "expr": "0", "name": "z", "type": "float", "uid": 3 }, { "expr": "0.28", "name": "r", "type": "float", "uid": 4 }, { "expr": "\u0012fab.types.Shape('a-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1',float('-0.280000'),float('0.000000'),float('-0.280000'),float('0.280000'),float('1.000000'),float('0.280000'))", "name": "shape", "type": "_fabtypes.Shape", "uid": 5 } ], "inspector": [ -1010.4175662357134, -201.26203555101606 ], "name": "f0d2", "script": [ "import fab", "import math", "", "title('Cylinder (Y)')", "", "input('x', float)", "input('ymin', float)", "input('ymax', float)", "input('z', float)", "input('r', float)", "", "output('shape', fab.shapes.cylinder_y(x, ymin, ymax, z, r))", "", "# UI", "sb.ui.wireframe([(x, ymin, z), (x, ymax, z)])", "sb.ui.wireframe([(x, ymin, z), (x+r, ymin, z)])", "", "sb.ui.wireframe([", " (math.cos(i/36. * 2*math.pi) * r + x, ymin,", " math.sin(i/36. * 2*math.pi) * r + z)", " for i in range(36)], close=True)", "", "sb.ui.wireframe([", " (math.cos(i/36. * 2*math.pi) * r + x, ymax,", " math.sin(i/36. * 2*math.pi) * r + z)", " for i in range(36)], close=True)", "", "sb.ui.point(x, ymin, z)", "sb.ui.point(x, ymax, z)", "sb.ui.point(x+r, ymin, z, drag=(r, None, None))", "" ], "uid": 13 }, { "datums": [ { "expr": "0", "name": "ax", "type": "float", "uid": 0 }, { "expr": "0", "name": "ay", "type": "float", "uid": 11 }, { "expr": "0", "name": "az", "type": "float", "uid": 1 }, { "expr": "0.0", "name": "_x", "type": "float", "uid": 3 }, { "expr": "0.0", "name": "_y", "type": "float", "uid": 4 }, { "expr": "0.0", "name": "_z", "type": "float", "uid": 5 }, { "expr": "0", "name": "dx", "type": "float", "uid": 6 }, { "expr": "0", "name": "dy", "type": "float", "uid": 7 }, { "expr": "1", "name": "dz", "type": "float", "uid": 8 }, { "expr": "\u0011[__13.__5]", "name": "shape", "type": "_fabtypes.Shape", "uid": 9 }, { "expr": "\u0012fab.types.Shape('m-Xf0-Yf0-Zf1m-Xf0-Yf0-Zf0m+*f1X*f0Y+*f-0X*f1Y_m-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m+*f1X*f0ZY+*f-0X*f1Zm-Xf0-Yf0-Zf0m-Xf0-Yf0-Zf0m_+*f1Y*f0Z+*f-0Y*f1Zm-Xf0-Yf0-Zf0a-r+q-Xf0q-Zf0f0.28a-f0Y-Yf1',float('-0.280000'),float('0.000000'),float('0.720000'),float('0.280000'),float('1.000000'),float('1.280000'))", "name": "out", "type": "_fabtypes.Shape", "uid": 10 } ], "inspector": [ -699.9966180407057, -104.82634726860729 ], "name": "s1", "script": [ "import fab", "", "title('Rotate, Translate')", "", "input('ax', float)", "input('ay', float)", "input('az', float)", "input('_x', float)", "input('_y', float)", "input('_z', float)", "input('dx', float)", "input('dy', float)", "input('dz', float)", "", "input('shape', fab.types.Shape)", "", "rotated = fab.shapes.rotate_x(shape, ax, 0, 0)", "rotated = fab.shapes.rotate_y(rotated, ay, 0, 0)", "rotated = fab.shapes.rotate_z(rotated, az, 0, 0)", "", "output('out', fab.shapes.translate(rotated, dx, dy, dz))", "", "# UI", "sb.ui.wireframe([(_x, _y, _z),", " (_x + dx, _y + dy, _z + dz)], color=sb.color.teal)", "sb.ui.wireframe([(_x, _y - 0.3, _z),", " (_x, _y + 0.3, _z)], color=sb.color.teal)", "sb.ui.wireframe([(_x - 0.3, _y, _z),", " (_x + 0.3, _y, _z)], color=sb.color.teal)", "sb.ui.wireframe([(_x, _y, _z - 0.3),", " (_x, _y, _z + 0.3)], color=sb.color.teal)", "", "sb.ui.point(_x, _y, _z, color=sb.color.teal)", "sb.ui.point(_x + dx, _y + dy, _z + dz, color=sb.color.teal, drag=(dx, dy, dz))" ], "uid": 23 } ], "protocol": 6, "type": "sb" }