# SPDX-License-Identifier: GPL-2.0-or-later # Author, Anthony D'Agostino import bpy from bpy.props import ( IntProperty, EnumProperty, ) import mathutils import io import operator import functools from bpy_extras import object_utils class AddTeapot(bpy.types.Operator, object_utils.AddObjectHelper): bl_idname = "mesh.primitive_teapot_add" bl_label = "Add Teapot" bl_description = "Construct a teapot or teaspoon mesh" bl_options = {"REGISTER", "UNDO"} resolution: IntProperty( name="Resolution", description="Resolution of the Teapot", default=5, min=2, max=15, ) objecttype: EnumProperty( name="Object Type", description="Type of Bezier Object", items=(('1', "Teapot", "Construct a teapot mesh"), ('2', "Tea Spoon", "Construct a teaspoon mesh")), default='1', ) def draw(self, context): layout = self.layout box = layout.box() box.prop(self, 'resolution') box = layout.box() box.prop(self, 'objecttype') # generic transform props box = layout.box() box.prop(self, 'align', expand=True) box.prop(self, 'location', expand=True) box.prop(self, 'rotation', expand=True) def execute(self, context): # turn off 'Enter Edit Mode' use_enter_edit_mode = bpy.context.preferences.edit.use_enter_edit_mode bpy.context.preferences.edit.use_enter_edit_mode = False cmode = bpy.context.mode verts, faces = make_teapot(self.objecttype, self.resolution) # Actually create the mesh object from this geometry data. obj = create_mesh_object(self, context, verts, [], faces, "Teapot") bpy.ops.object.mode_set(mode='EDIT') bpy.ops.mesh.remove_doubles() if cmode != "EDIT_MESH": bpy.ops.object.mode_set(mode=cmode) if use_enter_edit_mode: bpy.ops.object.mode_set(mode = 'EDIT') # restore pre operator state bpy.context.preferences.edit.use_enter_edit_mode = use_enter_edit_mode return {'FINISHED'} def create_mesh_face_hack(faces): # FIXME, faces with duplicate vertices shouldn't be created in the first place. faces_copy = [] for f in faces: f_copy = [] for i in f: if i not in f_copy: f_copy.append(i) faces_copy.append(f_copy) faces[:] = faces_copy def create_mesh_object(self, context, verts, edges, faces, name): create_mesh_face_hack(faces) # Create new mesh mesh = bpy.data.meshes.new(name) # Make a mesh from a list of verts/edges/faces. mesh.from_pydata(verts, edges, faces) # Update mesh geometry after adding stuff. mesh.update() return object_utils.object_data_add(context, mesh, operator=self) # ========================== # === Bezier patch Block === # ========================== def read_indexed_patch_file(filename): file = io.StringIO(filename) rawpatches = [] patches = [] numpatches = int(file.readline()) for i in range(numpatches): line = file.readline() (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, ) = map(int, line.split(",")) patches.append([[a, b, c, d], [e, f, g, h], [i, j, k, l], [m, n, o, p]]) rawpatches.append([[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]) verts = [] numverts = int(file.readline()) for i in range(numverts): line = file.readline() v1, v2, v3 = map(float, line.split(",")) verts.append((v1, v2, v3)) for i in range(len(patches)): for j in range(4): # len(patches[i])): for k in range(4): # len(patches[i][j])): index = patches[i][j][k] - 1 rawpatches[i][j][k] = verts[index] return rawpatches def patches_to_raw(patches, resolution): raw = [] for patch in patches: verts = make_verts(patch, resolution) faces = make_faces(resolution) rawquads = indexed_to_rawquads(verts, faces) raw.append(rawquads) raw = functools.reduce(operator.add, raw) # flatten the list return raw def make_bezier(ctrlpnts, resolution): def b1(t): return t * t * t def b2(t): return 3.0 * t * t * (1.0 - t) def b3(t): return 3.0 * t * (1.0 - t) * (1.0 - t) def b4(t): return (1.0 - t) * (1.0 - t) * (1.0 - t) p1, p2, p3, p4 = map(mathutils.Vector, ctrlpnts) def makevert(t): x, y, z = b1(t) * p1 + b2(t) * p2 + b3(t) * p3 + b4(t) * p4 return (x, y, z) curveverts = [makevert(i / resolution) for i in range(resolution + 1)] return curveverts def make_verts(a, resolution): s = [] for i in a: c = make_bezier(i, resolution) s.append(c) b = transpose(s) s = [] for i in b: c = make_bezier(i, resolution) s.append(c) verts = s verts = functools.reduce(operator.add, verts) # flatten the list return verts def make_faces(resolution): n = resolution + 1 faces = [] for i in range(resolution): for j in range(resolution): v1 = (i + 1) * n + j v2 = (i + 1) * n + j + 1 v3 = i * n + j + 1 v4 = i * n + j faces.append([v1, v2, v3, v4]) return faces def indexed_to_rawquads(verts, faces): rows = len(faces) cols = len(faces[0]) # or 4 rawquads = [[None] * cols for i in range(rows)] for i in range(rows): for j in range(cols): index = faces[i][j] rawquads[i][j] = verts[index] return rawquads def raw_to_indexed(rawfaces): # Generate verts and faces lists, without dups verts = [] coords = {} index = 0 for i in range(len(rawfaces)): for j in range(len(rawfaces[i])): vertex = rawfaces[i][j] if vertex not in coords: coords[vertex] = index index += 1 verts.append(vertex) rawfaces[i][j] = coords[vertex] return verts, rawfaces def transpose(rowsbycols): rows = len(rowsbycols) cols = len(rowsbycols[0]) colsbyrows = [[None] * rows for i in range(cols)] for i in range(cols): for j in range(rows): colsbyrows[i][j] = rowsbycols[j][i] return colsbyrows def make_teapot(enumname, resolution): filenames = [None, teapot, teaspoon] try: indexes = int(enumname) filename = filenames[indexes] except: print("Add Teapot Error: EnumProperty could not be set") filename = filenames[1] patches = read_indexed_patch_file(filename) raw = patches_to_raw(patches, resolution) verts, faces = raw_to_indexed(raw) return (verts, faces) # ================================= # === Indexed Bezier Data Block === # ================================= teapot = """32 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 4,17,18,19,8,20,21,22,12,23,24,25,16,26,27,28 19,29,30,31,22,32,33,34,25,35,36,37,28,38,39,40 31,41,42,1,34,43,44,5,37,45,46,9,40,47,48,13 13,14,15,16,49,50,51,52,53,54,55,56,57,58,59,60 16,26,27,28,52,61,62,63,56,64,65,66,60,67,68,69 28,38,39,40,63,70,71,72,66,73,74,75,69,76,77,78 40,47,48,13,72,79,80,49,75,81,82,53,78,83,84,57 57,58,59,60,85,86,87,88,89,90,91,92,93,94,95,96 60,67,68,69,88,97,98,99,92,100,101,102,96,103,104,105 69,76,77,78,99,106,107,108,102,109,110,111,105,112,113,114 78,83,84,57,108,115,116,85,111,117,118,89,114,119,120,93 121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136 124,137,138,121,128,139,140,125,132,141,142,129,136,143,144,133 133,134,135,136,145,146,147,148,149,150,151,152,69,153,154,155 136,143,144,133,148,156,157,145,152,158,159,149,155,160,161,69 162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177 165,178,179,162,169,180,181,166,173,182,183,170,177,184,185,174 174,175,176,177,186,187,188,189,190,191,192,193,194,195,196,197 177,184,185,174,189,198,199,186,193,200,201,190,197,202,203,194 204,204,204,204,207,208,209,210,211,211,211,211,212,213,214,215 204,204,204,204,210,217,218,219,211,211,211,211,215,220,221,222 204,204,204,204,219,224,225,226,211,211,211,211,222,227,228,229 204,204,204,204,226,230,231,207,211,211,211,211,229,232,233,212 212,213,214,215,234,235,236,237,238,239,240,241,242,243,244,245 215,220,221,222,237,246,247,248,241,249,250,251,245,252,253,254 222,227,228,229,248,255,256,257,251,258,259,260,254,261,262,263 229,232,233,212,257,264,265,234,260,266,267,238,263,268,269,242 270,270,270,270,279,280,281,282,275,276,277,278,271,272,273,274 270,270,270,270,282,289,290,291,278,286,287,288,274,283,284,285 270,270,270,270,291,298,299,300,288,295,296,297,285,292,293,294 270,270,270,270,300,305,306,279,297,303,304,275,294,301,302,271 306 1.4,0.0,2.4 1.4,-0.784,2.4 0.784,-1.4,2.4 0.0,-1.4,2.4 1.3375,0.0,2.53125 1.3375,-0.749,2.53125 0.749,-1.3375,2.53125 0.0,-1.3375,2.53125 1.4375,0.0,2.53125 1.4375,-0.805,2.53125 0.805,-1.4375,2.53125 0.0,-1.4375,2.53125 1.5,0.0,2.4 1.5,-0.84,2.4 0.84,-1.5,2.4 0.0,-1.5,2.4 -0.784,-1.4,2.4 -1.4,-0.784,2.4 -1.4,0.0,2.4 -0.749,-1.3375,2.53125 -1.3375,-0.749,2.53125 -1.3375,0.0,2.53125 -0.805,-1.4375,2.53125 -1.4375,-0.805,2.53125 -1.4375,0.0,2.53125 -0.84,-1.5,2.4 -1.5,-0.84,2.4 -1.5,0.0,2.4 -1.4,0.784,2.4 -0.784,1.4,2.4 0.0,1.4,2.4 -1.3375,0.749,2.53125 -0.749,1.3375,2.53125 0.0,1.3375,2.53125 -1.4375,0.805,2.53125 -0.805,1.4375,2.53125 0.0,1.4375,2.53125 -1.5,0.84,2.4 -0.84,1.5,2.4 0.0,1.5,2.4 0.784,1.4,2.4 1.4,0.784,2.4 0.749,1.3375,2.53125 1.3375,0.749,2.53125 0.805,1.4375,2.53125 1.4375,0.805,2.53125 0.84,1.5,2.4 1.5,0.84,2.4 1.75,0.0,1.875 1.75,-0.98,1.875 0.98,-1.75,1.875 0.0,-1.75,1.875 2.0,0.0,1.35 2.0,-1.12,1.35 1.12,-2.0,1.35 0.0,-2.0,1.35 2.0,0.0,0.9 2.0,-1.12,0.9 1.12,-2.0,0.9 0.0,-2.0,0.9 -0.98,-1.75,1.875 -1.75,-0.98,1.875 -1.75,0.0,1.875 -1.12,-2.0,1.35 -2.0,-1.12,1.35 -2.0,0.0,1.35 -1.12,-2.0,0.9 -2.0,-1.12,0.9 -2.0,0.0,0.9 -1.75,0.98,1.875 -0.98,1.75,1.875 0.0,1.75,1.875 -2.0,1.12,1.35 -1.12,2.0,1.35 0.0,2.0,1.35 -2.0,1.12,0.9 -1.12,2.0,0.9 0.0,2.0,0.9 0.98,1.75,1.875 1.75,0.98,1.875 1.12,2.0,1.35 2.0,1.12,1.35 1.12,2.0,0.9 2.0,1.12,0.9 2.0,0.0,0.45 2.0,-1.12,0.45 1.12,-2.0,0.45 0.0,-2.0,0.45 1.5,0.0,0.225 1.5,-0.84,0.225 0.84,-1.5,0.225 0.0,-1.5,0.225 1.5,0.0,0.15 1.5,-0.84,0.15 0.84,-1.5,0.15 0.0,-1.5,0.15 -1.12,-2.0,0.45 -2.0,-1.12,0.45 -2.0,0.0,0.45 -0.84,-1.5,0.225 -1.5,-0.84,0.225 -1.5,0.0,0.225 -0.84,-1.5,0.15 -1.5,-0.84,0.15 -1.5,0.0,0.15 -2.0,1.12,0.45 -1.12,2.0,0.45 0.0,2.0,0.45 -1.5,0.84,0.225 -0.84,1.5,0.225 0.0,1.5,0.225 -1.5,0.84,0.15 -0.84,1.5,0.15 0.0,1.5,0.15 1.12,2.0,0.45 2.0,1.12,0.45 0.84,1.5,0.225 1.5,0.84,0.225 0.84,1.5,0.15 1.5,0.84,0.15 -1.6,0.0,2.025 -1.6,-0.3,2.025 -1.5,-0.3,2.25 -1.5,0.0,2.25 -2.3,0.0,2.025 -2.3,-0.3,2.025 -2.5,-0.3,2.25 -2.5,0.0,2.25 -2.7,0.0,2.025 -2.7,-0.3,2.025 -3.0,-0.3,2.25 -3.0,0.0,2.25 -2.7,0.0,1.8 -2.7,-0.3,1.8 -3.0,-0.3,1.8 -3.0,0.0,1.8 -1.5,0.3,2.25 -1.6,0.3,2.025 -2.5,0.3,2.25 -2.3,0.3,2.025 -3.0,0.3,2.25 -2.7,0.3,2.025 -3.0,0.3,1.8 -2.7,0.3,1.8 -2.7,0.0,1.575 -2.7,-0.3,1.575 -3.0,-0.3,1.35 -3.0,0.0,1.35 -2.5,0.0,1.125 -2.5,-0.3,1.125 -2.65,-0.3,0.9375 -2.65,0.0,0.9375 -2.0,-0.3,0.9 -1.9,-0.3,0.6 -1.9,0.0,0.6 -3.0,0.3,1.35 -2.7,0.3,1.575 -2.65,0.3,0.9375 -2.5,0.3,1.125 -1.9,0.3,0.6 -2.0,0.3,0.9 1.7,0.0,1.425 1.7,-0.66,1.425 1.7,-0.66,0.6 1.7,0.0,0.6 2.6,0.0,1.425 2.6,-0.66,1.425 3.1,-0.66,0.825 3.1,0.0,0.825 2.3,0.0,2.1 2.3,-0.25,2.1 2.4,-0.25,2.025 2.4,0.0,2.025 2.7,0.0,2.4 2.7,-0.25,2.4 3.3,-0.25,2.4 3.3,0.0,2.4 1.7,0.66,0.6 1.7,0.66,1.425 3.1,0.66,0.825 2.6,0.66,1.425 2.4,0.25,2.025 2.3,0.25,2.1 3.3,0.25,2.4 2.7,0.25,2.4 2.8,0.0,2.475 2.8,-0.25,2.475 3.525,-0.25,2.49375 3.525,0.0,2.49375 2.9,0.0,2.475 2.9,-0.15,2.475 3.45,-0.15,2.5125 3.45,0.0,2.5125 2.8,0.0,2.4 2.8,-0.15,2.4 3.2,-0.15,2.4 3.2,0.0,2.4 3.525,0.25,2.49375 2.8,0.25,2.475 3.45,0.15,2.5125 2.9,0.15,2.475 3.2,0.15,2.4 2.8,0.15,2.4 0.0,0.0,3.15 0.0,-0.002,3.15 0.002,0.0,3.15 0.8,0.0,3.15 0.8,-0.45,3.15 0.45,-0.8,3.15 0.0,-0.8,3.15 0.0,0.0,2.85 0.2,0.0,2.7 0.2,-0.112,2.7 0.112,-0.2,2.7 0.0,-0.2,2.7 -0.002,0.0,3.15 -0.45,-0.8,3.15 -0.8,-0.45,3.15 -0.8,0.0,3.15 -0.112,-0.2,2.7 -0.2,-0.112,2.7 -0.2,0.0,2.7 0.0,0.002,3.15 -0.8,0.45,3.15 -0.45,0.8,3.15 0.0,0.8,3.15 -0.2,0.112,2.7 -0.112,0.2,2.7 0.0,0.2,2.7 0.45,0.8,3.15 0.8,0.45,3.15 0.112,0.2,2.7 0.2,0.112,2.7 0.4,0.0,2.55 0.4,-0.224,2.55 0.224,-0.4,2.55 0.0,-0.4,2.55 1.3,0.0,2.55 1.3,-0.728,2.55 0.728,-1.3,2.55 0.0,-1.3,2.55 1.3,0.0,2.4 1.3,-0.728,2.4 0.728,-1.3,2.4 0.0,-1.3,2.4 -0.224,-0.4,2.55 -0.4,-0.224,2.55 -0.4,0.0,2.55 -0.728,-1.3,2.55 -1.3,-0.728,2.55 -1.3,0.0,2.55 -0.728,-1.3,2.4 -1.3,-0.728,2.4 -1.3,0.0,2.4 -0.4,0.224,2.55 -0.224,0.4,2.55 0.0,0.4,2.55 -1.3,0.728,2.55 -0.728,1.3,2.55 0.0,1.3,2.55 -1.3,0.728,2.4 -0.728,1.3,2.4 0.0,1.3,2.4 0.224,0.4,2.55 0.4,0.224,2.55 0.728,1.3,2.55 1.3,0.728,2.55 0.728,1.3,2.4 1.3,0.728,2.4 0.0,0.0,0.0 1.5,0.0,0.15 1.5,0.84,0.15 0.84,1.5,0.15 0.0,1.5,0.15 1.5,0.0,0.075 1.5,0.84,0.075 0.84,1.5,0.075 0.0,1.5,0.075 1.425,0.0,0.0 1.425,0.798,0.0 0.798,1.425,0.0 0.0,1.425,0.0 -0.84,1.5,0.15 -1.5,0.84,0.15 -1.5,0.0,0.15 -0.84,1.5,0.075 -1.5,0.84,0.075 -1.5,0.0,0.075 -0.798,1.425,0.0 -1.425,0.798,0.0 -1.425,0.0,0.0 -1.5,-0.84,0.15 -0.84,-1.5,0.15 0.0,-1.5,0.15 -1.5,-0.84,0.075 -0.84,-1.5,0.075 0.0,-1.5,0.075 -1.425,-0.798,0.0 -0.798,-1.425,0.0 0.0,-1.425,0.0 0.84,-1.5,0.15 1.5,-0.84,0.15 0.84,-1.5,0.075 1.5,-0.84,0.075 0.798,-1.425,0.0 1.425,-0.798,0.0 """ teaspoon = """16 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32 33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64 65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80 81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96 97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112 113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128 129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144 145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160 161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176 177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192 193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208 209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224 225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240 241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256 256 -0.000107143,0.205357,0.0 0.0,0.196429,-0.0178571 0.0,0.196429,-0.0178571 0.000107143,0.205357,0.0 -0.0535714,0.205357,0.0 -0.0222714,0.178571,-0.0534286 0.0222714,0.178571,-0.0534286 0.0535714,0.205357,0.0 -0.107143,0.0952429,-0.0178571 -0.0446429,0.0952429,-0.0892857 0.0446429,0.0952429,-0.0892857 0.107143,0.0952429,-0.0178571 -0.107143,0.0,-0.0178571 -0.0446429,0.0,-0.0892857 0.0446429,0.0,-0.0892857 0.107143,0.0,-0.0178571 0.000107143,0.205357,0.0 0.000135714,0.207589,0.00446429 0.000157143,0.216518,0.00446429 0.000125,0.214286,0.0 0.0535714,0.205357,0.0 0.0613964,0.212054,0.0133571 0.0714286,0.220982,0.015625 0.0625,0.214286,0.0 0.107143,0.0952429,-0.0178571 0.122768,0.0952429,0.0 0.142857,0.0952429,0.00446429 0.125,0.0952429,-0.0178571 0.107143,0.0,-0.0178571 0.122768,0.0,0.0 0.142857,0.0,0.00446429 0.125,0.0,-0.0178571 0.000125,0.214286,0.0 0.0,0.205357,-0.0178571 0.0,0.205357,-0.0178571 -0.000125,0.214286,0.0 0.0625,0.214286,0.0 0.0267857,0.1875,-0.0625 -0.0267857,0.1875,-0.0625 -0.0625,0.214286,0.0 0.125,0.0952429,-0.0178571 0.0535714,0.0952429,-0.107143 -0.0535714,0.0952429,-0.107143 -0.125,0.0952429,-0.0178571 0.125,0.0,-0.0178571 0.0535714,0.0,-0.107143 -0.0535714,0.0,-0.107143 -0.125,0.0,-0.0178571 -0.000125,0.214286,0.0 -0.000157143,0.216518,0.00446429 -0.000135714,0.207589,0.00446429 -0.000107143,0.205357,0.0 -0.0625,0.214286,0.0 -0.0714286,0.220982,0.015625 -0.0613964,0.212054,0.0133571 -0.0535714,0.205357,0.0 -0.125,0.0952429,-0.0178571 -0.142857,0.0952429,0.00446429 -0.122768,0.0952429,0.0 -0.107143,0.0952429,-0.0178571 -0.125,0.0,-0.0178571 -0.142857,0.0,0.00446429 -0.122768,0.0,0.0 -0.107143,0.0,-0.0178571 -0.107143,0.0,-0.0178571 -0.0446429,0.0,-0.0892857 0.0446429,0.0,-0.0892857 0.107143,0.0,-0.0178571 -0.107143,-0.142857,-0.0178571 -0.0446429,-0.142857,-0.0892857 0.0446429,-0.142857,-0.0892857 0.107143,-0.142857,-0.0178571 -0.0133929,-0.160714,0.0386893 -0.00557857,-0.160714,0.0386893 0.00557857,-0.160714,0.0386893 0.0133929,-0.160714,0.0386893 -0.0133929,-0.25,0.0535714 -0.00557857,-0.25,0.0535714 0.00557857,-0.25,0.0535714 0.0133929,-0.25,0.0535714 0.107143,0.0,-0.0178571 0.122768,0.0,0.0 0.142857,0.0,0.00446429 0.125,0.0,-0.0178571 0.107143,-0.142857,-0.0178571 0.122768,-0.142857,0.0 0.142857,-0.142857,0.00446429 0.125,-0.142857,-0.0178571 0.0133929,-0.160714,0.0386893 0.0153464,-0.160714,0.0386893 0.0178571,-0.160714,0.0314357 0.015625,-0.160714,0.0297607 0.0133929,-0.25,0.0535714 0.0153464,-0.25,0.0535714 0.0178571,-0.25,0.0463179 0.015625,-0.25,0.0446429 0.125,0.0,-0.0178571 0.0535714,0.0,-0.107143 -0.0535714,0.0,-0.107143 -0.125,0.0,-0.0178571 0.125,-0.142857,-0.0178571 0.0535714,-0.142857,-0.107143 -0.0535714,-0.142857,-0.107143 -0.125,-0.142857,-0.0178571 0.015625,-0.160714,0.0297607 0.00669643,-0.160714,0.0230643 -0.00781071,-0.160714,0.0208321 -0.015625,-0.160714,0.0297607 0.015625,-0.25,0.0446429 0.00669643,-0.25,0.0379464 -0.00781071,-0.25,0.0357143 -0.015625,-0.25,0.0446429 -0.125,0.0,-0.0178571 -0.142857,0.0,0.00446429 -0.122768,0.0,0.0 -0.107143,0.0,-0.0178571 -0.125,-0.142857,-0.0178571 -0.142857,-0.142857,0.00446429 -0.122768,-0.142857,0.0 -0.107143,-0.142857,-0.0178571 -0.015625,-0.160714,0.0297607 -0.0175786,-0.160714,0.0319929 -0.0153464,-0.160714,0.0386893 -0.0133929,-0.160714,0.0386893 -0.015625,-0.25,0.0446429 -0.0175786,-0.25,0.046875 -0.0153464,-0.25,0.0535714 -0.0133929,-0.25,0.0535714 -0.0133929,-0.25,0.0535714 -0.00557857,-0.25,0.0535714 0.00557857,-0.25,0.0535714 0.0133929,-0.25,0.0535714 -0.0133929,-0.46425,0.0892857 -0.00557857,-0.46425,0.0892857 0.00557857,-0.46425,0.0892857 0.0133929,-0.46425,0.0892857 -0.0446429,-0.678571,0.0535714 -0.00892857,-0.678571,0.0625 0.00892857,-0.678571,0.0625 0.0446429,-0.678571,0.0535714 -0.0446429,-0.857143,0.0357143 -0.00892857,-0.857143,0.0446429 0.00892857,-0.857143,0.0446429 0.0446429,-0.857143,0.0357143 0.0133929,-0.25,0.0535714 0.0153464,-0.25,0.0535714 0.0178571,-0.25,0.0463179 0.015625,-0.25,0.0446429 0.0133929,-0.46425,0.0892857 0.0153464,-0.464286,0.0892857 0.0178571,-0.46425,0.0820321 0.015625,-0.46425,0.0803571 0.0446429,-0.678571,0.0535714 0.0535714,-0.678571,0.0513393 0.0535714,-0.678571,0.0334821 0.0446429,-0.678571,0.0357143 0.0446429,-0.857143,0.0357143 0.0535714,-0.857143,0.0334821 0.0535714,-0.857143,0.015625 0.0446429,-0.857143,0.0178571 0.015625,-0.25,0.0446429 0.00669643,-0.25,0.0379464 -0.00781071,-0.25,0.0357143 -0.015625,-0.25,0.0446429 0.015625,-0.46425,0.0803571 0.00669643,-0.464286,0.0736607 -0.00781071,-0.46425,0.0714286 -0.015625,-0.46425,0.0803571 0.0446429,-0.678571,0.0357143 0.00892857,-0.678571,0.0446429 -0.00892857,-0.678571,0.0446429 -0.0446429,-0.678571,0.0357143 0.0446429,-0.857143,0.0178571 0.00892857,-0.857143,0.0267857 -0.00892857,-0.857143,0.0267857 -0.0446429,-0.857143,0.0178571 -0.015625,-0.25,0.0446429 -0.0175786,-0.25,0.046875 -0.0153464,-0.25,0.0535714 -0.0133929,-0.25,0.0535714 -0.015625,-0.46425,0.0803571 -0.0175786,-0.464286,0.0825893 -0.0153464,-0.464286,0.0892857 -0.0133929,-0.46425,0.0892857 -0.0446429,-0.678571,0.0357143 -0.0535714,-0.678571,0.0334821 -0.0535714,-0.678571,0.0513393 -0.0446429,-0.678571,0.0535714 -0.0446429,-0.857143,0.0178571 -0.0535714,-0.857143,0.015625 -0.0535714,-0.857143,0.0334821 -0.0446429,-0.857143,0.0357143 -0.0446429,-0.857143,0.0357143 -0.00892857,-0.857143,0.0446429 0.00892857,-0.857143,0.0446429 0.0446429,-0.857143,0.0357143 -0.0446429,-0.928571,0.0285714 -0.00892857,-0.928571,0.0375 0.00892857,-0.928571,0.0375 0.0446429,-0.928571,0.0285714 -0.0539286,-0.999643,0.0178571 0.000357143,-0.999643,0.0178571 0.0,-0.999643,0.0178571 0.0535714,-0.999643,0.0178571 -0.000357143,-1,0.0178571 0.000357143,-1,0.0178571 0.0,-1,0.0178571 0.0,-1,0.0178571 0.0446429,-0.857143,0.0357143 0.0535714,-0.857143,0.0334821 0.0535714,-0.857143,0.015625 0.0446429,-0.857143,0.0178571 0.0446429,-0.928571,0.0285714 0.0535714,-0.928571,0.0263393 0.0535714,-0.928571,0.00848214 0.0446429,-0.928571,0.0107143 0.0535714,-0.999643,0.0178571 0.0669643,-0.999643,0.0178571 0.0673214,-0.999643,0.0 0.0539286,-0.999643,0.0 0.0,-1,0.0178571 0.0,-1,0.0178571 0.000357143,-1,0.0 0.000357143,-1,0.0 0.0446429,-0.857143,0.0178571 0.00892857,-0.857143,0.0267857 -0.00892857,-0.857143,0.0267857 -0.0446429,-0.857143,0.0178571 0.0446429,-0.928571,0.0107143 0.00892857,-0.928571,0.0196429 -0.00892857,-0.928571,0.0196429 -0.0446429,-0.928571,0.0107143 0.0539286,-0.999643,0.0 0.000357143,-0.999643,0.0 -0.000357143,-0.999643,0.0 -0.0539286,-0.999643,0.0 0.000357143,-1,0.0 0.000357143,-1,0.0 -0.000357143,-1,0.0 -0.000357143,-1,0.0 -0.0446429,-0.857143,0.0178571 -0.0535714,-0.857143,0.015625 -0.0535714,-0.857143,0.0334821 -0.0446429,-0.857143,0.0357143 -0.0446429,-0.928571,0.0107143 -0.0535714,-0.928571,0.00848214 -0.0535714,-0.928571,0.0263393 -0.0446429,-0.928571,0.0285714 -0.0539286,-0.999643,0.0 -0.0673214,-0.999643,0.0 -0.0675,-0.999643,0.0178571 -0.0539286,-0.999643,0.0178571 -0.000357143,-1,0.0 -0.000357143,-1,0.0 -0.000535714,-1,0.0178571 -0.000357143,-1,0.0178571 """