# SPDX-License-Identifier: GPL-2.0-or-later # ---------------------------------------------------------- # Automatic generation of kitchen cabinet # Author: Antonio Vazquez (antonioya) # # ---------------------------------------------------------- import bpy from math import pi, fabs from copy import copy from sys import exc_info from datetime import datetime from time import time from bpy.types import Operator, PropertyGroup from bpy.props import StringProperty, EnumProperty, FloatProperty, IntProperty, BoolProperty, CollectionProperty from bpy_extras.io_utils import ExportHelper from .achm_tools import * # ---------------------------------------------------------- # Define rotation types # ---------------------------------------------------------- RotationType_Default = 9 RotationType_R90CW = 1 RotationType_R90CCW = 2 RotationType_R180 = 3 # ---------------------------------------------------------- # Export menu UI # ---------------------------------------------------------- class ARCHIMESH_OT_ExportInventory(Operator, ExportHelper): bl_idname = "io_export.kitchen_inventory" bl_description = 'Export kitchen inventory (.txt)' bl_category = 'View' bl_label = "Export" # From ExportHelper. Filter filenames. filename_ext = ".txt" filter_glob: StringProperty( default="*.txt", options={'HIDDEN'}, ) filepath: StringProperty( name="File Path", description="File path used for exporting room data file", maxlen=1024, default="", ) # ---------------------------------------------------------- # Execute # ---------------------------------------------------------- # noinspection PyUnusedLocal def execute(self, context): # noinspection PyBroadException try: # ------------------------------- # extract path and filename # ------------------------------- (filepath, filename) = os.path.split(self.properties.filepath) print('Exporting %s' % filename) # ------------------------------- # Open output file # ------------------------------- realpath = os.path.realpath(os.path.expanduser(self.properties.filepath)) fout = open(realpath, 'w') st = datetime.fromtimestamp(time()).strftime('%Y-%m-%d %H:%M:%S') fout.write("# Archimesh kitchen inventory\n") fout.write("# " + st + "\n") mylist = getinventory() for e in mylist: fout.write(e + "\n") fout.close() self.report({'INFO'}, realpath + "successfully exported") except: e = exc_info()[0] self.report({'ERROR'}, "Unable to export inventory " + e) return {'FINISHED'} # ---------------------------------------------------------- # Generate inventory list # ---------------------------------------------------------- def getinventory(): # Get List of boxes in the scene unitobj = [] for obj in bpy.context.scene.objects: # noinspection PyBroadException try: if obj["archimesh.sku"] is not None: unitobj.extend([obj["archimesh.sku"]]) except: pass # ---------------------------------------- # Get number of unit structures (boxes) # ---------------------------------------- boxes = [] boxestot = [] for u in unitobj: key = u[:1] + u[8:28] if key not in boxes: boxes.extend([key]) boxestot.extend([1]) else: x = boxes.index(key) boxestot[x] += 1 # ---------------------------------------- # Get number of doors and drawer fronts # ---------------------------------------- door = [] doortot = [] handles = 0 for u in unitobj: if u[1:2] != "W": w = float(u[36:42]) key = u[1:2] + "%06.3f" % w + u[22:28] else: # Drawers # calculate separation sz = float(u[22:28]) gap = 0.001 dist = sz - (gap * int(u[2:4])) space = dist / int(u[2:4]) key = u[1:2] + u[8:15] + "%06.3f" % space n = int(u[2:4]) # handles if u[4:5] == "1": handles += n if key not in door: door.extend([key]) doortot.extend([n]) else: x = door.index(key) doortot[x] += n # ---------------------------------------- # Get number of Shelves # ---------------------------------------- shelves = [] shelvestot = [] for u in unitobj: if int(u[5:7]) > 0: w = float(u[8:14]) n = int(u[5:7]) th = float(u[29:35]) key = "%0.2f x %0.2f x %0.3f" % (w - (th * 2), float(u[15:21]) - th, th) # subtract board thickness if key not in shelves: shelves.extend([key]) shelvestot.extend([n]) else: x = shelves.index(key) shelvestot[x] += n # ---------------------------------------- # Get Countertop size # "T%06.3fx%06.3fx%06.3f-%06.3f" # ---------------------------------------- t = 0 z = 0 for obj in bpy.context.scene.objects: # noinspection PyBroadException try: if obj["archimesh.top_sku"] is not None: u = obj["archimesh.top_sku"] t += float(u[1:7]) z += float(u[22:28]) except: pass # ---------------------------------------- # Get Baseboard size # ---------------------------------------- b = 0 btxt = None for obj in bpy.context.scene.objects: # noinspection PyBroadException try: if obj["archimesh.base_sku"] is not None: u = obj["archimesh.base_sku"] b += float(u[1:6]) btxt = "%0.3f x %0.3f" % (float(u[8:14]), float(u[15:21])) except: pass # ---------------------------------------- # Prepare output data # ---------------------------------------- output = [] output.extend(["Units\tDescription\tDimensions"]) for i in range(0, len(boxes)): if boxes[i][:1] == "F": typ = "Floor unit\t" else: typ = "Wall unit\t" txt = "%0.2f x %0.2f x %0.2f" % (float(boxes[i][1:7]), float(boxes[i][8:14]), float(boxes[i][15:21])) output.extend([str(boxestot[i]) + "\t" + typ + txt]) for i in range(0, len(door)): if door[i][:1] == "D" or door[i][:1] == "L": typ = "Solid door\t" elif door[i][:1] == "G": typ = "Glass door\t" elif door[i][:1] == "W": typ = "Drawer front\t" else: typ = "????\t" txt = "%0.3f x %0.3f" % (float(door[i][1:7]), float(door[i][8:14])) output.extend([str(doortot[i]) + "\t" + typ + txt]) for i in range(0, len(shelves)): output.extend([str(shelvestot[i]) + "\tShelf\t" + shelves[i]]) output.extend([str(handles) + "\tHandle"]) if t > 0: output.extend([str(round(t, 2)) + "\tCountertop (linear length)"]) if z > 0: output.extend([str(round(z, 2)) + "\tCountertop wall piece(linear length)"]) if b > 0: output.extend([str(round(b, 2)) + "\tBaseboard (linear length) " + btxt]) return output # ------------------------------------------------------------------ # Define property group class for cabinet properties # This is managed as an array of objects # ------------------------------------------------------------------ class CabinetProperties(PropertyGroup): # Cabinet width sX: FloatProperty( name='width', min=0.001, max=10, default=0.60, precision=3, description='Cabinet width', ) wY: FloatProperty( name='', min=-10, max=10, default=0, precision=3, description='Modify depth size', ) wZ: FloatProperty( name='', min=-10, max=10, default=0, precision=3, description='Modify height size', ) # Cabinet position shift pX: FloatProperty( name='', min=-10, max=10, default=0, precision=3, description='Position x shift', ) pY: FloatProperty( name='', min=-10, max=10, default=0, precision=3, description='Position y shift', ) pZ: FloatProperty( name='', min=-10, max=10, default=0, precision=3, description='Position z shift', ) # Door type dType: EnumProperty( items=( ('1', "Single R", ""), ('2', "Single L", ""), ('3', "Single T", ""), ('4', "Glass R", ""), ('5', "Glass L", ""), ('6', "Glass T", ""), ('7', "Drawers", ""), ('8', "Double", ""), ('11', "Double Glass", ""), ('10', "Corner R", ""), ('9', "Corner L", ""), ('99', "None", "")), name="Door", description="Type of front door or drawers", ) # Shelves sNum: IntProperty( name='Shelves', min=0, max=10, default=1, description='Number total of shelves', ) # Drawers dNum: IntProperty( name='Num', min=1, max=10, default=3, description='Number total of drawers', ) # Glass Factor gF: FloatProperty( name='', min=0.001, max=1, default=0.1, precision=3, description='Glass ratio', ) # Handle flag hand: BoolProperty( name="Handle", description="Create a handle", default=True, ) # Left baseboard bL: BoolProperty( name="Left Baseboard", description="Create a left baseboard", default=False, ) # Right baseboard bR: BoolProperty( name="Right Baseboard", description="Create a left baseboard", default=False, ) # Fill countertop spaces tC: BoolProperty( name="Countertop fill", description="Fill empty spaces with countertop", default=True, ) # Add countertop edge tE: BoolProperty( name="Countertop edge", description="Add edge to countertop", default=True, ) # cabinet rotation rotate: EnumProperty( items=( ('9', "Default", ""), ('1', "90 CW", ""), ('2', "90 CCW", ""), ('3', "180", ""), ), name="Rotate", description="Rotate cabinet relative to previous one", ) bpy.utils.register_class(CabinetProperties) # ------------------------------------------------------------------ # Define UI class # Kitchens # ------------------------------------------------------------------ class ARCHIMESH_OT_Kitchen(Operator): bl_idname = "mesh.archimesh_kitchen" bl_label = "Cabinets" bl_description = "Cabinet Generator" bl_category = 'View' bl_options = {'REGISTER', 'UNDO'} # Define properties type_cabinet: EnumProperty( items=(('1', "Floor", ""), ('2', "Wall", "")), name="Type", description="Type of cabinets", ) oldtype: EnumProperty( items=(('1', "Floor", ""), ('2', "Wall", "")), name="Type", description="Type of cabinets", ) thickness: FloatProperty( name='Thickness', min=0.001, max=5, default=0.018, precision=3, description='Board thickness', ) depth: FloatProperty( name='Depth', min=0.001, max=50, default=0.59, precision=3, description='Default cabinet depth', ) height: FloatProperty( name='Height', min=0.001, max=50, default=0.70, precision=3, description='Default cabinet height', ) handle: EnumProperty( items=( ('1', "Model 1", ""), ('2', "Model 2", ""), ('3', "Model 3", ""), ('4', "Model 4", ""), ('5', "Model 5", ""), ('6', "Model 6", ""), ('7', "Model 7", ""), ('8', "Model 8", ""), ('9', "None", ""), ), name="Handle", description="Type of handle", ) handle_x: FloatProperty( name='', min=0.001, max=10, default=0.05, precision=3, description='Displacement in X relative position (limited to door size)', ) handle_z: FloatProperty( name='', min=0.001, max=10, default=0.05, precision=3, description='Displacement in Z relative position (limited to door size)', ) baseboard: BoolProperty( name="Baseboard", description="Create a baseboard automatically", default=True, ) baseheight: FloatProperty( name='height', min=0.001, max=10, default=0.16, precision=3, description='Baseboard height', ) basefactor: FloatProperty( name='sink', min=0, max=1, default=0.90, precision=3, description='Baseboard sink', ) countertop: BoolProperty( name="Countertop", description="Create a countertop automatically (only default cabinet height)", default=True, ) counterheight: FloatProperty( name='height', min=0.001, max=10, default=0.02, precision=3, description='Countertop height', ) counterextend: FloatProperty( name='extend', min=0.001, max=10, default=0.03, precision=3, description='Countertop extent', ) fitZ: BoolProperty( name="Floor origin in Z=0", description="Use Z=0 axis as vertical origin floor position", default=True, ) moveZ: FloatProperty( name='Z position', min=0.001, max=10, default=1.5, precision=3, description='Wall cabinet Z position from floor', ) cabinet_num: IntProperty( name='Number of Cabinets', min=1, max=30, default=1, description='Number total of cabinets in the Kitchen', ) cabinets: CollectionProperty(type=CabinetProperties) # Materials crt_mat: BoolProperty( name="Create default Cycles materials", description="Create default materials for Cycles render", default=True, ) # ----------------------------------------------------- # Draw (create UI interface) # ----------------------------------------------------- # noinspection PyUnusedLocal def draw(self, context): layout = self.layout space = bpy.context.space_data if not space.local_view: # Imperial units warning if bpy.context.scene.unit_settings.system == "IMPERIAL": row = layout.row() row.label(text="Warning: Imperial units not supported", icon='COLOR_RED') box = layout.box() row = box.row() row.prop(self, 'type_cabinet') row.prop(self, 'thickness') row = box.row() row.prop(self, 'depth') row.prop(self, 'height') row = box.row() row.prop(self, 'handle') if self.handle != "9": row.prop(self, 'handle_x') row.prop(self, 'handle_z') if self.type_cabinet == "1": row = box.row() row.prop(self, "countertop") if self.countertop: row.prop(self, "counterheight") row.prop(self, "counterextend") row = box.row() row.prop(self, 'baseboard') if self.baseboard: row.prop(self, 'baseheight') row.prop(self, 'basefactor', slider=True) row = box.row() row.prop(self, 'fitZ') if self.type_cabinet == "2": row.prop(self, 'moveZ') # Cabinet number row = box.row() row.prop(self, 'cabinet_num') # Add menu for cabinets if self.cabinet_num > 0: for idx in range(0, self.cabinet_num): box = layout.box() add_cabinet(self, box, idx + 1, self.cabinets[idx]) box = layout.box() if not context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: box.enabled = False box.prop(self, 'crt_mat') else: row = layout.row() row.label(text="Warning: Operator does not work in local view mode", icon='ERROR') # ----------------------------------------------------- # Execute # ----------------------------------------------------- # noinspection PyUnusedLocal def execute(self, context): if bpy.context.mode == "OBJECT": # Set default values if self.oldtype != self.type_cabinet: if self.type_cabinet == "1": # Floor self.depth = 0.59 self.height = 0.70 if self.type_cabinet == "2": # Wall self.depth = 0.35 self.height = 0.70 self.oldtype = self.type_cabinet # Create all elements for i in range(len(self.cabinets) - 1, self.cabinet_num): self.cabinets.add() # Create cabinets create_kitchen_mesh(self) return {'FINISHED'} else: self.report({'WARNING'}, "Archimesh: Option only valid in Object mode") return {'CANCELLED'} # ----------------------------------------------------- # Add cabinet parameters # ----------------------------------------------------- def add_cabinet(self, box, num, cabinet): doortype = cabinet.dType row = box.row() row.label(text="Cabinet " + str(num)) row.prop(cabinet, 'sX') row = box.row() row.prop(cabinet, 'wY') row.prop(cabinet, 'wZ') row.prop(cabinet, 'rotate') row = box.row() row.prop(cabinet, 'pX') row.prop(cabinet, 'pY') row.prop(cabinet, 'pZ') row = box.row() row.prop(cabinet, 'dType') if doortype == "7": # Drawers row.prop(cabinet, 'dNum') # drawers number else: row.prop(cabinet, 'sNum') # shelves number # Glass ratio if doortype == "4" or doortype == "5" or doortype == "6" or doortype == "11": row.prop(cabinet, 'gF', slider=True) # shelves number # Handle row = box.row() if self.handle != "9": row.prop(cabinet, 'hand') if self.baseboard and self.type_cabinet == "1": row.prop(cabinet, 'bL') row.prop(cabinet, 'bR') if self.countertop and self.type_cabinet == "1": row = box.row() row.prop(cabinet, 'tC') row.prop(cabinet, 'tE') # ------------------------------------------------------------------------------ # Generate mesh data # All custom values are passed using self container (self.myvariable) # ------------------------------------------------------------------------------ def create_kitchen_mesh(self): # deactivate others for o in bpy.data.objects: if o.select_get() is True: o.select_set(False) bpy.ops.object.select_all(action='DESELECT') # Create cabinets generate_cabinets(self) return # ------------------------------------------------------------------------------ # Generate cabinet # All custom values are passed using self container (self.myvariable) # ------------------------------------------------------------------------------ def generate_cabinets(self): boxes = [] bases = [] location = bpy.context.scene.cursor.location myloc = copy(location) # copy location to keep 3D cursor position # Fit to floor if self.fitZ: myloc[2] = 0 # Move to wall position if self.type_cabinet == "2": # wall myloc[2] = myloc[2] + self.moveZ # Baseboard if self.type_cabinet == "1" and self.baseboard: # floor myloc[2] = myloc[2] + self.baseheight # add baseboard position for bottom # Create cabinets lastx = myloc[0] lasty = myloc[1] lastrot = 0 # last rotation # ------------------------------------------------------------------------------ # Cabinets # # By default all cabinets are created in X axis and later are rotated if needed # the default rotation means keep last rotation, not 0, so if the previous # cabinet is 90CW, the next one will be the same. To back to 0, you must select # 90 CCW. # ------------------------------------------------------------------------------ for i in range(0, self.cabinet_num): mydata = create_box(self.type_cabinet, "Cabinet" + str(i + 1), self.thickness, self.cabinets[i].sX, self.depth + self.cabinets[i].wY, self.height + self.cabinets[i].wZ, self.cabinets[i].pX + lastx, self.cabinets[i].pY + lasty, myloc[2] + self.cabinets[i].pZ, self.cabinets[i].dType, self.cabinets[i].dNum, self.cabinets[i].sNum, self.cabinets[i].gF, self.crt_mat, self.cabinets[i].hand, self.handle, self.handle_x, self.handle_z, self.depth) mybox = mydata[0] # LastX is the sum of initial position + width of the cabinet. lastx = mydata[1] # add SKU property sku = createunitsku(self, self.cabinets[i]) mydata[0]["archimesh.sku"] = sku # Save rotation type myrotationtype = int(self.cabinets[i].rotate) # --------------------------------------------------------- # Calculate new rotation angle # # --------------------------------------------------------- myrot = lastrot # ---------- # Default # ---------- if myrotationtype == RotationType_Default: myrot = myrot # do no change rotation # ---------- # 90 CW # ---------- if myrotationtype == RotationType_R90CW: myrot += -pi / 2 # ---------- # 90 CCW # ---------- if myrotationtype == RotationType_R90CCW: myrot += pi / 2 # ---------- # 180 # ---------- if myrotationtype == RotationType_R180: myrot = myrot + pi # Save the rotation for next cabinet lastrot = myrot angle = myrot - ((2 * pi) * (myrot // (2 * pi))) # clamp one revolution # ------------------------------------------- # Countertop (only default height cabinet) # 9-Default, 1-90CW, 2-90CCW, 3-180 # ------------------------------------------- if self.countertop and self.type_cabinet == "1" and self.cabinets[i].wZ == 0: w = self.cabinets[i].sX # fill (depend on orientation) if self.cabinets[i].tC: # 0 or 180 degrees if angle == 0 or angle == pi: w += fabs(self.cabinets[i].pX) # 90 or 270 degrees if angle == (3 * pi) / 2 or angle == pi / 2: w += fabs(self.cabinets[i].pY) mycountertop = create_countertop("Countertop" + str(i + 1), w, self.depth + self.cabinets[i].wY, self.counterheight, self.counterextend, self.crt_mat, self.cabinets[i].dType, self.depth, self.cabinets[i].tE) # ------------------------------- # Fill countertop spaces # ------------------------------- if self.cabinets[i].tC: # Default if angle == 0: if self.cabinets[i].pX >= 0: mycountertop.location[0] = -self.cabinets[i].pX else: mycountertop.location[0] = 0 # 90CW if angle == (3 * pi) / 2: if self.cabinets[i].pY >= 0: mycountertop.location[0] = 0 else: mycountertop.location[0] = self.cabinets[i].pY # 90CCW if angle == pi / 2: if self.cabinets[i].pY >= 0: mycountertop.location[0] = self.cabinets[i].pY * -1 else: mycountertop.location[0] = 0 # 180 if angle == pi: mycountertop.location[0] = 0 mycountertop.location[2] = self.height mycountertop.parent = mydata[0] # -------------------- # add countertop SKU # -------------------- t = w # if corner, remove size if self.cabinets[i].dType == "9" or self.cabinets[i].dType == "10": t = t - self.cabinets[i].sX mycountertop["archimesh.top_sku"] = "T%06.3fx%06.3fx%06.3f-%06.3f" % (t, self.depth + self.cabinets[ i].wY + self.counterextend, self.counterheight, w) # ---------------- # Baseboard # ---------------- if self.baseboard and self.type_cabinet == "1": gap = (self.depth + self.cabinets[i].wY) - ((self.depth + self.cabinets[i].wY) * self.basefactor) mybase = create_baseboard("Baseboard" + str(i + 1), self.cabinets[i].sX, self.thickness, self.baseheight, self.crt_mat, self.cabinets[i].bL, self.cabinets[i].bR, (self.depth + self.cabinets[i].wY) * self.basefactor, self.cabinets[i].dType, gap) bases.extend([mybase]) mybase.location[1] = (self.depth + self.cabinets[i].wY) * self.basefactor * -1 mybase.location[2] = -self.baseheight mybase.parent = mydata[0] # -------------------- # add base SKU # -------------------- t = self.cabinets[i].sX # Add sides if self.cabinets[i].bR is True: t = t + (self.depth + self.cabinets[i].wY) * self.basefactor if self.cabinets[i].bL is True: t = t + (self.depth + self.cabinets[i].wY) * self.basefactor mybase["archimesh.base_sku"] = "B%06.3fx%06.3fx%06.3f" % (t, self.thickness, self.baseheight) # Rotate mybox.rotation_euler = (0, 0, myrot) # ----------------------------------------- # Calculate new position for next cabinet # ----------------------------------------- xm = 0 ym = 0 # 0 degrees if angle == 0: lastx = lastx lasty = lasty # 90 degrees if angle == pi / 2: ym = -self.cabinets[i].sX lastx = lastx - self.cabinets[i].sX - self.cabinets[i].pX lasty = lasty + self.cabinets[i].sX + self.cabinets[i].pY # 180 degrees if angle == pi: lastx -= 2 * (self.cabinets[i].sX + self.cabinets[i].pX) # 270 degrees if angle == (3 * pi) / 2: xm = self.depth - self.counterextend lastx = lastx - self.cabinets[i].sX - self.cabinets[i].pX lasty = lasty - self.cabinets[i].sX - self.cabinets[i].pX + self.cabinets[i].pY myl = mybox.location # noinspection PyUnresolvedReferences mybox.location = (myl.x + xm, myl.y + ym, myl.z) # --------------------------------------- # Save box # --------------------------------------- boxes.extend([mybox]) # refine cabinets for box in boxes: remove_doubles(box) set_normals(box) # refine baseboard for base in bases: remove_doubles(base) set_normals(base) # Create materials if self.crt_mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mat = create_diffuse_material("Cabinet_material", False, 0.8, 0.8, 0.8) for box in boxes: set_material(box, mat) return # ------------------------------------------------------------------------------ # Create cabinet box # # thickness: wood thickness # sX: Size in X axis # sY: Size in Y axis # sZ: Size in Z axis # pX: position X axis # pY: position Y axis # pZ: position Z axis # doorType: Type of door or drawers # drawers: Number of drawers # shelves: Number of shelves # gF: Glass size factor # mat: Flag for creating materials # handle: handle visibility flag # handle_model: Type of handle # handle_x: Position of handle in X axis # handle_z: Position of handle in Z axis # depth: Default depth # ------------------------------------------------------------------------------ def create_box(type_cabinet, objname, thickness, sx, sy, sz, px, py, pz, doortype, drawers, shelves, gf, mat, handle, handle_model, handle_x, handle_z, depth): myvertex = [] myfaces = [] # external faces myvertex.extend( [(0, 0, 0), (0, -sy, 0), (0, -sy, sz), (0, 0, sz), (sx, 0, 0), (sx, -sy, 0), (sx, -sy, sz), (sx, 0, sz)]) myfaces.extend([(0, 1, 2, 3), (4, 5, 6, 7), (0, 4, 7, 3), (0, 1, 5, 4), (3, 2, 6, 7)]) # internal faces myvertex.extend([(thickness, -thickness, thickness), (thickness, -sy, thickness), (thickness, -sy, sz - thickness), (thickness, -thickness, sz - thickness), (sx - thickness, -thickness, thickness), (sx - thickness, -sy, thickness), (sx - thickness, -sy, sz - thickness), (sx - thickness, -thickness, sz - thickness)]) myfaces.extend([(8, 9, 10, 11), (12, 13, 14, 15), (8, 12, 15, 11), (8, 9, 13, 12), (11, 10, 14, 15)]) myfaces.extend([(1, 9, 10, 2), (2, 6, 14, 10), (6, 5, 13, 14), (5, 1, 9, 13)]) # ----------------- # shelves # ----------------- v = 16 # vertice number if doortype != "7": # Drawers # calculate separation dist = sz - (thickness * 2) space = dist / (shelves + 1) posz1 = thickness + space for x in range(shelves): posz2 = posz1 - thickness myvertex.extend([(thickness, -thickness, posz1), (thickness, -sy, posz1), (thickness, -sy, posz2), (thickness, -thickness, posz2), (sx - thickness, -thickness, posz1), (sx - thickness, -sy, posz1), (sx - thickness, -sy, posz2), (sx - thickness, -thickness, posz2)]) myfaces.extend([(v, v + 1, v + 2, v + 3), (v + 4, v + 5, v + 6, v + 7), (v, v + 4, v + 7, v + 3), (v, v + 1, v + 5, v + 4), (v + 3, v + 2, v + 6, v + 7), (v + 1, v + 2, v + 6, v + 5)]) v += 8 posz1 += space mymesh = bpy.data.meshes.new(objname) myobject = bpy.data.objects.new(objname, mymesh) myobject.location[0] = px myobject.location[1] = py myobject.location[2] = pz bpy.context.collection.objects.link(myobject) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) # --------------------------------------- # Drawers # --------------------------------------- if doortype == "7": # Drawers # calculate separation gap = 0.001 dist = sz - (gap * drawers) space = dist / drawers posz1 = 0 for x in range(drawers): mydrawer = create_drawer("Drawer", thickness, sx, sy, space, mat, handle, handle_model, handle_z) mydrawer.location[1] = -sy mydrawer.location[2] = posz1 mydrawer.parent = myobject remove_doubles(mydrawer) set_normals(mydrawer) posz1 = posz1 + space + gap # gap # --------------------------------------- # Doors # --------------------------------------- if doortype != "99" and doortype != "7": # None or Drawers if doortype == "1" or doortype == "2" or doortype == "3" or doortype == "4" \ or doortype == "5" or doortype == "6": # single door mydoor = create_door(type_cabinet, objname + "_Door", thickness, sx, sz, doortype, gf, mat, handle, handle_model, handle_x, handle_z, 0.001) mydoor.parent = myobject mydoor.location[1] = -sy - 0.001 # add 1 mm gap remove_doubles(mydoor) set_normals(mydoor) else: # double doors if doortype == "8" or doortype == "10" or doortype == "11": # Glass or not if doortype != "11": typ = "2" else: typ = "5" # Adjust corner doors dwidth = sx / 2 if doortype == "10": dwidth = sx - depth - thickness - 0.001 mydoor1 = create_door(type_cabinet, objname + "_Door_L", thickness, dwidth, sz, typ, gf, mat, handle, handle_model, handle_x, handle_z, 0.0005) # left mydoor1.location[1] = -sy - 0.001 # add 1 mm gap mydoor1.parent = myobject remove_doubles(mydoor1) set_normals(mydoor1) if doortype == "8" or doortype == "9" or doortype == "11": # Glass or not if doortype != "11": typ = "1" else: typ = "4" # Adjust corner doors dwidth = sx / 2 if doortype == "9": dwidth = sx - depth - thickness - 0.001 mydoor2 = create_door(type_cabinet, objname + "_Door_R", thickness, dwidth, sz, typ, gf, mat, handle, handle_model, handle_x, handle_z, 0.0005) # right mydoor2.location[1] = -sy - 0.001 # add 1 mm gap mydoor2.location[0] = sx mydoor2.parent = myobject remove_doubles(mydoor2) set_normals(mydoor2) return myobject, px + sx # ------------------------------------------------------------------------------ # Create baseboard # # sX: Size in X axis # sY: Size in Y axis # sZ: Size in Z axis # mat: Flag for creating materials # bL: Flag to create left side # bR: Flag to create right side # depth: depth or position of baseboard # gap: space to close in corners # ------------------------------------------------------------------------------ def create_baseboard(objname, sx, sy, sz, mat, bl, br, depth, doortype, gap): myvertex = [] myfaces = [] p = 0 # external faces myvertex.extend( [(0, 0, 0), (0, -sy, 0), (0, -sy, sz), (0, 0, sz), (sx, 0, 0), (sx, -sy, 0), (sx, -sy, sz), (sx, 0, sz)]) myfaces.extend([(0, 1, 2, 3), (4, 5, 6, 7), (0, 4, 7, 3), (0, 1, 5, 4), (3, 2, 6, 7), (1, 5, 6, 2)]) # left side f = 8 if bl: myvertex.extend( [(0, 0, 0), (0, depth, 0), (0, depth, sz), (0, 0, sz), (sy, 0, 0), (sy, depth, 0), (sy, depth, sz), (sy, 0, sz)]) myfaces.extend( [(f, f + 1, f + 2, f + 3), (f + 4, f + 5, f + 6, f + 7), (f, f + 4, f + 7, f + 3), (f, f + 1, f + 5, f + 4), (f + 3, f + 2, f + 6, f + 7), (f + 1, f + 5, f + 6, f + 2)]) f += 8 # right side if br: p = sx - sy myvertex.extend([(p, 0, 0), (p, depth, 0), (p, depth, sz), (p, 0, sz), (p + sy, 0, 0), (p + sy, depth, 0), (p + sy, depth, sz), (p + sy, 0, sz)]) myfaces.extend( [(f, f + 1, f + 2, f + 3), (f + 4, f + 5, f + 6, f + 7), (f, f + 4, f + 7, f + 3), (f, f + 1, f + 5, f + 4), (f + 3, f + 2, f + 6, f + 7), (f + 1, f + 5, f + 6, f + 2)]) f += 8 # Corners if doortype == "9" or doortype == "10": if doortype == "9": p = depth + sy if doortype == "10": p = sx - depth - sy size = gap * -2 myvertex.extend([(p, -sy, 0), (p, size, 0), (p, size, sz), (p, -sy, sz), (p + sy, -sy, 0), (p + sy, size, 0), (p + sy, size, sz), (p + sy, -sy, sz)]) myfaces.extend( [(f, f + 1, f + 2, f + 3), (f + 4, f + 5, f + 6, f + 7), (f, f + 4, f + 7, f + 3), (f, f + 1, f + 5, f + 4), (f + 3, f + 2, f + 6, f + 7), (f + 1, f + 5, f + 6, f + 2)]) mymesh = bpy.data.meshes.new(objname) mybaseboard = bpy.data.objects.new(objname, mymesh) mybaseboard.location[0] = 0 mybaseboard.location[1] = 0 mybaseboard.location[2] = 0 bpy.context.collection.objects.link(mybaseboard) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) # Material if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mat = create_diffuse_material("Baseboard_material", False, 0.8, 0.8, 0.8) set_material(mybaseboard, mat) return mybaseboard # ------------------------------------------------------------------------------ # Create Countertop # # sX: Size in X axis # sY: Size in Y axis # sZ: Size in Z axis # mat: Flag for creating materials # doorType: Type of door # depth: Depth of the cabinets # edge: add countertop edge # ------------------------------------------------------------------------------ def create_countertop(objname, sx, sy, sz, over, mat, doortype, depth, edge): oy = 0.02 oz = 0.05 + sz myvertex = [] myfaces = [] # if corner the size is less ts = 0 tx = sx if doortype == "9": ts = sx - (sx - over - depth) tx = sx if doortype == "10": ts = 0 tx = sx - over - depth # external faces myvertex.extend([(ts, 0, 0), (ts, -sy - over, 0), (ts, -sy - over, sz), (ts, 0, sz), (tx, 0, 0), (tx, -sy - over, 0), (tx, -sy - over, sz), (tx, 0, sz)]) myfaces.extend([(0, 1, 2, 3), (4, 5, 6, 7), (0, 4, 7, 3), (0, 1, 5, 4), (3, 2, 6, 7), (1, 5, 6, 2)]) # Back ts = 0 tx = sx if doortype == "9": ts = oy if doortype == "10": tx -= oy # Add edge if edge is True: myvertex.extend([(ts, 0, sz), (ts, -oy, sz), (ts, -oy, oz), (ts, 0, oz), (tx, 0, sz), (tx, -oy, sz), (tx, -oy, oz), (tx, 0, oz)]) myfaces.extend( [(8, 9, 10, 11), (12, 13, 14, 15), (8, 12, 15, 11), (8, 9, 13, 12), (11, 10, 14, 15), (9, 13, 14, 10)]) mymesh = bpy.data.meshes.new(objname) mycountertop = bpy.data.objects.new(objname, mymesh) mycountertop.location[0] = 0 mycountertop.location[1] = 0 mycountertop.location[2] = 0 bpy.context.collection.objects.link(mycountertop) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) # Material if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mat = create_diffuse_material("countertop_material", False, 0, 0, 0, 0.2, 0.2, 0.2, 0.15) set_material(mycountertop, mat) return mycountertop # ------------------------------------------------------------------------------ # Create cabinet door # # type_cabinet: Type of cabinet (floor or wall) # objName: Name of the created object # thickness: wood thickness # sX: Size in X axis # sY: Size in Y axis # sZ: Size in Z axis # doorType: Type of door or drawers # gF: Glass size factor # mat: Flag for creating materials # handle: handle visibility flag # handle_model: Type of handle # handle_x: Position of handle in X axis # handle_z: Position of handle in Z axis # gapX: size of the horizontal gap # ------------------------------------------------------------------------------ def create_door(type_cabinet, objname, thickness, sx, sz, doortype, gf, mat, handle, handle_model, handle_x, handle_z, gapx): myvertex = [] myfaces = [] # Left open f = -1 # right if doortype == "2" or doortype == "5" or doortype == "10": f = 1 # add small gap in width sx = sx - gapx # add small gap in top zone sz -= 0.002 # External Frame myvertex.extend([(0, 0, 0), (0, -thickness, 0), (0, -thickness, sz), (0, 0, sz), (sx * f, 0, 0), (sx * f, -thickness, 0), (sx * f, -thickness, sz), (sx * f, 0, sz)]) myfaces.extend([(0, 1, 2, 3), (4, 5, 6, 7), (0, 1, 5, 4), (3, 2, 6, 7)]) # --------------- # Solid door # --------------- if doortype == "1" or doortype == "2" or doortype == "3" \ or doortype == "8" or doortype == "9" or doortype == "10": myfaces.extend([(0, 4, 7, 3), (1, 2, 6, 5)]) # --------------- # Glass door # --------------- if doortype == "4" or doortype == "5" or doortype == "6" or doortype == "11": w = sx * gf # calculate frame size W h = sz * gf # calculate frame size V myvertex.extend([(w * f, 0, h), (w * f, -thickness, h), (w * f, -thickness, sz - h), (w * f, 0, sz - h), ((sx - w) * f, 0, h), ((sx - w) * f, -thickness, h), ((sx - w) * f, -thickness, sz - h), ((sx - w) * f, 0, sz - h)]) myfaces.extend([(8, 9, 10, 11), (12, 13, 14, 15), (8, 11, 15, 12), (10, 11, 15, 14), (8, 12, 13, 9), (1, 9, 10, 2), (5, 13, 14, 6), (6, 2, 10, 14), (5, 1, 9, 13), (0, 3, 11, 8), (12, 15, 7, 4), (4, 0, 8, 12), (11, 3, 7, 15)]) mymesh = bpy.data.meshes.new(objname) mydoor = bpy.data.objects.new(objname, mymesh) if f == -1: mydoor.location[0] = sx else: mydoor.location[0] = 0 mydoor.location[1] = 0 mydoor.location[2] = 0 bpy.context.collection.objects.link(mydoor) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) # ---------------------------------------------- # Handles # RT: Put handle in right side top # LT: Put handle in left side top # RB: Put handle in right side bottom # LB: Put handle in left side bottom # T: Put handle in top side middle # B: Put handle in bottom side middle # # The position is reverse to the open direction # of the door # ---------------------------------------------- hpos = "RT" # Right by default if handle: # ----------------- # Floor units # ----------------- if type_cabinet == "1": if doortype == "1" or doortype == "4" or doortype == "9": # Right hpos = "LT" if doortype == "2" or doortype == "5" or doortype == "10": # Left hpos = "RT" if doortype == "3" or doortype == "6": hpos = "T" # ----------------- # Wall units # ----------------- if type_cabinet == "2": if doortype == "1" or doortype == "4" or doortype == "9": # Right hpos = "LB" if doortype == "2" or doortype == "5" or doortype == "10": # Left hpos = "RB" if doortype == "3" or doortype == "6": hpos = "B" create_handle(handle_model, mydoor, thickness, hpos, mat, handle_x, handle_z) if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: # Door material mat = create_diffuse_material("Door_material", False, 0.8, 0.8, 0.8, 0.279, 0.337, 0.6, 0.2) set_material(mydoor, mat) # Add Glass if doortype == "4" or doortype == "5" or doortype == "6" or doortype == "11": mat = create_glass_material("DoorGlass_material", False) mydoor.data.materials.append(mat) select_faces(mydoor, 6, True) set_material_faces(mydoor, 1) # Limit rotation axis if hpos != "T" and hpos != "TM" and hpos != "B": mydoor.lock_rotation = (True, True, False) return mydoor # ------------------------------------------------------------------------------ # Create drawers # # thickness: wood thickness # sX: Size in X axis # sY: Size in Y axis # sZ: Size in Z axis # mat: Flag for creating materials # handle: handle visibility flag # handle_model: Type of handle # handle_z: Position of handle in Z axis # ------------------------------------------------------------------------------ def create_drawer(objname, thickness, sx, sy, sz, mat, handle, handle_model, handle_z): myvertex = [] myfaces = [] # Front face myvertex.extend([(0, 0, 0), (0, -thickness, 0), (0, -thickness, sz), (0, 0, sz), (sx, 0, 0), (sx, -thickness, 0), (sx, -thickness, sz), (sx, 0, sz)]) myfaces.extend([(0, 1, 2, 3), (4, 5, 6, 7), (0, 4, 7, 3), (0, 1, 5, 4), (3, 2, 6, 7), (1, 2, 6, 5)]) # internal faces (thickness cm gap) myvertex.extend([(thickness, 0, thickness), (thickness, sy - thickness, thickness), (sx - thickness, sy - thickness, thickness), (sx - thickness, 0, thickness), (thickness * 2, 0, thickness), (thickness * 2, sy - thickness * 2, thickness), (sx - thickness * 2, sy - thickness * 2, thickness), (sx - thickness * 2, 0, thickness)]) myfaces.extend([(8, 9, 13, 12), (13, 9, 10, 14), (14, 10, 11, 15), (12, 13, 14, 15)]) h = sz * 0.7 myvertex.extend([(thickness, 0, h), (thickness, sy - thickness, h), (sx - thickness, sy - thickness, h), (sx - thickness, 0, h), (thickness * 2, 0, h), (thickness * 2, sy - thickness * 2, h), (sx - thickness * 2, sy - thickness * 2, h), (sx - thickness * 2, 0, h)]) myfaces.extend( [(16, 17, 21, 20), (21, 17, 18, 22), (22, 18, 19, 23), (8, 9, 17, 16), (9, 10, 18, 17), (10, 11, 19, 18), (12, 13, 21, 20), (13, 14, 22, 21), (14, 15, 23, 22)]) mymesh = bpy.data.meshes.new(objname) mydrawer = bpy.data.objects.new(objname, mymesh) mydrawer.location[0] = 0 mydrawer.location[1] = 0 mydrawer.location[2] = 0 bpy.context.collection.objects.link(mydrawer) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) # Handle if handle: model = handle_model # Drawers always horizontal handle, so override values if model == "1": model = "3" if model == "4": model = "2" create_handle(model, mydrawer, thickness, "TM", mat, 0, handle_z) # always in the top area/middle # Material if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mat = create_diffuse_material("Drawer_material", False, 0.8, 0.8, 0.8, 0.6, 0.6, 0.6, 0.2) set_material(mydrawer, mat) # Lock transformation mydrawer.lock_location = (True, False, True) # only Y axis return mydrawer # ------------------------------------------------------------------------------ # Create Handles # # model: handle model # myDoor: Door that has the handle # thickness: thickness of board # handle_position: position of the handle # RT: Put handle in right side top # LT: Put handle in left side top # RB: Put handle in right side bottom # LB: Put handle in left side bottom # T: Put handle in top side middle # TM: Put handle in top side middle (drawers) # B: Put handle in bottom side middle # mat: create default cycles material # handle_x: Position of handle in X axis # handle_z: Position of handle in Z axis # ------------------------------------------------------------------------------ def create_handle(model, mydoor, thickness, handle_position, mat, handle_x, handle_z): if model == "9": return None # Retry mesh data if model == "1" or model == "3": mydata = handle_model_01() elif model == "2" or model == "4": mydata = handle_model_02() elif model == "5": mydata = handle_model_05() elif model == "6": mydata = handle_model_06() elif model == "7": mydata = handle_model_07() elif model == "8": mydata = handle_model_08() else: mydata = handle_model_01() # default model # move data myvertex = mydata[0] myfaces = mydata[1] mymesh = bpy.data.meshes.new("Handle") myhandle = bpy.data.objects.new("Handle", mymesh) bpy.context.collection.objects.link(myhandle) mymesh.from_pydata(myvertex, [], myfaces) mymesh.update(calc_edges=True) # Position handle myhandle.location.y = -thickness # Calculate dimensions if model == "1" or model == "4" or model == "5" or model == "6": width = myhandle.dimensions.z / 2 height = myhandle.dimensions.x / 2 else: width = myhandle.dimensions.x / 2 height = myhandle.dimensions.z / 2 # Limit handle position to door dimensions if handle_x + width > mydoor.dimensions.x: handle_x = mydoor.dimensions.x - 0.01 if handle_z + height > mydoor.dimensions.z: handle_z = mydoor.dimensions.z - 0.01 # Position in X axis if handle_position == "LT" or handle_position == "LB": myhandle.location.x = -mydoor.dimensions.x + handle_x + width if handle_position == "RT" or handle_position == "RB": myhandle.location.x = mydoor.dimensions.x - handle_x - width # Position in Z axis if handle_position == "RT" or handle_position == "LT": if mydoor.dimensions.z - handle_z - height > 1.2: myhandle.location.z = 1.2 else: myhandle.location.z = mydoor.dimensions.z - handle_z - height if handle_position == "RB" or handle_position == "LB": myhandle.location.z = handle_z + height # Position for Middle point if handle_position == "T" or handle_position == "B": myhandle.location.x = -mydoor.dimensions.x / 2 if handle_position == "TM": myhandle.location.x = mydoor.dimensions.x / 2 if handle_position == "T" or handle_position == "TM": myhandle.location.z = mydoor.dimensions.z - handle_z - height if handle_position == "B": myhandle.location.z = handle_z - height # rotate if handle_position != "T" and handle_position != "B" and handle_position != "TM": yrot = 0 if model == "1": yrot = pi / 2 if model == "4": if handle_position == "LT" or handle_position == "LB": yrot = -pi / 2 else: yrot = pi / 2 myhandle.rotation_euler = (0, yrot, 0.0) # radians PI=180 # parent myhandle.parent = mydoor # Materials if mat and bpy.context.scene.render.engine in {'CYCLES', 'BLENDER_EEVEE'}: mat = create_glossy_material("Handle_material", False, 0.733, 0.779, 0.8, 0.733, 0.779, 0.8, 0.02) set_material(myhandle, mat) # Smooth if model == "1" or model == "3": set_smooth(myhandle) set_modifier_subsurf(myhandle) if model == "5" or model == "6" or model == "7" or model == "8": set_smooth(myhandle) return myhandle # ---------------------------------------------- # Handle model 01 # ---------------------------------------------- def handle_model_01(): # ------------------------------------ # Mesh data # ------------------------------------ minx = -0.07222598791122437 maxx = 0.07222597301006317 maxy = 6.545917585754069e-08 minz = -0.004081448074430227 maxz = 0.004081418737769127 # Vertex myvertex = [(maxx - 0.013172730803489685, -0.025110241025686264, maxz - 0.0003106782678514719), (maxx - 0.01216559112071991, -0.027320515364408493, maxz - 0.0011954230722039938), (maxx - 0.011492643505334854, -0.028797375038266182, maxz - 0.0025195349007844925), (maxx - 0.011256333440542221, -0.029315980151295662, maxz - 0.0040814326939546675), (maxx - 0.011492643505334854, -0.02879737690091133, minz + 0.0025195364141836762), (maxx - 0.01216559112071991, -0.02732051908969879, minz + 0.0011954230722039938), (maxx - 0.013172730803489685, -0.025110244750976562, minz + 0.0003106798976659775), (maxx - 0.014360729604959488, -0.022503048181533813, minz), (maxx - 0.01554873213171959, -0.019895851612091064, minz + 0.00031067943200469017), (maxx - 0.016555871814489365, -0.017685577273368835, minz + 0.001195424236357212), (maxx - 0.01722881942987442, -0.016208721324801445, minz + 0.0025195354828611016), (maxx - 0.017465125769376755, -0.015690118074417114, minz + 0.00408143286244389), (maxx - 0.01722881942987442, -0.016208721324801445, maxz - 0.0025195367634296417), (maxx - 0.016555871814489365, -0.017685577273368835, maxz - 0.0011954237706959248), (maxx - 0.01554873213171959, -0.019895853474736214, maxz - 0.00031068059615790844), (maxx - 0.014360729604959488, -0.022503050044178963, maxz), (maxx - 0.00908602774143219, -0.022446047514677048, maxz - 0.0003106782678514719), (maxx - 0.007382020354270935, -0.024176951497793198, maxz - 0.0011954226065427065), (maxx - 0.006243452429771423, -0.025333505123853683, maxz - 0.002519535133615136), (maxx - 0.005843624472618103, -0.025739632546901703, maxz - 0.004081432702012222), (maxx - 0.006243452429771423, -0.025333506986498833, minz + 0.0025195362977683544), (maxx - 0.007382020354270935, -0.024176953360438347, minz + 0.0011954230722039938), (maxx - 0.00908602774143219, -0.022446051239967346, minz + 0.0003106798976659775), (maxx - 0.011096026748418808, -0.020404310896992683, minz), (maxx - 0.013106036931276321, -0.01836257427930832, minz + 0.0003106796648353338), (maxx - 0.014810033142566681, -0.01663167029619217, minz + 0.001195424236357212), (maxx - 0.015948612242937088, -0.015475118532776833, minz + 0.0025195355992764235), (maxx - 0.016348421573638916, -0.015068991109728813, minz + 0.004081432861045897), (maxx - 0.015948612242937088, -0.015475118532776833, maxz - 0.00251953664701432), (maxx - 0.014810033142566681, -0.01663167029619217, maxz - 0.0011954233050346375), (maxx - 0.013106033205986023, -0.01836257241666317, maxz - 0.0003106803633272648), (maxx - 0.011096026748418808, -0.020404312759637833, maxz - 4.656612873077393e-10), (maxx - 0.004618480801582336, -0.01468262542039156, maxz - 0.0008190707303583622), (maxx - 0.002191290259361267, -0.014774298295378685, maxz - 0.001584529411047697), (maxx - 0.0005694925785064697, -0.014835557900369167, maxz - 0.002730117877945304), (maxx, -0.014857066795229912, maxz - 0.004081432337202706), (maxx - 0.0005694925785064697, -0.014835558831691742, minz + 0.002730119973421097), (maxx - 0.002191290259361267, -0.014774300158023834, minz + 0.001584530808031559), (maxx - 0.004618480801582336, -0.01468262542039156, minz + 0.0008190732914954424), (maxx - 0.0074815452098846436, -0.014574488624930382, minz + 0.000550281023606658), (maxx - 0.010344602167606354, -0.014466354623436928, minz + 0.0008190732914954424), (maxx - 0.012771788984537125, -0.01437467709183693, minz + 0.0015845317393541336), (maxx - 0.014393582940101624, -0.01431342400610447, minz + 0.002730119158513844), (maxx - 0.014963079243898392, -0.014291912317276001, maxz - 0.004081433403984924), (maxx - 0.014393582940101624, -0.01431342400610447, maxz - 0.0027301193913444877), (maxx - 0.012771788984537125, -0.014374678023159504, maxz - 0.0015845298767089844), (maxx - 0.010344602167606354, -0.014466352760791779, maxz - 0.0008190723601728678), (maxx - 0.0074815452098846436, -0.014574489556252956, maxz - 0.0005502800922840834), (maxx - 0.004618480801582336, maxy - 2.029310053330846e-11, maxz - 0.0008190718945115805), (maxx - 0.002191290259361267, maxy - 7.808864666003501e-11, maxz - 0.0015845305752009153), (maxx - 0.0005694925785064697, maxy - 1.645759084567544e-10, maxz - 0.002730119042098522), (maxx, maxy - 2.665956344571896e-10, minz + 0.004081433353314345), (maxx - 0.0005694925785064697, maxy - 3.686153604576248e-10, minz + 0.0027301188092678785), (maxx - 0.002191290259361267, maxy - 4.5510972768170177e-10, minz + 0.0015845296438783407), (maxx - 0.004618480801582336, maxy - 5.128981683810707e-10, minz + 0.0008190721273422241), (maxx - 0.0074815452098846436, maxy - 5.331912689143792e-10, minz + 0.0005502798594534397), (maxx - 0.010344602167606354, maxy - 5.128981683810707e-10, minz + 0.0008190721273422241), (maxx - 0.012771788984537125, maxy - 4.5510972768170177e-10, minz + 0.0015845305752009153), (maxx - 0.014393582940101624, maxy - 3.686153604576248e-10, minz + 0.0027301181107759476), (maxx - 0.014963079243898392, maxy - 2.665956344571896e-10, minz + 0.00408143232919933), (maxx - 0.014393582940101624, maxy - 1.645759084567544e-10, maxz - 0.002730120439082384), (maxx - 0.012771788984537125, maxy - 7.808864666003501e-11, maxz - 0.0015845310408622026), (maxx - 0.010344602167606354, maxy - 2.029310053330846e-11, maxz - 0.000819073524326086), (maxx - 0.0074815452098846436, maxy, maxz - 0.0005502812564373016), (minx + 0.013172738254070282, -0.025110241025686264, maxz - 0.0003106782678514719), (minx + 0.012165598571300507, -0.027320515364408493, maxz - 0.0011954230722039938), (minx + 0.011492650955915451, -0.028797375038266182, maxz - 0.0025195349007844925), (minx + 0.011256340891122818, -0.029315980151295662, maxz - 0.0040814326939546675), (minx + 0.011492650955915451, -0.02879737690091133, minz + 0.0025195364141836762), (minx + 0.012165598571300507, -0.02732051908969879, minz + 0.0011954230722039938), (minx + 0.013172738254070282, -0.025110244750976562, minz + 0.0003106798976659775), (minx + 0.014360737055540085, -0.022503048181533813, minz), (minx + 0.015548739582300186, -0.019895851612091064, minz + 0.00031067943200469017), (minx + 0.01655587926506996, -0.017685577273368835, minz + 0.001195424236357212), (minx + 0.017228826880455017, -0.016208721324801445, minz + 0.0025195354828611016), (minx + 0.01746513321995735, -0.015690118074417114, minz + 0.00408143286244389), (minx + 0.017228826880455017, -0.016208721324801445, maxz - 0.0025195367634296417), (minx + 0.01655587926506996, -0.017685577273368835, maxz - 0.0011954237706959248), (minx + 0.015548739582300186, -0.019895853474736214, maxz - 0.00031068059615790844), (minx + 0.014360737055540085, -0.022503050044178963, maxz), (maxx - 0.07222597673535347, -0.022503051906824112, maxz), (maxx - 0.07222597673535347, -0.019637949764728546, maxz - 0.00031068059615790844), (maxx - 0.07222597673535347, -0.01720903068780899, maxz - 0.0011954237706959248), (maxx - 0.07222597673535347, -0.015586081892251968, maxz - 0.0025195368798449636), (maxx - 0.07222597673535347, -0.015016178600490093, minz + 0.004081432688119335), (maxx - 0.07222597673535347, -0.015586081892251968, minz + 0.00251953536644578), (maxx - 0.07222597673535347, -0.01720903068780899, minz + 0.001195424236357212), (maxx - 0.07222597673535347, -0.019637947902083397, minz + 0.00031067943200469017), (maxx - 0.07222597673535347, -0.022503051906824112, minz), (maxx - 0.07222597673535347, -0.025368154048919678, minz + 0.0003106798976659775), (maxx - 0.07222597673535347, -0.027797073125839233, minz + 0.0011954230722039938), (maxx - 0.07222597673535347, -0.029420025646686554, minz + 0.0025195364141836762), (maxx - 0.07222597673535347, -0.029989928007125854, maxz - 0.004081432643072702), (maxx - 0.07222597673535347, -0.029420021921396255, maxz - 0.0025195349007844925), (maxx - 0.07222597673535347, -0.027797069400548935, maxz - 0.0011954230722039938), (maxx - 0.07222597673535347, -0.025368154048919678, maxz - 0.0003106782678514719), (minx + 0.00908602774143219, -0.022446047514677048, maxz - 0.0003106782678514719), (minx + 0.007382035255432129, -0.024176951497793198, maxz - 0.0011954226065427065), (minx + 0.006243467330932617, -0.025333505123853683, maxz - 0.002519535133615136), (minx + 0.005843639373779297, -0.025739632546901703, maxz - 0.004081432702012222), (minx + 0.006243467330932617, -0.025333506986498833, minz + 0.0025195362977683544), (minx + 0.007382035255432129, -0.024176953360438347, minz + 0.0011954230722039938), (minx + 0.00908602774143219, -0.022446051239967346, minz + 0.0003106798976659775), (minx + 0.011096034198999405, -0.020404310896992683, minz), (minx + 0.013106044381856918, -0.01836257427930832, minz + 0.0003106796648353338), (minx + 0.014810040593147278, -0.01663167029619217, minz + 0.001195424236357212), (minx + 0.015948619693517685, -0.015475118532776833, minz + 0.0025195355992764235), (minx + 0.016348429024219513, -0.015068991109728813, minz + 0.004081432861045897), (minx + 0.015948619693517685, -0.015475118532776833, maxz - 0.00251953664701432), (minx + 0.014810040593147278, -0.01663167029619217, maxz - 0.0011954233050346375), (minx + 0.01310604065656662, -0.01836257241666317, maxz - 0.0003106803633272648), (minx + 0.011096034198999405, -0.020404312759637833, maxz - 4.656612873077393e-10), (minx + 0.004618480801582336, -0.01468262542039156, maxz - 0.0008190707303583622), (minx + 0.002191305160522461, -0.014774298295378685, maxz - 0.001584529411047697), (minx + 0.0005695074796676636, -0.014835557900369167, maxz - 0.002730117877945304), (minx, -0.014857066795229912, maxz - 0.004081432337202706), (minx + 0.0005694925785064697, -0.014835558831691742, minz + 0.002730119973421097), (minx + 0.002191290259361267, -0.014774300158023834, minz + 0.001584530808031559), (minx + 0.004618480801582336, -0.01468262542039156, minz + 0.0008190732914954424), (minx + 0.0074815452098846436, -0.014574488624930382, minz + 0.000550281023606658), (minx + 0.01034460961818695, -0.014466354623436928, minz + 0.0008190732914954424), (minx + 0.012771796435117722, -0.01437467709183693, minz + 0.0015845317393541336), (minx + 0.01439359039068222, -0.01431342400610447, minz + 0.002730119158513844), (minx + 0.014963086694478989, -0.014291912317276001, maxz - 0.004081433403984924), (minx + 0.01439359039068222, -0.01431342400610447, maxz - 0.0027301193913444877), (minx + 0.012771796435117722, -0.014374678023159504, maxz - 0.0015845298767089844), (minx + 0.01034460961818695, -0.014466352760791779, maxz - 0.0008190723601728678), (minx + 0.0074815452098846436, -0.014574489556252956, maxz - 0.0005502800922840834), (minx + 0.004618480801582336, maxy - 2.029310053330846e-11, maxz - 0.0008190718945115805), (minx + 0.002191305160522461, maxy - 7.808864666003501e-11, maxz - 0.0015845305752009153), (minx + 0.0005695074796676636, maxy - 1.645759084567544e-10, maxz - 0.002730119042098522), (minx, maxy - 2.665956344571896e-10, minz + 0.004081433353314345), (minx + 0.0005694925785064697, maxy - 3.686153604576248e-10, minz + 0.0027301188092678785), (minx + 0.002191290259361267, maxy - 4.5510972768170177e-10, minz + 0.0015845296438783407), (minx + 0.004618480801582336, maxy - 5.128981683810707e-10, minz + 0.0008190721273422241), (minx + 0.0074815452098846436, maxy - 5.331912689143792e-10, minz + 0.0005502798594534397), (minx + 0.01034460961818695, maxy - 5.128981683810707e-10, minz + 0.0008190721273422241), (minx + 0.012771796435117722, maxy - 4.5510972768170177e-10, minz + 0.0015845305752009153), (minx + 0.01439359039068222, maxy - 3.686153604576248e-10, minz + 0.0027301181107759476), (minx + 0.014963086694478989, maxy - 2.665956344571896e-10, minz + 0.00408143232919933), (minx + 0.01439359039068222, maxy - 1.645759084567544e-10, maxz - 0.002730120439082384), (minx + 0.012771796435117722, maxy - 7.808864666003501e-11, maxz - 0.0015845310408622026), (minx + 0.01034460961818695, maxy - 2.029310053330846e-11, maxz - 0.000819073524326086), (minx + 0.0074815452098846436, maxy, maxz - 0.0005502812564373016)] # Faces myfaces = [(90, 89, 6, 5), (88, 87, 8, 7), (86, 85, 10, 9), (84, 83, 12, 11), (80, 95, 0, 15), (82, 81, 14, 13), (93, 92, 3, 2), (91, 90, 5, 4), (89, 88, 7, 6), (87, 86, 9, 8), (85, 84, 11, 10), (95, 94, 1, 0), (83, 82, 13, 12), (94, 93, 2, 1), (81, 80, 15, 14), (92, 91, 4, 3), (2, 3, 19, 18), (13, 14, 30, 29), (15, 0, 16, 31), (11, 12, 28, 27), (9, 10, 26, 25), (7, 8, 24, 23), (5, 6, 22, 21), (3, 4, 20, 19), (14, 15, 31, 30), (1, 2, 18, 17), (12, 13, 29, 28), (0, 1, 17, 16), (10, 11, 27, 26), (8, 9, 25, 24), (6, 7, 23, 22), (4, 5, 21, 20), (19, 20, 36, 35), (30, 31, 47, 46), (17, 18, 34, 33), (28, 29, 45, 44), (16, 17, 33, 32), (26, 27, 43, 42), (24, 25, 41, 40), (22, 23, 39, 38), (20, 21, 37, 36), (18, 19, 35, 34), (29, 30, 46, 45), (31, 16, 32, 47), (27, 28, 44, 43), (25, 26, 42, 41), (23, 24, 40, 39), (21, 22, 38, 37), (36, 37, 53, 52), (34, 35, 51, 50), (45, 46, 62, 61), (47, 32, 48, 63), (43, 44, 60, 59), (41, 42, 58, 57), (39, 40, 56, 55), (37, 38, 54, 53), (35, 36, 52, 51), (46, 47, 63, 62), (33, 34, 50, 49), (44, 45, 61, 60), (32, 33, 49, 48), (42, 43, 59, 58), (40, 41, 57, 56), (38, 39, 55, 54), (90, 69, 70, 89), (88, 71, 72, 87), (86, 73, 74, 85), (84, 75, 76, 83), (80, 79, 64, 95), (82, 77, 78, 81), (93, 66, 67, 92), (91, 68, 69, 90), (89, 70, 71, 88), (87, 72, 73, 86), (85, 74, 75, 84), (95, 64, 65, 94), (83, 76, 77, 82), (94, 65, 66, 93), (81, 78, 79, 80), (92, 67, 68, 91), (66, 98, 99, 67), (77, 109, 110, 78), (79, 111, 96, 64), (75, 107, 108, 76), (73, 105, 106, 74), (71, 103, 104, 72), (69, 101, 102, 70), (67, 99, 100, 68), (78, 110, 111, 79), (65, 97, 98, 66), (76, 108, 109, 77), (64, 96, 97, 65), (74, 106, 107, 75), (72, 104, 105, 73), (70, 102, 103, 71), (68, 100, 101, 69), (99, 115, 116, 100), (110, 126, 127, 111), (97, 113, 114, 98), (108, 124, 125, 109), (96, 112, 113, 97), (106, 122, 123, 107), (104, 120, 121, 105), (102, 118, 119, 103), (100, 116, 117, 101), (98, 114, 115, 99), (109, 125, 126, 110), (111, 127, 112, 96), (107, 123, 124, 108), (105, 121, 122, 106), (103, 119, 120, 104), (101, 117, 118, 102), (116, 132, 133, 117), (114, 130, 131, 115), (125, 141, 142, 126), (127, 143, 128, 112), (123, 139, 140, 124), (121, 137, 138, 122), (119, 135, 136, 120), (117, 133, 134, 118), (115, 131, 132, 116), (126, 142, 143, 127), (113, 129, 130, 114), (124, 140, 141, 125), (112, 128, 129, 113), (122, 138, 139, 123), (120, 136, 137, 121), (118, 134, 135, 119)] return myvertex, myfaces # ---------------------------------------------- # Handle model 02 # ---------------------------------------------- def handle_model_02(): # ------------------------------------ # Mesh data # ------------------------------------ minx = -0.09079331159591675 maxx = 0.09079315513372421 maxy = 0 minz = -0.018363870680332184 maxz = 0.0015741242095828056 # Vertex myvertex = [(maxx, maxy, maxz - 9.313225746154785e-10), (maxx, maxy, maxz - 0.0031482474878430367), (maxx, -0.02426009438931942, maxz - 0.0031482460908591747), (maxx, -0.02426009438931942, maxz), (maxx, -0.02727462910115719, maxz), (maxx, -0.02727462910115719, maxz - 0.0031482460908591747), (maxx, -0.02426009625196457, minz + 0.002603583037853241), (maxx, -0.027274630963802338, minz + 0.002603583037853241), (maxx, -0.02426009625196457, minz), (maxx, -0.027274630963802338, minz), (maxx, -0.021415365859866142, minz + 0.002603583037853241), (maxx, -0.02141536772251129, minz), (maxx - 0.0907932324437013, -0.02426009438931942, maxz - 0.0031482460908591747), (maxx - 0.0907932324437013, -0.02426009438931942, maxz), (minx, maxy, maxz - 9.313225746154785e-10), (minx, maxy, maxz - 0.0031482474878430367), (minx, -0.02426009438931942, maxz - 0.0031482460908591747), (minx, -0.02426009438931942, maxz), (minx, -0.02727462910115719, maxz), (minx, -0.02727462910115719, maxz - 0.0031482460908591747), (maxx - 0.0907932324437013, -0.02727462910115719, maxz), (maxx - 0.0907932324437013, maxy, maxz - 9.313225746154785e-10), (maxx - 0.0907932324437013, -0.02727462910115719, maxz - 0.0031482460908591747), (maxx - 0.0907932324437013, maxy, maxz - 0.0031482474878430367), (maxx - 0.0907932324437013, -0.02426009625196457, minz + 0.002603583037853241), (minx, -0.02426009625196457, minz + 0.002603583037853241), (minx, -0.027274630963802338, minz + 0.002603583037853241), (maxx - 0.0907932324437013, -0.027274630963802338, minz + 0.002603583037853241), (maxx - 0.0907932324437013, -0.02426009625196457, minz), (minx, -0.02426009625196457, minz), (minx, -0.027274630963802338, minz), (maxx - 0.0907932324437013, -0.027274630963802338, minz), (maxx - 0.0907932324437013, -0.021415365859866142, minz + 0.002603583037853241), (minx, -0.021415365859866142, minz + 0.002603583037853241), (maxx - 0.0907932324437013, -0.02141536772251129, minz), (minx, -0.02141536772251129, minz)] # Faces myfaces = [(2, 5, 7, 6), (13, 3, 0, 21), (3, 2, 1, 0), (7, 27, 31, 9), (23, 21, 0, 1), (5, 22, 27, 7), (4, 5, 2, 3), (2, 12, 23, 1), (20, 4, 3, 13), (5, 4, 20, 22), (12, 2, 6, 24), (9, 31, 28, 8), (6, 7, 9, 8), (32, 10, 11, 34), (6, 8, 11, 10), (8, 28, 34, 11), (24, 6, 10, 32), (16, 25, 26, 19), (13, 21, 14, 17), (17, 14, 15, 16), (26, 30, 31, 27), (23, 15, 14, 21), (19, 26, 27, 22), (18, 17, 16, 19), (16, 15, 23, 12), (20, 13, 17, 18), (19, 22, 20, 18), (22, 27, 24, 12), (12, 24, 25, 16), (30, 29, 28, 31), (25, 29, 30, 26), (27, 31, 28, 24), (28, 34, 32, 24), (32, 34, 35, 33), (25, 33, 35, 29), (29, 35, 34, 28), (24, 32, 33, 25)] return myvertex, myfaces # ---------------------------------------------- # Handle model 05 # ---------------------------------------------- def handle_model_05(): # ------------------------------------ # Mesh data # ------------------------------------ minx = -0.012873317115008831 maxx = 0.012873315252363682 maxy = 6.581399869531879e-10 minz = -0.012873317115008831 maxz = 0.012873315252363682 # Vertex myvertex = [(maxx - 0.01287331552838386, maxy, maxz - 0.008879524189978838), (maxx - 0.01287331552838386, -0.004451401997357607, maxz - 0.008879524189978838), (maxx - 0.012094165373127908, maxy, maxz - 0.008956264238804579), (maxx - 0.012094165373127908, -0.004451401997357607, maxz - 0.008956263773143291), (maxx - 0.011344957514666021, maxy, maxz - 0.00918353395536542), (maxx - 0.011344957514666021, -0.004451401997357607, maxz - 0.009183533489704132), (maxx - 0.010654483688995242, maxy, maxz - 0.00955259962938726), (maxx - 0.010654483688995242, -0.004451401997357607, maxz - 0.009552599163725972), (maxx - 0.010049278382211924, maxy, maxz - 0.010049279080703855), (maxx - 0.010049278382211924, -0.004451401997357607, maxz - 0.010049278382211924), (maxx - 0.009552599163725972, maxy - 6.581399869531879e-10, maxz - 0.01065448485314846), (maxx - 0.009552599163725972, -0.004451401997357607, maxz - 0.01065448415465653), (maxx - 0.009183533489704132, maxy - 6.581399869531879e-10, maxz - 0.011344958445988595), (maxx - 0.009183533489704132, -0.004451401997357607, maxz - 0.011344957863911986), (maxx - 0.008956263773143291, maxy - 6.581399869531879e-10, maxz - 0.0120941661298275), (maxx - 0.008956263773143291, -0.004451401997357607, maxz - 0.012094165605958551), (maxx - 0.008879524189978838, maxy - 6.581399869531879e-10, maxz - 0.012873315995101497), (maxx - 0.008879524189978838, -0.004451401997357607, maxz - 0.012873315519886824), (maxx - 0.008956263307482004, maxy - 6.581399869531879e-10, minz + 0.012094166420865804), (maxx - 0.008956263307482004, -0.004451401997357607, minz + 0.01209416682831943), (maxx - 0.009183533024042845, maxy - 6.581399869531879e-10, minz + 0.011344958795234561), (maxx - 0.009183533024042845, -0.004451401997357607, minz + 0.011344959260895848), (maxx - 0.009552599163725972, maxy - 6.581399869531879e-10, minz + 0.01065448415465653), (maxx - 0.009552599163725972, -0.004451401997357607, minz + 0.01065448485314846), (maxx - 0.010049278382211924, -6.581399869531879e-10, minz + 0.010049278847873211), (maxx - 0.010049278382211924, -0.004451401997357607, minz + 0.010049279546365142), (maxx - 0.010654483921825886, -6.581399869531879e-10, minz + 0.00955259962938726), (maxx - 0.010654483921825886, -0.004451401997357607, minz + 0.009552600095048547), (maxx - 0.011344958213157952, -6.581399869531879e-10, minz + 0.009183533256873488), (maxx - 0.011344958213157952, -0.004451401997357607, minz + 0.009183533489704132), (maxx - 0.012094166362658143, -6.581399869531879e-10, minz + 0.008956264238804579), (maxx - 0.012094166362658143, -0.004451401997357607, minz + 0.008956264238804579), (minx + 0.012873315537646146, -6.581399869531879e-10, minz + 0.008879524655640125), (minx + 0.012873315537646146, -0.004451401997357607, minz + 0.008879525121301413), (minx + 0.012094165082089603, -6.581399869531879e-10, minz + 0.008956264238804579), (minx + 0.012094165082089603, -0.004451401997357607, minz + 0.008956264704465866), (minx + 0.011344957165420055, -6.581399869531879e-10, minz + 0.009183534886687994), (minx + 0.011344957165420055, -0.004451401997357607, minz + 0.009183535352349281), (minx + 0.010654483223333955, -6.581399869531879e-10, minz + 0.009552601026371121), (minx + 0.010654483223333955, -0.004451401997357607, minz + 0.009552601724863052), (minx + 0.010049277916550636, -6.581399869531879e-10, minz + 0.010049280477687716), (minx + 0.010049277916550636, -0.004451401997357607, minz + 0.010049281176179647), (minx + 0.009552598698064685, maxy - 6.581399869531879e-10, minz + 0.010654486482962966), (minx + 0.009552598698064685, -0.004451401997357607, minz + 0.010654486948624253), (minx + 0.009183533024042845, maxy - 6.581399869531879e-10, minz + 0.011344961123540998), (minx + 0.009183533024042845, -0.004451401997357607, minz + 0.011344961589202285), (minx + 0.008956264238804579, maxy - 6.581399869531879e-10, minz + 0.01209416938945651), (minx + 0.008956264238804579, -0.004451401997357607, minz + 0.012094169855117798), (minx + 0.008879525121301413, maxy - 6.581399869531879e-10, maxz - 0.012873312440222273), (minx + 0.008879525121301413, -0.004451401997357607, maxz - 0.012873311965007517), (minx + 0.008956265170127153, maxy - 6.581399869531879e-10, maxz - 0.012094162055291235), (minx + 0.008956265170127153, -0.004451401997357607, maxz - 0.012094161589629948), (minx + 0.009183535818010569, maxy - 6.581399869531879e-10, maxz - 0.01134495425503701), (minx + 0.009183535818010569, -0.004451401997357607, maxz - 0.011344953789375722), (minx + 0.009552602656185627, maxy - 6.581399869531879e-10, maxz - 0.010654480429366231), (minx + 0.009552602656185627, -0.004451401997357607, maxz - 0.010654479963704944), (minx + 0.01004928327165544, maxy, maxz - 0.010049275355413556), (minx + 0.01004928327165544, -0.004451401997357607, maxz - 0.010049275122582912), (minx + 0.010654489509761333, maxy, maxz - 0.009552596602588892), (minx + 0.010654489509761333, -0.004451401997357607, maxz - 0.009552596136927605), (minx + 0.011344964150339365, maxy, maxz - 0.00918353139422834), (minx + 0.011344964150339365, -0.004451401997357607, maxz - 0.009183531161397696), (minx + 0.012094172765500844, maxy, maxz - 0.008956263307482004), (minx + 0.012094172765500844, -0.004451401997357607, maxz - 0.00895626237615943), (minx + 0.01287331571475725, -0.01000460609793663, maxz), (maxx - 0.010361857246607542, -0.01000460609793663, maxz - 0.0002473592758178711), (maxx - 0.00794691126793623, -0.01000460609793663, maxz - 0.0009799236431717873), (maxx - 0.005721285007894039, -0.01000460609793663, maxz - 0.002169545739889145), (maxx - 0.0037705078721046448, -0.01000460609793663, maxz - 0.0037705088034272194), (maxx - 0.002169545739889145, -0.01000460609793663, maxz - 0.005721286870539188), (maxx - 0.0009799227118492126, -0.010004607029259205, maxz - 0.007946912664920092), (maxx - 0.00024735741317272186, -0.010004607029259205, maxz - 0.010361858177930117), (maxx, -0.010004607029259205, minz + 0.012873315524888684), (maxx - 0.00024735648185014725, -0.010004607029259205, minz + 0.010361856315284967), (maxx - 0.0009799227118492126, -0.010004607029259205, minz + 0.007946911733597517), (maxx - 0.002169545739889145, -0.01000460796058178, minz + 0.005721283610910177), (maxx - 0.0037705078721046448, -0.01000460796058178, minz + 0.003770505078136921), (maxx - 0.005721286404877901, -0.01000460796058178, minz + 0.002169542945921421), (maxx - 0.007946913596242666, -0.01000460796058178, minz + 0.0009799208492040634), (maxx - 0.010361860506236553, -0.01000460796058178, minz + 0.00024735648185014725), (minx + 0.012873311520098518, -0.01000460796058178, minz), (minx + 0.010361851193010807, -0.01000460796058178, minz + 0.00024735648185014725), (minx + 0.007946905214339495, -0.01000460796058178, minz + 0.0009799255058169365), (minx + 0.005721278488636017, -0.01000460796058178, minz + 0.0021695485338568687), (minx + 0.003770500421524048, -0.01000460796058178, minz + 0.0037705106660723686), (minx + 0.002169538289308548, -0.01000460796058178, minz + 0.005721290595829487), (minx + 0.0009799189865589142, -0.010004607029259205, minz + 0.007946919184178114), (minx + 0.000247354619204998, -0.010004607029259205, minz + 0.010361866094172001), (minx, -0.010004607029259205, maxz - 0.012873305383929612), (minx + 0.0002473592758178711, -0.010004607029259205, maxz - 0.010361845139414072), (minx + 0.0009799282997846603, -0.010004607029259205, maxz - 0.007946899626404047), (minx + 0.0021695513278245926, -0.01000460609793663, maxz - 0.005721272900700569), (minx + 0.003770517185330391, -0.01000460609793663, maxz - 0.003770497627556324), (minx + 0.005721298512071371, -0.01000460609793663, maxz - 0.0021695364266633987), (minx + 0.00794692849740386, -0.01000460609793663, maxz - 0.0009799161925911903), (minx + 0.010361875407397747, -0.01000460609793663, maxz - 0.000247354619204998), (minx + 0.01287331571475725, -0.012252332642674446, maxz), (maxx - 0.010361857246607542, -0.012252332642674446, maxz - 0.0002473592758178711), (maxx - 0.00794691126793623, -0.012252332642674446, maxz - 0.0009799236431717873), (maxx - 0.005721285007894039, -0.012252332642674446, maxz - 0.002169545739889145), (maxx - 0.0037705078721046448, -0.012252332642674446, maxz - 0.0037705088034272194), (maxx - 0.002169545739889145, -0.012252332642674446, maxz - 0.005721286870539188), (maxx - 0.0009799227118492126, -0.012252334505319595, maxz - 0.007946912664920092), (maxx - 0.00024735741317272186, -0.012252334505319595, maxz - 0.010361858177930117), (maxx, -0.012252334505319595, minz + 0.012873315638136429), (maxx - 0.00024735648185014725, -0.012252334505319595, minz + 0.010361856315284967), (maxx - 0.0009799227118492126, -0.012252334505319595, minz + 0.007946911733597517), (maxx - 0.002169545739889145, -0.01225233543664217, minz + 0.005721283610910177), (maxx - 0.0037705078721046448, -0.01225233543664217, minz + 0.003770505078136921), (maxx - 0.005721286404877901, -0.01225233543664217, minz + 0.002169542945921421), (maxx - 0.007946913596242666, -0.01225233543664217, minz + 0.0009799208492040634), (maxx - 0.010361860506236553, -0.01225233543664217, minz + 0.00024735648185014725), (minx + 0.012873311520098518, -0.01225233543664217, minz), (minx + 0.010361851193010807, -0.01225233543664217, minz + 0.00024735648185014725), (minx + 0.007946905214339495, -0.01225233543664217, minz + 0.0009799255058169365), (minx + 0.005721278488636017, -0.01225233543664217, minz + 0.0021695485338568687), (minx + 0.003770500421524048, -0.01225233543664217, minz + 0.0037705106660723686), (minx + 0.002169538289308548, -0.01225233543664217, minz + 0.005721290595829487), (minx + 0.0009799189865589142, -0.012252334505319595, minz + 0.007946919184178114), (minx + 0.000247354619204998, -0.012252334505319595, minz + 0.010361866094172001), (minx, -0.012252334505319595, maxz - 0.012873305270680646), (minx + 0.0002473592758178711, -0.012252334505319595, maxz - 0.010361845139414072), (minx + 0.0009799282997846603, -0.012252334505319595, maxz - 0.007946899626404047), (minx + 0.0021695513278245926, -0.012252332642674446, maxz - 0.005721272900700569), (minx + 0.003770517185330391, -0.012252332642674446, maxz - 0.003770497627556324), (minx + 0.005721298512071371, -0.012252332642674446, maxz - 0.0021695364266633987), (minx + 0.00794692849740386, -0.012252332642674446, maxz - 0.0009799161925911903), (minx + 0.010361875407397747, -0.012252332642674446, maxz - 0.000247354619204998), (minx + 0.01287331597587027, -0.012252331711351871, maxz - 0.006033936515450478), (maxx - 0.011539019644260406, -0.012252331711351871, maxz - 0.006165354512631893), (maxx - 0.010255999164655805, -0.012252331711351871, maxz - 0.006554554216563702), (maxx - 0.009073560824617743, -0.012252332642674446, maxz - 0.007186579518020153), (maxx - 0.008037144783884287, -0.012252332642674446, maxz - 0.008037144318223), (maxx - 0.007186580915004015, -0.012252332642674446, maxz - 0.009073559893295169), (maxx - 0.006554554216563702, -0.012252332642674446, maxz - 0.010255998698994517), (maxx - 0.006165354512631893, -0.012252332642674446, maxz - 0.011539018712937832), (maxx - 0.006033937446773052, -0.012252332642674446, maxz - 0.012873314963572108), (maxx - 0.0061653535813093185, -0.012252332642674446, minz + 0.011539021041244268), (maxx - 0.006554554216563702, -0.012252332642674446, minz + 0.01025600079447031), (maxx - 0.007186580915004015, -0.012252332642674446, minz + 0.009073561755940318), (maxx - 0.008037144783884287, -0.012252332642674446, minz + 0.008037145715206861), (maxx - 0.009073561057448387, -0.012252332642674446, minz + 0.007186580449342728), (maxx - 0.010256000561639667, -0.012252334505319595, minz + 0.006554553750902414), (maxx - 0.011539021274074912, -0.012252334505319595, minz + 0.0061653549782931805), (minx + 0.012873313747317816, -0.012252334505319595, minz + 0.006033938378095627), (minx + 0.01153901673387736, -0.012252334505319595, minz + 0.0061653549782931805), (minx + 0.01025599567219615, -0.012252334505319595, minz + 0.0065545570105314255), (minx + 0.009073557797819376, -0.012252332642674446, minz + 0.007186583708971739), (minx + 0.008037141524255276, -0.012252332642674446, minz + 0.008037148043513298), (minx + 0.007186576724052429, -0.012252332642674446, minz + 0.00907356571406126), (minx + 0.006554551888257265, -0.012252332642674446, minz + 0.010256004752591252), (minx + 0.006165352184325457, -0.012252332642674446, minz + 0.011539026163518429), (minx + 0.006033936981111765, -0.012252332642674446, maxz - 0.012873308875832823), (minx + 0.006165355443954468, -0.012252332642674446, maxz - 0.011539011728018522), (minx + 0.006554556544870138, -0.012252332642674446, maxz - 0.010255991481244564), (minx + 0.007186584174633026, -0.012252332642674446, maxz - 0.00907355290837586), (minx + 0.008037150837481022, -0.012252332642674446, maxz - 0.008037138264626265), (minx + 0.009073568508028984, -0.012252332642674446, maxz - 0.007186574395745993), (minx + 0.010256008245050907, -0.012252331711351871, maxz - 0.006554548628628254), (minx + 0.011539029655978084, -0.012252331711351871, maxz - 0.006165351718664169), (maxx - 0.01237887132447213, -0.012252329848706722, maxz - 0.010387574089691043), (maxx - 0.011465257033705711, -0.012252329848706722, maxz - 0.01076600537635386), (maxx - 0.01108119694981724, -0.012252329848706722, maxz - 0.011081195320002735), (maxx - 0.010766007238999009, -0.012252329848706722, maxz - 0.011465255171060562), (maxx - 0.010531799867749214, -0.012252329848706722, maxz - 0.01190342620247975), (maxx - 0.01108119694981724, -0.012252329848706722, minz + 0.01108119951095432), (maxx - 0.011903428356163204, -0.012252329848706722, minz + 0.010531801730394363), (minx + 0.012378871033433825, -0.012252329848706722, minz + 0.010387577582150698), (minx + 0.011465256451629102, -0.012252329848706722, minz + 0.01076600980013609), (minx + 0.01076600607484579, -0.012252329848706722, minz + 0.011465260875411332), (minx + 0.010531799402087927, -0.012252329848706722, minz + 0.011903432430699468), (minx + 0.010338877560570836, -0.012252329848706722, maxz - 0.01287331168983985), (minx + 0.010531801264733076, -0.012252329848706722, maxz - 0.01190342364134267), (minx + 0.011081199743784964, -0.012252329848706722, maxz - 0.011081192875280976), (minx + 0.011465260293334723, -0.012252329848706722, maxz - 0.010766003280878067), (maxx - 0.01287331586396423, -0.012252329848706722, maxz - 0.010338874999433756), (maxx - 0.011903427948709577, -0.012252329848706722, maxz - 0.010531798237934709), (maxx - 0.010387575486674905, -0.012252329848706722, maxz - 0.012378869636449963), (maxx - 0.010338877094909549, -0.012252329848706722, maxz - 0.012873313945746867), (maxx - 0.010387575486674905, -0.012252329848706722, minz + 0.012378874002024531), (maxx - 0.010531799867749214, -0.012252329848706722, minz + 0.011903430917300284), (maxx - 0.010766007238999009, -0.012252329848706722, minz + 0.011465259245596826), (maxx - 0.011465257382951677, -0.012252329848706722, minz + 0.010766008868813515), (maxx - 0.01237887202296406, -0.012252329848706722, minz + 0.010387577582150698), (minx + 0.01287331567758343, -0.012252329848706722, minz + 0.010338879656046629), (minx + 0.011903427541255951, -0.012252329848706722, minz + 0.010531802894547582), (minx + 0.011081196367740631, -0.012252329848706722, minz + 0.011081200325861573), (minx + 0.010387575021013618, -0.012252329848706722, minz + 0.01237887586466968), (minx + 0.01038757641799748, -0.012252329848706722, maxz - 0.012378867017105222), (minx + 0.010766008868813515, -0.012252329848706722, maxz - 0.011465252609923482), (minx + 0.011903432314284146, -0.012252329848706722, maxz - 0.01053179637528956), (minx + 0.01237887580646202, -0.012252329848706722, maxz - 0.010387573391199112)] # Faces myfaces = [(0, 1, 3, 2), (2, 3, 5, 4), (4, 5, 7, 6), (6, 7, 9, 8), (8, 9, 11, 10), (10, 11, 13, 12), (12, 13, 15, 14), (14, 15, 17, 16), (16, 17, 19, 18), (18, 19, 21, 20), (20, 21, 23, 22), (22, 23, 25, 24), (24, 25, 27, 26), (26, 27, 29, 28), (28, 29, 31, 30), (30, 31, 33, 32), (32, 33, 35, 34), (34, 35, 37, 36), (36, 37, 39, 38), (38, 39, 41, 40), (40, 41, 43, 42), (42, 43, 45, 44), (44, 45, 47, 46), (46, 47, 49, 48), (48, 49, 51, 50), (50, 51, 53, 52), (52, 53, 55, 54), (54, 55, 57, 56), (56, 57, 59, 58), (58, 59, 61, 60), (60, 61, 63, 62), (62, 63, 1, 0), (45, 43, 85, 86), (23, 21, 74, 75), (51, 49, 88, 89), (7, 5, 66, 67), (29, 27, 77, 78), (57, 55, 91, 92), (35, 33, 80, 81), (13, 11, 69, 70), (63, 61, 94, 95), (41, 39, 83, 84), (19, 17, 72, 73), (47, 45, 86, 87), (3, 1, 64, 65), (25, 23, 75, 76), (53, 51, 89, 90), (9, 7, 67, 68), (31, 29, 78, 79), (59, 57, 92, 93), (37, 35, 81, 82), (15, 13, 70, 71), (1, 63, 95, 64), (43, 41, 84, 85), (21, 19, 73, 74), (49, 47, 87, 88), (5, 3, 65, 66), (27, 25, 76, 77), (55, 53, 90, 91), (11, 9, 68, 69), (33, 31, 79, 80), (61, 59, 93, 94), (39, 37, 82, 83), (17, 15, 71, 72), (89, 88, 120, 121), (67, 66, 98, 99), (78, 77, 109, 110), (87, 86, 118, 119), (65, 64, 96, 97), (76, 75, 107, 108), (64, 95, 127, 96), (85, 84, 116, 117), (74, 73, 105, 106), (94, 93, 125, 126), (83, 82, 114, 115), (72, 71, 103, 104), (92, 91, 123, 124), (81, 80, 112, 113), (70, 69, 101, 102), (90, 89, 121, 122), (68, 67, 99, 100), (79, 78, 110, 111), (88, 87, 119, 120), (66, 65, 97, 98), (77, 76, 108, 109), (86, 85, 117, 118), (75, 74, 106, 107), (95, 94, 126, 127), (84, 83, 115, 116), (73, 72, 104, 105), (93, 92, 124, 125), (82, 81, 113, 114), (71, 70, 102, 103), (91, 90, 122, 123), (69, 68, 100, 101), (80, 79, 111, 112), (123, 122, 154, 155), (101, 100, 132, 133), (112, 111, 143, 144), (121, 120, 152, 153), (99, 98, 130, 131), (110, 109, 141, 142), (119, 118, 150, 151), (97, 96, 128, 129), (108, 107, 139, 140), (96, 127, 159, 128), (117, 116, 148, 149), (106, 105, 137, 138), (126, 125, 157, 158), (115, 114, 146, 147), (104, 103, 135, 136), (124, 123, 155, 156), (113, 112, 144, 145), (102, 101, 133, 134), (122, 121, 153, 154), (100, 99, 131, 132), (111, 110, 142, 143), (120, 119, 151, 152), (98, 97, 129, 130), (109, 108, 140, 141), (118, 117, 149, 150), (107, 106, 138, 139), (127, 126, 158, 159), (116, 115, 147, 148), (105, 104, 136, 137), (125, 124, 156, 157), (114, 113, 145, 146), (103, 102, 134, 135), (157, 156, 173, 174), (133, 132, 162, 163), (134, 133, 163, 164), (132, 131, 161, 162), (150, 149, 169, 170), (146, 145, 167, 185), (135, 134, 164, 177), (155, 154, 172, 189), (144, 143, 183, 184), (153, 152, 171, 188), (131, 130, 176, 161), (142, 141, 182, 166), (151, 150, 170, 187), (129, 128, 175, 160), (140, 139, 181, 165), (128, 159, 191, 175), (149, 148, 186, 169), (138, 137, 179, 180), (158, 157, 174, 190), (147, 146, 185, 168), (136, 135, 177, 178), (156, 155, 189, 173), (145, 144, 184, 167), (154, 153, 188, 172), (143, 142, 166, 183), (152, 151, 187, 171), (130, 129, 160, 176), (141, 140, 165, 182), (139, 138, 180, 181), (159, 158, 190, 191), (148, 147, 168, 186), (137, 136, 178, 179), (175, 191, 190, 174, 173, 189, 172, 188, 171, 187, 170, 169, 186, 168, 185, 167, 184, 183, 166, 182, 165, 181, 180, 179, 178, 177, 164, 163, 162, 161, 176, 160)] return myvertex, myfaces # ---------------------------------------------- # Handle model 06 # ---------------------------------------------- def handle_model_06(): # ------------------------------------ # Mesh data # ------------------------------------ minx = -0.021158458665013313 maxx = 0.021158456802368164 maxy = 6.581399869531879e-10 minz = -0.021158462390303612 maxz = 0.021158454939723015 # Vertex myvertex = [(maxx - 0.021158457078388343, maxy, maxz - 0.01716466387733817), (maxx - 0.021158457078388343, -0.004451401997357607, maxz - 0.01716466387733817), (maxx - 0.02037930692313239, maxy, maxz - 0.017241403926163912), (maxx - 0.02037930692313239, -0.004451401997357607, maxz - 0.017241403460502625), (maxx - 0.019630099064670503, maxy, maxz - 0.017468673642724752), (maxx - 0.019630099064670503, -0.004451401997357607, maxz - 0.017468673177063465), (maxx - 0.018939625238999724, maxy, maxz - 0.017837739316746593), (maxx - 0.018939625238999724, -0.004451401997357607, maxz - 0.017837738851085305), (maxx - 0.018334419932216406, maxy, maxz - 0.018334418768063188), (maxx - 0.018334419932216406, -0.004451401997357607, maxz - 0.018334418069571257), (maxx - 0.017837740713730454, maxy - 6.581399869531879e-10, maxz - 0.018939624540507793), (maxx - 0.017837740713730454, -0.004451401997357607, maxz - 0.018939623842015862), (maxx - 0.017468675039708614, maxy - 6.581399869531879e-10, maxz - 0.01963009813334793), (maxx - 0.017468675039708614, -0.004451401997357607, maxz - 0.01963009755127132), (maxx - 0.017241405323147774, maxy - 6.581399869531879e-10, maxz - 0.020379305817186832), (maxx - 0.017241405323147774, -0.004451401997357607, maxz - 0.020379305293317884), (maxx - 0.01716466573998332, maxy - 6.581399869531879e-10, maxz - 0.02115845568246083), (maxx - 0.01716466573998332, -0.004451401997357607, maxz - 0.021158455207246157), (maxx - 0.017241404857486486, maxy - 6.581399869531879e-10, minz + 0.020379311696160585), (maxx - 0.017241404857486486, -0.004451401997357607, minz + 0.02037931210361421), (maxx - 0.017468674574047327, maxy - 6.581399869531879e-10, minz + 0.01963010407052934), (maxx - 0.017468674574047327, -0.004451401997357607, minz + 0.01963010453619063), (maxx - 0.017837740713730454, maxy - 6.581399869531879e-10, minz + 0.01893962942995131), (maxx - 0.017837740713730454, -0.004451401997357607, minz + 0.01893963012844324), (maxx - 0.018334419932216406, -6.581399869531879e-10, minz + 0.01833442412316799), (maxx - 0.018334419932216406, -0.004451401997357607, minz + 0.018334424821659923), (maxx - 0.018939625471830368, -6.581399869531879e-10, minz + 0.01783774490468204), (maxx - 0.018939625471830368, -0.004451401997357607, minz + 0.017837745370343328), (maxx - 0.019630099763162434, -6.581399869531879e-10, minz + 0.01746867853216827), (maxx - 0.019630099763162434, -0.004451401997357607, minz + 0.017468678764998913), (maxx - 0.020379307912662625, -6.581399869531879e-10, minz + 0.01724140951409936), (maxx - 0.020379307912662625, -0.004451401997357607, minz + 0.01724140951409936), (minx + 0.02115845708765063, -6.581399869531879e-10, minz + 0.017164669930934906), (minx + 0.02115845708765063, -0.004451401997357607, minz + 0.017164670396596193), (minx + 0.020379306632094085, -6.581399869531879e-10, minz + 0.01724140951409936), (minx + 0.020379306632094085, -0.004451401997357607, minz + 0.017241409979760647), (minx + 0.019630098715424538, -6.581399869531879e-10, minz + 0.017468680161982775), (minx + 0.019630098715424538, -0.004451401997357607, minz + 0.017468680627644062), (minx + 0.018939624773338437, -6.581399869531879e-10, minz + 0.017837746301665902), (minx + 0.018939624773338437, -0.004451401997357607, minz + 0.017837747000157833), (minx + 0.01833441946655512, -6.581399869531879e-10, minz + 0.018334425752982497), (minx + 0.01833441946655512, -0.004451401997357607, minz + 0.018334426451474428), (minx + 0.017837740248069167, maxy - 6.581399869531879e-10, minz + 0.018939631758257747), (minx + 0.017837740248069167, -0.004451401997357607, minz + 0.018939632223919034), (minx + 0.017468674574047327, maxy - 6.581399869531879e-10, minz + 0.019630106398835778), (minx + 0.017468674574047327, -0.004451401997357607, minz + 0.019630106864497066), (minx + 0.01724140578880906, maxy - 6.581399869531879e-10, minz + 0.02037931466475129), (minx + 0.01724140578880906, -0.004451401997357607, minz + 0.02037931513041258), (minx + 0.017164666671305895, maxy - 6.581399869531879e-10, maxz - 0.021158452127581606), (minx + 0.017164666671305895, -0.004451401997357607, maxz - 0.02115845165236685), (minx + 0.017241406720131636, maxy - 6.581399869531879e-10, maxz - 0.02037930174265057), (minx + 0.017241406720131636, -0.004451401997357607, maxz - 0.02037930127698928), (minx + 0.01746867736801505, maxy - 6.581399869531879e-10, maxz - 0.019630093942396343), (minx + 0.01746867736801505, -0.004451401997357607, maxz - 0.019630093476735055), (minx + 0.01783774420619011, maxy - 6.581399869531879e-10, maxz - 0.018939620116725564), (minx + 0.01783774420619011, -0.004451401997357607, maxz - 0.018939619651064277), (minx + 0.018334424821659923, maxy, maxz - 0.01833441504277289), (minx + 0.018334424821659923, -0.004451401997357607, maxz - 0.018334414809942245), (minx + 0.018939631059765816, maxy, maxz - 0.017837736289948225), (minx + 0.018939631059765816, -0.004451401997357607, maxz - 0.017837735824286938), (minx + 0.019630105700343847, maxy, maxz - 0.017468671081587672), (minx + 0.019630105700343847, -0.004451401997357607, maxz - 0.01746867084875703), (minx + 0.020379314315505326, maxy, maxz - 0.017241402994841337), (minx + 0.020379314315505326, -0.004451401997357607, maxz - 0.017241402063518763), (minx + 0.02115845651317172, -0.01480177417397499, maxz), (maxx - 0.017030648421496153, -0.01480177417397499, maxz - 0.00040655583143234253), (maxx - 0.013061466626822948, -0.01480177417397499, maxz - 0.0016105938702821732), (maxx - 0.00940344762057066, -0.01480177417397499, maxz - 0.0035658441483974457), (maxx - 0.006197170354425907, -0.01480177417397499, maxz - 0.006197171285748482), (maxx - 0.0035658441483974457, -0.01480177417397499, maxz - 0.009403450414538383), (maxx - 0.0016105901449918747, -0.014801775105297565, maxz - 0.013061468489468098), (maxx - 0.0004065539687871933, -0.014801775105297565, maxz - 0.017030649818480015), (maxx, -0.014801775105297565, minz + 0.0211584585064859), (maxx - 0.0004065539687871933, -0.014801775105297565, minz + 0.017030648421496153), (maxx - 0.0016105901449918747, -0.014801775105297565, minz + 0.013061468489468098), (maxx - 0.0035658441483974457, -0.01480177603662014, minz + 0.00940344762057066), (maxx - 0.006197170354425907, -0.01480177603662014, minz + 0.006197166629135609), (maxx - 0.009403450414538383, -0.01480177603662014, minz + 0.0035658422857522964), (maxx - 0.013061470352113247, -0.01480177603662014, minz + 0.0016105901449918747), (maxx - 0.017030653543770313, -0.01480177603662014, minz + 0.0004065539687871933), (minx + 0.02115844961887081, -0.01480177603662014, minz), (minx + 0.017030637711286545, -0.01480177603662014, minz + 0.0004065539687871933), (minx + 0.013061455450952053, -0.01480177603662014, minz + 0.0016105975955724716), (minx + 0.009403438307344913, -0.01480177603662014, minz + 0.0035658497363328934), (minx + 0.006197156384587288, -0.01480177603662014, minz + 0.006197175942361355), (minx + 0.003565831109881401, -0.01480177603662014, minz + 0.00940345972776413), (minx + 0.001610584557056427, -0.014801775105297565, minz + 0.013061481527984142), (minx + 0.0004065483808517456, -0.014801775105297565, minz + 0.01703066425397992), (minx, -0.014801775105297565, maxz - 0.021158439990372813), (minx + 0.00040655583143234253, -0.014801775105297565, maxz - 0.01703062793239951), (minx + 0.0016105994582176208, -0.014801775105297565, maxz - 0.013061447069048882), (minx + 0.0035658515989780426, -0.01480177417397499, maxz - 0.009403428062796593), (minx + 0.006197184324264526, -0.01480177417397499, maxz - 0.006197153590619564), (minx + 0.00940346997231245, -0.01480177417397499, maxz - 0.003565829247236252), (minx + 0.013061493635177612, -0.01480177417397499, maxz - 0.0016105808317661285), (minx + 0.017030677758157253, -0.01480177417397499, maxz - 0.00040655024349689484), (minx + 0.02115845651317172, -0.017049500718712807, maxz), (maxx - 0.017030648421496153, -0.017049500718712807, maxz - 0.00040655583143234253), (maxx - 0.013061466626822948, -0.017049500718712807, maxz - 0.0016105938702821732), (maxx - 0.00940344762057066, -0.017049500718712807, maxz - 0.0035658441483974457), (maxx - 0.006197170354425907, -0.017049500718712807, maxz - 0.006197171285748482), (maxx - 0.0035658441483974457, -0.017049500718712807, maxz - 0.009403450414538383), (maxx - 0.0016105901449918747, -0.017049502581357956, maxz - 0.013061468489468098), (maxx - 0.0004065539687871933, -0.017049502581357956, maxz - 0.017030649818480015), (maxx, -0.017049502581357956, maxz - 0.021158458637408728), (maxx - 0.0004065539687871933, -0.017049502581357956, minz + 0.017030648421496153), (maxx - 0.0016105901449918747, -0.017049502581357956, minz + 0.013061468489468098), (maxx - 0.0035658441483974457, -0.017049502581357956, minz + 0.00940344762057066), (maxx - 0.006197170354425907, -0.017049502581357956, minz + 0.006197166629135609), (maxx - 0.009403450414538383, -0.017049502581357956, minz + 0.0035658422857522964), (maxx - 0.013061470352113247, -0.017049502581357956, minz + 0.0016105901449918747), (maxx - 0.017030653543770313, -0.017049502581357956, minz + 0.0004065539687871933), (minx + 0.02115844961887081, -0.017049502581357956, minz), (minx + 0.017030637711286545, -0.017049502581357956, minz + 0.0004065539687871933), (minx + 0.013061455450952053, -0.017049502581357956, minz + 0.0016105975955724716), (minx + 0.009403438307344913, -0.017049502581357956, minz + 0.0035658497363328934), (minx + 0.006197156384587288, -0.017049502581357956, minz + 0.006197175942361355), (minx + 0.003565831109881401, -0.017049502581357956, minz + 0.00940345972776413), (minx + 0.001610584557056427, -0.017049502581357956, minz + 0.013061481527984142), (minx + 0.0004065483808517456, -0.017049502581357956, minz + 0.01703066425397992), (minx, -0.017049502581357956, maxz - 0.02115843980423726), (minx + 0.00040655583143234253, -0.017049502581357956, maxz - 0.01703062793239951), (minx + 0.0016105994582176208, -0.017049502581357956, maxz - 0.013061447069048882), (minx + 0.0035658515989780426, -0.017049500718712807, maxz - 0.009403428062796593), (minx + 0.006197184324264526, -0.017049500718712807, maxz - 0.006197153590619564), (minx + 0.00940346997231245, -0.017049500718712807, maxz - 0.003565829247236252), (minx + 0.013061493635177612, -0.017049500718712807, maxz - 0.0016105808317661285), (minx + 0.017030677758157253, -0.017049500718712807, maxz - 0.00040655024349689484), (minx + 0.021158456942334758, -0.017049498856067657, maxz - 0.00991731882095337), (maxx - 0.01896542147733271, -0.017049498856067657, maxz - 0.010133316740393639), (maxx - 0.016856661066412926, -0.017049498856067657, maxz - 0.010773001238703728), (maxx - 0.014913217630237341, -0.017049500718712807, maxz - 0.01181179191917181), (maxx - 0.013209773227572441, -0.017049500718712807, maxz - 0.013209772296249866), (maxx - 0.011811794713139534, -0.017049500718712807, maxz - 0.014913215301930904), (maxx - 0.010773001238703728, -0.017049500718712807, maxz - 0.01685666013509035), (maxx - 0.010133316740393639, -0.017049500718712807, maxz - 0.01896541938185692), (maxx - 0.009917320683598518, -0.017049500718712807, maxz - 0.02115845573538011), (maxx - 0.01013331487774849, -0.017049500718712807, minz + 0.018965424969792366), (maxx - 0.010773001238703728, -0.017049500718712807, minz + 0.01685666525736451), (maxx - 0.011811794713139534, -0.017049500718712807, minz + 0.01491321949288249), (maxx - 0.013209773227572441, -0.017049500718712807, minz + 0.01320977695286274), (maxx - 0.014913217630237341, -0.017049500718712807, minz + 0.011811795644462109), (maxx - 0.016856663394719362, -0.017049502581357956, minz + 0.010773002170026302), (maxx - 0.01896542403846979, -0.017049502581357956, minz + 0.010133319534361362), (minx + 0.021158453279507494, -0.017049502581357956, minz + 0.009917323477566242), (minx + 0.018965415423735976, -0.017049502581357956, minz + 0.010133319534361362), (minx + 0.016856654547154903, -0.017049502581357956, minz + 0.01077300775796175), (minx + 0.014913210645318031, -0.017049500718712807, minz + 0.011811801232397556), (minx + 0.013209767639636993, -0.017049500718712807, minz + 0.013209780678153038), (minx + 0.011811788193881512, -0.017049500718712807, minz + 0.014913226012140512), (minx + 0.01077299751341343, -0.017049500718712807, minz + 0.016856671776622534), (minx + 0.010133313946425915, -0.017049500718712807, minz + 0.018965433351695538), (minx + 0.009917320683598518, -0.017049500718712807, maxz - 0.02115844572963077), (minx + 0.010133318603038788, -0.017049500718712807, maxz - 0.01896540797315538), (minx + 0.0107730058953166, -0.017049500718712807, maxz - 0.01685664849355817), (minx + 0.011811800301074982, -0.017049500718712807, maxz - 0.014913204126060009), (minx + 0.013209782540798187, -0.017049500718712807, maxz - 0.013209762051701546), (minx + 0.014913228340446949, -0.017049500718712807, maxz - 0.011811783537268639), (minx + 0.016856675501912832, -0.017049498856067657, maxz - 0.010772991925477982), (minx + 0.01896543661132455, -0.017049498856067657, maxz - 0.010133312083780766), (maxx - 0.020345793396700174, -0.017049498856067657, maxz - 0.01707291603088379), (maxx - 0.018844185629859567, -0.017049498856067657, maxz - 0.017694902140647173), (maxx - 0.01821294822730124, -0.017049498856067657, maxz - 0.01821294496767223), (maxx - 0.017694905400276184, -0.017049498856067657, maxz - 0.018844182137399912), (maxx - 0.017309964634478092, -0.017049498856067657, maxz - 0.0195643559563905), (maxx - 0.01821294822730124, -0.017049498856067657, minz + 0.01821295404806733), (maxx - 0.019564359914511442, -0.017049498856067657, minz + 0.017309968825429678), (minx + 0.02034579199971631, -0.017049498856067657, minz + 0.017072923481464386), (minx + 0.018844183767214417, -0.017049498856067657, minz + 0.017694910988211632), (minx + 0.01769490260630846, -0.017049498856067657, minz + 0.01884419354610145), (minx + 0.017309962771832943, -0.017049498856067657, minz + 0.01956436806358397), (minx + 0.016992878634482622, -0.017049498856067657, maxz - 0.021158450354705316), (minx + 0.017309966031461954, -0.017049498856067657, maxz - 0.019564351649023592), (minx + 0.01821295195259154, -0.017049498856067657, maxz - 0.018212941009551287), (minx + 0.01884419028647244, -0.017049498856067657, maxz - 0.017694898648187518), (maxx - 0.021158457657990293, -0.017049498856067657, maxz - 0.016992874443531036), (maxx - 0.01956435921601951, -0.017049498856067657, maxz - 0.017309961607679725), (maxx - 0.017072918359190226, -0.017049498856067657, maxz - 0.020345790137071162), (maxx - 0.016992878168821335, -0.017049498856067657, maxz - 0.021158454062492393), (maxx - 0.017072918359190226, -0.017049498856067657, minz + 0.020345799159258604), (maxx - 0.017309964634478092, -0.017049498856067657, minz + 0.01956436550244689), (maxx - 0.017694905400276184, -0.017049498856067657, minz + 0.01884419098496437), (maxx - 0.018844186328351498, -0.017049498856067657, minz + 0.01769490959122777), (maxx - 0.020345794560853392, -0.017049498856067657, minz + 0.017072923481464386), (minx + 0.021158456452073482, -0.017049498856067657, minz + 0.01699288422241807), (minx + 0.019564357702620327, -0.017049498856067657, minz + 0.01730997092090547), (minx + 0.01821294636465609, -0.017049498856067657, minz + 0.018212955445051193), (minx + 0.01707291742786765, -0.017049498856067657, minz + 0.020345802302472293), (minx + 0.017072919756174088, -0.017049498856067657, maxz - 0.020345785829704255), (minx + 0.017694907495751977, -0.017049498856067657, maxz - 0.018844177946448326), (minx + 0.01956436550244689, -0.017049498856067657, maxz - 0.017309958348050714), (minx + 0.020345799799542874, -0.017049498856067657, maxz - 0.017072914633899927)] # Faces myfaces = [(0, 1, 3, 2), (2, 3, 5, 4), (4, 5, 7, 6), (6, 7, 9, 8), (8, 9, 11, 10), (10, 11, 13, 12), (12, 13, 15, 14), (14, 15, 17, 16), (16, 17, 19, 18), (18, 19, 21, 20), (20, 21, 23, 22), (22, 23, 25, 24), (24, 25, 27, 26), (26, 27, 29, 28), (28, 29, 31, 30), (30, 31, 33, 32), (32, 33, 35, 34), (34, 35, 37, 36), (36, 37, 39, 38), (38, 39, 41, 40), (40, 41, 43, 42), (42, 43, 45, 44), (44, 45, 47, 46), (46, 47, 49, 48), (48, 49, 51, 50), (50, 51, 53, 52), (52, 53, 55, 54), (54, 55, 57, 56), (56, 57, 59, 58), (58, 59, 61, 60), (60, 61, 63, 62), (62, 63, 1, 0), (45, 43, 85, 86), (23, 21, 74, 75), (51, 49, 88, 89), (7, 5, 66, 67), (29, 27, 77, 78), (57, 55, 91, 92), (35, 33, 80, 81), (13, 11, 69, 70), (63, 61, 94, 95), (41, 39, 83, 84), (19, 17, 72, 73), (47, 45, 86, 87), (3, 1, 64, 65), (25, 23, 75, 76), (53, 51, 89, 90), (9, 7, 67, 68), (31, 29, 78, 79), (59, 57, 92, 93), (37, 35, 81, 82), (15, 13, 70, 71), (1, 63, 95, 64), (43, 41, 84, 85), (21, 19, 73, 74), (49, 47, 87, 88), (5, 3, 65, 66), (27, 25, 76, 77), (55, 53, 90, 91), (11, 9, 68, 69), (33, 31, 79, 80), (61, 59, 93, 94), (39, 37, 82, 83), (17, 15, 71, 72), (89, 88, 120, 121), (67, 66, 98, 99), (78, 77, 109, 110), (87, 86, 118, 119), (65, 64, 96, 97), (76, 75, 107, 108), (64, 95, 127, 96), (85, 84, 116, 117), (74, 73, 105, 106), (94, 93, 125, 126), (83, 82, 114, 115), (72, 71, 103, 104), (92, 91, 123, 124), (81, 80, 112, 113), (70, 69, 101, 102), (90, 89, 121, 122), (68, 67, 99, 100), (79, 78, 110, 111), (88, 87, 119, 120), (66, 65, 97, 98), (77, 76, 108, 109), (86, 85, 117, 118), (75, 74, 106, 107), (95, 94, 126, 127), (84, 83, 115, 116), (73, 72, 104, 105), (93, 92, 124, 125), (82, 81, 113, 114), (71, 70, 102, 103), (91, 90, 122, 123), (69, 68, 100, 101), (80, 79, 111, 112), (123, 122, 154, 155), (101, 100, 132, 133), (112, 111, 143, 144), (121, 120, 152, 153), (99, 98, 130, 131), (110, 109, 141, 142), (119, 118, 150, 151), (97, 96, 128, 129), (108, 107, 139, 140), (96, 127, 159, 128), (117, 116, 148, 149), (106, 105, 137, 138), (126, 125, 157, 158), (115, 114, 146, 147), (104, 103, 135, 136), (124, 123, 155, 156), (113, 112, 144, 145), (102, 101, 133, 134), (122, 121, 153, 154), (100, 99, 131, 132), (111, 110, 142, 143), (120, 119, 151, 152), (98, 97, 129, 130), (109, 108, 140, 141), (118, 117, 149, 150), (107, 106, 138, 139), (127, 126, 158, 159), (116, 115, 147, 148), (105, 104, 136, 137), (125, 124, 156, 157), (114, 113, 145, 146), (103, 102, 134, 135), (157, 156, 173, 174), (133, 132, 162, 163), (134, 133, 163, 164), (132, 131, 161, 162), (150, 149, 169, 170), (146, 145, 167, 185), (135, 134, 164, 177), (155, 154, 172, 189), (144, 143, 183, 184), (153, 152, 171, 188), (131, 130, 176, 161), (142, 141, 182, 166), (151, 150, 170, 187), (129, 128, 175, 160), (140, 139, 181, 165), (128, 159, 191, 175), (149, 148, 186, 169), (138, 137, 179, 180), (158, 157, 174, 190), (147, 146, 185, 168), (136, 135, 177, 178), (156, 155, 189, 173), (145, 144, 184, 167), (154, 153, 188, 172), (143, 142, 166, 183), (152, 151, 187, 171), (130, 129, 160, 176), (141, 140, 165, 182), (139, 138, 180, 181), (159, 158, 190, 191), (148, 147, 168, 186), (137, 136, 178, 179), (175, 191, 190, 174, 173, 189, 172, 188, 171, 187, 170, 169, 186, 168, 185, 167, 184, 183, 166, 182, 165, 181, 180, 179, 178, 177, 164, 163, 162, 161, 176, 160)] return myvertex, myfaces # ---------------------------------------------- # Handle model 07 # ---------------------------------------------- def handle_model_07(): # ------------------------------------ # Mesh data # ------------------------------------ minx = -0.10910986363887787 maxx = 0.10910986363887787 maxy = 0 minz = -0.0039262366481125355 maxz = 0.0039262366481125355 # Vertex myvertex = [(maxx, -0.017620893195271492, maxz), (maxx, -0.01611838862299919, maxz - 0.00029886653646826744), (maxx, -0.014844624325633049, maxz - 0.0011499673128128052), (maxx, -0.013993524014949799, maxz - 0.002423731260932982), (maxx, -0.013694657012820244, minz + 0.003926236289926277), (maxx, -0.013993524014949799, minz + 0.002423729980364442), (maxx, -0.014844624325633049, minz + 0.001149968709796667), (maxx, -0.016118386760354042, minz + 0.0002988663036376238), (maxx, -0.017620891332626343, minz), (maxx, -0.019123397767543793, minz + 0.00029886653646826744), (maxx, -0.020397160202264786, minz + 0.0011499675456434488), (maxx, -0.021248264238238335, minz + 0.0024237307952716947), (maxx, -0.02154713124036789, maxz - 0.003926236195012284), (maxx, -0.021248262375593185, maxz - 0.0024237297475337982), (maxx, -0.020397160202264786, maxz - 0.0011499666143208742), (maxx, -0.019123397767543793, maxz - 0.0002988646738231182), (maxx - 0.02949388325214386, -0.01396019384264946, maxz - 0.0024807279696688056), (maxx - 0.030047059059143066, -0.01396019384264946, maxz - 0.0025907604722306132), (maxx - 0.030516013503074646, -0.01396019384264946, maxz - 0.002904107444919646), (maxx - 0.030829355120658875, -0.01396019384264946, maxz - 0.0033730645664036274), (maxx - 0.030939392745494843, -0.01396019198000431, minz + 0.003926236608184253), (maxx - 0.030829355120658875, -0.01396019384264946, minz + 0.0033730643335729837), (maxx - 0.030516013503074646, -0.01396019384264946, minz + 0.0029041077941656113), (maxx - 0.030047059059143066, -0.01396019384264946, minz + 0.002590760588645935), (maxx - 0.02949388325214386, -0.01396019384264946, minz + 0.0024807280860841274), (maxx - 0.02894071489572525, -0.01396019384264946, minz + 0.002590760588645935), (maxx - 0.028471753001213074, -0.01396019384264946, minz + 0.002904107444919646), (maxx - 0.028158411383628845, -0.01396019384264946, minz + 0.0033730644499883056), (maxx - 0.028048373758792877, -0.01396019384264946, maxz - 0.0039262363893523555), (maxx - 0.028158411383628845, -0.01396019384264946, maxz - 0.0033730638679116964), (maxx - 0.028471753001213074, -0.01396019384264946, maxz - 0.0029041070956736803), (maxx - 0.02894071489572525, -0.01396019384264946, maxz - 0.0025907597737386823), (maxx - 0.02949388325214386, -1.862645149230957e-09, maxz - 0.0024807279696688056), (maxx - 0.030047059059143066, -1.862645149230957e-09, maxz - 0.0025907604722306132), (maxx - 0.030516013503074646, -1.862645149230957e-09, maxz - 0.002904107444919646), (maxx - 0.030829355120658875, maxy, maxz - 0.0033730645664036274), (maxx - 0.030939392745494843, maxy, minz + 0.003926236608184253), (maxx - 0.030829355120658875, maxy, minz + 0.0033730643335729837), (maxx - 0.030516013503074646, -1.862645149230957e-09, minz + 0.0029041077941656113), (maxx - 0.030047059059143066, -1.862645149230957e-09, minz + 0.002590760588645935), (maxx - 0.02949388325214386, -1.862645149230957e-09, minz + 0.0024807280860841274), (maxx - 0.02894071489572525, -1.862645149230957e-09, minz + 0.002590760588645935), (maxx - 0.028471753001213074, -1.862645149230957e-09, minz + 0.002904107444919646), (maxx - 0.028158411383628845, -1.862645149230957e-09, minz + 0.0033730644499883056), (maxx - 0.028048373758792877, -1.862645149230957e-09, maxz - 0.0039262363893523555), (maxx - 0.028158411383628845, -1.862645149230957e-09, maxz - 0.0033730638679116964), (maxx - 0.028471753001213074, -1.862645149230957e-09, maxz - 0.0029041070956736803), (maxx - 0.02894071489572525, -1.862645149230957e-09, maxz - 0.0025907597737386823), (minx + 0.10910986037924886, -0.017620893195271492, maxz), (minx + 0.10910986037924886, -0.01611838862299919, maxz - 0.00029886653646826744), (minx + 0.10910986037924886, -0.014844624325633049, maxz - 0.0011499673128128052), (minx + 0.10910986037924886, -0.013993524014949799, maxz - 0.002423731260932982), (minx + 0.10910986037924886, -0.013694657012820244, minz + 0.003926236289926277), (minx + 0.10910986037924886, -0.013993524014949799, minz + 0.002423729980364442), (minx + 0.10910986037924886, -0.014844624325633049, minz + 0.001149968709796667), (minx + 0.10910986037924886, -0.016118386760354042, minz + 0.0002988663036376238), (minx + 0.10910986037924886, -0.017620891332626343, minz), (minx + 0.10910986037924886, -0.019123397767543793, minz + 0.00029886653646826744), (minx + 0.10910986037924886, -0.020397160202264786, minz + 0.0011499675456434488), (minx + 0.10910986037924886, -0.021248264238238335, minz + 0.0024237307952716947), (minx + 0.10910986037924886, -0.02154713124036789, maxz - 0.003926236195012284), (minx + 0.10910986037924886, -0.021248262375593185, maxz - 0.0024237297475337982), (minx + 0.10910986037924886, -0.020397160202264786, maxz - 0.0011499666143208742), (minx + 0.10910986037924886, -0.019123397767543793, maxz - 0.0002988646738231182), (minx, -0.017620893195271492, maxz), (minx, -0.01611838862299919, maxz - 0.00029886653646826744), (minx, -0.014844624325633049, maxz - 0.0011499673128128052), (minx, -0.013993524014949799, maxz - 0.002423731260932982), (minx, -0.013694657012820244, minz + 0.003926236289926277), (minx, -0.013993524014949799, minz + 0.002423729980364442), (minx, -0.014844624325633049, minz + 0.001149968709796667), (minx, -0.016118386760354042, minz + 0.0002988663036376238), (minx, -0.017620891332626343, minz), (minx, -0.019123397767543793, minz + 0.00029886653646826744), (minx, -0.020397160202264786, minz + 0.0011499675456434488), (minx, -0.021248264238238335, minz + 0.0024237307952716947), (minx, -0.02154713124036789, maxz - 0.003926236195012284), (minx, -0.021248262375593185, maxz - 0.0024237297475337982), (minx, -0.020397160202264786, maxz - 0.0011499666143208742), (minx, -0.019123397767543793, maxz - 0.0002988646738231182), (minx + 0.02949388325214386, -0.01396019384264946, maxz - 0.0024807279696688056), (minx + 0.030047059059143066, -0.01396019384264946, maxz - 0.0025907604722306132), (minx + 0.030516013503074646, -0.01396019384264946, maxz - 0.002904107444919646), (minx + 0.030829355120658875, -0.01396019384264946, maxz - 0.0033730645664036274), (minx + 0.030939392745494843, -0.01396019198000431, minz + 0.003926236608184253), (minx + 0.030829355120658875, -0.01396019384264946, minz + 0.0033730643335729837), (minx + 0.030516013503074646, -0.01396019384264946, minz + 0.0029041077941656113), (minx + 0.030047059059143066, -0.01396019384264946, minz + 0.002590760588645935), (minx + 0.02949388325214386, -0.01396019384264946, minz + 0.0024807280860841274), (minx + 0.02894071489572525, -0.01396019384264946, minz + 0.002590760588645935), (minx + 0.028471753001213074, -0.01396019384264946, minz + 0.002904107444919646), (minx + 0.028158411383628845, -0.01396019384264946, minz + 0.0033730644499883056), (minx + 0.028048373758792877, -0.01396019384264946, maxz - 0.0039262363893523555), (minx + 0.028158411383628845, -0.01396019384264946, maxz - 0.0033730638679116964), (minx + 0.028471753001213074, -0.01396019384264946, maxz - 0.0029041070956736803), (minx + 0.02894071489572525, -0.01396019384264946, maxz - 0.0025907597737386823), (minx + 0.02949388325214386, -1.862645149230957e-09, maxz - 0.0024807279696688056), (minx + 0.030047059059143066, -1.862645149230957e-09, maxz - 0.0025907604722306132), (minx + 0.030516013503074646, -1.862645149230957e-09, maxz - 0.002904107444919646), (minx + 0.030829355120658875, maxy, maxz - 0.0033730645664036274), (minx + 0.030939392745494843, maxy, minz + 0.003926236608184253), (minx + 0.030829355120658875, maxy, minz + 0.0033730643335729837), (minx + 0.030516013503074646, -1.862645149230957e-09, minz + 0.0029041077941656113), (minx + 0.030047059059143066, -1.862645149230957e-09, minz + 0.002590760588645935), (minx + 0.02949388325214386, -1.862645149230957e-09, minz + 0.0024807280860841274), (minx + 0.02894071489572525, -1.862645149230957e-09, minz + 0.002590760588645935), (minx + 0.028471753001213074, -1.862645149230957e-09, minz + 0.002904107444919646), (minx + 0.028158411383628845, -1.862645149230957e-09, minz + 0.0033730644499883056), (minx + 0.028048373758792877, -1.862645149230957e-09, maxz - 0.0039262363893523555), (minx + 0.028158411383628845, -1.862645149230957e-09, maxz - 0.0033730638679116964), (minx + 0.028471753001213074, -1.862645149230957e-09, maxz - 0.0029041070956736803), (minx + 0.02894071489572525, -1.862645149230957e-09, maxz - 0.0025907597737386823)] # Faces myfaces = [(49, 48, 0, 1), (60, 59, 11, 12), (58, 57, 9, 10), (56, 55, 7, 8), (54, 53, 5, 6), (52, 51, 3, 4), (48, 63, 15, 0), (50, 49, 1, 2), (61, 60, 12, 13), (59, 58, 10, 11), (57, 56, 8, 9), (55, 54, 6, 7), (53, 52, 4, 5), (63, 62, 14, 15), (51, 50, 2, 3), (62, 61, 13, 14), (17, 16, 32, 33), (32, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33), (28, 27, 43, 44), (26, 25, 41, 42), (24, 23, 39, 40), (22, 21, 37, 38), (20, 19, 35, 36), (16, 31, 47, 32), (18, 17, 33, 34), (29, 28, 44, 45), (27, 26, 42, 43), (25, 24, 40, 41), (23, 22, 38, 39), (21, 20, 36, 37), (31, 30, 46, 47), (19, 18, 34, 35), (30, 29, 45, 46), (49, 65, 64, 48), (60, 76, 75, 59), (58, 74, 73, 57), (56, 72, 71, 55), (54, 70, 69, 53), (52, 68, 67, 51), (48, 64, 79, 63), (50, 66, 65, 49), (61, 77, 76, 60), (59, 75, 74, 58), (57, 73, 72, 56), (55, 71, 70, 54), (53, 69, 68, 52), (63, 79, 78, 62), (51, 67, 66, 50), (62, 78, 77, 61), (81, 97, 96, 80), (96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111), (92, 108, 107, 91), (90, 106, 105, 89), (88, 104, 103, 87), (86, 102, 101, 85), (84, 100, 99, 83), (80, 96, 111, 95), (82, 98, 97, 81), (93, 109, 108, 92), (91, 107, 106, 90), (89, 105, 104, 88), (87, 103, 102, 86), (85, 101, 100, 84), (95, 111, 110, 94), (83, 99, 98, 82), (94, 110, 109, 93), (0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1), (64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79)] return myvertex, myfaces # ---------------------------------------------- # Handle model 08 # ---------------------------------------------- def handle_model_08(): # ------------------------------------ # Mesh data # ------------------------------------ minx = -0.05910986289381981 maxx = 0.05910986289381981 maxy = 0 minz = -0.0039262366481125355 maxz = 0.0039262366481125355 # Vertex myvertex = [(maxx, -0.017620893195271492, maxz), (maxx, -0.01611838862299919, maxz - 0.00029886653646826744), (maxx, -0.014844624325633049, maxz - 0.0011499673128128052), (maxx, -0.013993524014949799, maxz - 0.002423731260932982), (maxx, -0.013694657012820244, minz + 0.003926236289926277), (maxx, -0.013993524014949799, minz + 0.002423729980364442), (maxx, -0.014844624325633049, minz + 0.001149968709796667), (maxx, -0.016118386760354042, minz + 0.0002988663036376238), (maxx, -0.017620891332626343, minz), (maxx, -0.019123397767543793, minz + 0.00029886653646826744), (maxx, -0.020397160202264786, minz + 0.0011499675456434488), (maxx, -0.021248264238238335, minz + 0.0024237307952716947), (maxx, -0.02154713124036789, maxz - 0.003926236195012284), (maxx, -0.021248262375593185, maxz - 0.0024237297475337982), (maxx, -0.020397160202264786, maxz - 0.0011499666143208742), (maxx, -0.019123397767543793, maxz - 0.0002988646738231182), (maxx - 0.010583892464637756, -0.01396019384264946, maxz - 0.0024807279696688056), (maxx - 0.011137068271636963, -0.01396019384264946, maxz - 0.0025907604722306132), (maxx - 0.011606022715568542, -0.01396019384264946, maxz - 0.002904107444919646), (maxx - 0.011919364333152771, -0.01396019384264946, maxz - 0.0033730645664036274), (maxx - 0.012029401957988739, -0.01396019198000431, minz + 0.003926236608184253), (maxx - 0.011919364333152771, -0.01396019384264946, minz + 0.0033730643335729837), (maxx - 0.011606022715568542, -0.01396019384264946, minz + 0.0029041077941656113), (maxx - 0.011137068271636963, -0.01396019384264946, minz + 0.002590760588645935), (maxx - 0.010583892464637756, -0.01396019384264946, minz + 0.0024807280860841274), (maxx - 0.010030724108219147, -0.01396019384264946, minz + 0.002590760588645935), (maxx - 0.00956176221370697, -0.01396019384264946, minz + 0.002904107444919646), (maxx - 0.009248420596122742, -0.01396019384264946, minz + 0.0033730644499883056), (maxx - 0.009138382971286774, -0.01396019384264946, maxz - 0.0039262363893523555), (maxx - 0.009248420596122742, -0.01396019384264946, maxz - 0.0033730638679116964), (maxx - 0.00956176221370697, -0.01396019384264946, maxz - 0.0029041070956736803), (maxx - 0.010030724108219147, -0.01396019384264946, maxz - 0.0025907597737386823), (maxx - 0.010583892464637756, -1.862645149230957e-09, maxz - 0.0024807279696688056), (maxx - 0.011137068271636963, -1.862645149230957e-09, maxz - 0.0025907604722306132), (maxx - 0.011606022715568542, -1.862645149230957e-09, maxz - 0.002904107444919646), (maxx - 0.011919364333152771, maxy, maxz - 0.0033730645664036274), (maxx - 0.012029401957988739, maxy, minz + 0.003926236608184253), (maxx - 0.011919364333152771, maxy, minz + 0.0033730643335729837), (maxx - 0.011606022715568542, -1.862645149230957e-09, minz + 0.0029041077941656113), (maxx - 0.011137068271636963, -1.862645149230957e-09, minz + 0.002590760588645935), (maxx - 0.010583892464637756, -1.862645149230957e-09, minz + 0.0024807280860841274), (maxx - 0.010030724108219147, -1.862645149230957e-09, minz + 0.002590760588645935), (maxx - 0.00956176221370697, -1.862645149230957e-09, minz + 0.002904107444919646), (maxx - 0.009248420596122742, -1.862645149230957e-09, minz + 0.0033730644499883056), (maxx - 0.009138382971286774, -1.862645149230957e-09, maxz - 0.0039262363893523555), (maxx - 0.009248420596122742, -1.862645149230957e-09, maxz - 0.0033730638679116964), (maxx - 0.00956176221370697, -1.862645149230957e-09, maxz - 0.0029041070956736803), (maxx - 0.010030724108219147, -1.862645149230957e-09, maxz - 0.0025907597737386823), (minx, -0.017620893195271492, maxz), (minx, -0.01611838862299919, maxz - 0.00029886653646826744), (minx, -0.014844624325633049, maxz - 0.0011499673128128052), (minx, -0.013993524014949799, maxz - 0.002423731260932982), (minx, -0.013694657012820244, minz + 0.003926236289926277), (minx, -0.013993524014949799, minz + 0.002423729980364442), (minx, -0.014844624325633049, minz + 0.001149968709796667), (minx, -0.016118386760354042, minz + 0.0002988663036376238), (minx, -0.017620891332626343, minz), (minx, -0.019123397767543793, minz + 0.00029886653646826744), (minx, -0.020397160202264786, minz + 0.0011499675456434488), (minx, -0.021248264238238335, minz + 0.0024237307952716947), (minx, -0.02154713124036789, maxz - 0.003926236195012284), (minx, -0.021248262375593185, maxz - 0.0024237297475337982), (minx, -0.020397160202264786, maxz - 0.0011499666143208742), (minx, -0.019123397767543793, maxz - 0.0002988646738231182), (minx + 0.010583892464637756, -0.01396019384264946, maxz - 0.0024807279696688056), (minx + 0.011137068271636963, -0.01396019384264946, maxz - 0.0025907604722306132), (minx + 0.011606022715568542, -0.01396019384264946, maxz - 0.002904107444919646), (minx + 0.011919364333152771, -0.01396019384264946, maxz - 0.0033730645664036274), (minx + 0.012029401957988739, -0.01396019198000431, minz + 0.003926236608184253), (minx + 0.011919364333152771, -0.01396019384264946, minz + 0.0033730643335729837), (minx + 0.011606022715568542, -0.01396019384264946, minz + 0.0029041077941656113), (minx + 0.011137068271636963, -0.01396019384264946, minz + 0.002590760588645935), (minx + 0.010583892464637756, -0.01396019384264946, minz + 0.0024807280860841274), (minx + 0.010030724108219147, -0.01396019384264946, minz + 0.002590760588645935), (minx + 0.00956176221370697, -0.01396019384264946, minz + 0.002904107444919646), (minx + 0.009248420596122742, -0.01396019384264946, minz + 0.0033730644499883056), (minx + 0.009138382971286774, -0.01396019384264946, maxz - 0.0039262363893523555), (minx + 0.009248420596122742, -0.01396019384264946, maxz - 0.0033730638679116964), (minx + 0.00956176221370697, -0.01396019384264946, maxz - 0.0029041070956736803), (minx + 0.010030724108219147, -0.01396019384264946, maxz - 0.0025907597737386823), (minx + 0.010583892464637756, -1.862645149230957e-09, maxz - 0.0024807279696688056), (minx + 0.011137068271636963, -1.862645149230957e-09, maxz - 0.0025907604722306132), (minx + 0.011606022715568542, -1.862645149230957e-09, maxz - 0.002904107444919646), (minx + 0.011919364333152771, maxy, maxz - 0.0033730645664036274), (minx + 0.012029401957988739, maxy, minz + 0.003926236608184253), (minx + 0.011919364333152771, maxy, minz + 0.0033730643335729837), (minx + 0.011606022715568542, -1.862645149230957e-09, minz + 0.0029041077941656113), (minx + 0.011137068271636963, -1.862645149230957e-09, minz + 0.002590760588645935), (minx + 0.010583892464637756, -1.862645149230957e-09, minz + 0.0024807280860841274), (minx + 0.010030724108219147, -1.862645149230957e-09, minz + 0.002590760588645935), (minx + 0.00956176221370697, -1.862645149230957e-09, minz + 0.002904107444919646), (minx + 0.009248420596122742, -1.862645149230957e-09, minz + 0.0033730644499883056), (minx + 0.009138382971286774, -1.862645149230957e-09, maxz - 0.0039262363893523555), (minx + 0.009248420596122742, -1.862645149230957e-09, maxz - 0.0033730638679116964), (minx + 0.00956176221370697, -1.862645149230957e-09, maxz - 0.0029041070956736803), (minx + 0.010030724108219147, -1.862645149230957e-09, maxz - 0.0025907597737386823), (maxx - 0.0591098596341908, -0.017620893195271492, maxz), (maxx - 0.0591098596341908, -0.01611838862299919, maxz - 0.00029886653646826744), (maxx - 0.0591098596341908, -0.014844624325633049, maxz - 0.0011499673128128052), (maxx - 0.0591098596341908, -0.013993524014949799, maxz - 0.002423731260932982), (maxx - 0.0591098596341908, -0.013694657012820244, minz + 0.003926236289926277), (maxx - 0.0591098596341908, -0.013993524014949799, minz + 0.002423729980364442), (maxx - 0.0591098596341908, -0.014844624325633049, minz + 0.001149968709796667), (maxx - 0.0591098596341908, -0.016118386760354042, minz + 0.0002988663036376238), (maxx - 0.0591098596341908, -0.017620891332626343, minz), (maxx - 0.0591098596341908, -0.019123397767543793, minz + 0.00029886653646826744), (maxx - 0.0591098596341908, -0.020397160202264786, minz + 0.0011499675456434488), (maxx - 0.0591098596341908, -0.021248264238238335, minz + 0.0024237307952716947), (maxx - 0.0591098596341908, -0.02154713124036789, maxz - 0.003926236195012284), (maxx - 0.0591098596341908, -0.021248262375593185, maxz - 0.0024237297475337982), (maxx - 0.0591098596341908, -0.020397160202264786, maxz - 0.0011499666143208742), (maxx - 0.0591098596341908, -0.019123397767543793, maxz - 0.0002988646738231182)] # Faces myfaces = [(97, 96, 0, 1), (108, 107, 11, 12), (106, 105, 9, 10), (104, 103, 7, 8), (102, 101, 5, 6), (100, 99, 3, 4), (96, 111, 15, 0), (98, 97, 1, 2), (109, 108, 12, 13), (107, 106, 10, 11), (105, 104, 8, 9), (103, 102, 6, 7), (101, 100, 4, 5), (111, 110, 14, 15), (99, 98, 2, 3), (110, 109, 13, 14), (17, 16, 32, 33), (32, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33), (28, 27, 43, 44), (26, 25, 41, 42), (24, 23, 39, 40), (22, 21, 37, 38), (20, 19, 35, 36), (16, 31, 47, 32), (18, 17, 33, 34), (29, 28, 44, 45), (27, 26, 42, 43), (25, 24, 40, 41), (23, 22, 38, 39), (21, 20, 36, 37), (31, 30, 46, 47), (19, 18, 34, 35), (30, 29, 45, 46), (0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1), (97, 49, 48, 96), (108, 60, 59, 107), (106, 58, 57, 105), (104, 56, 55, 103), (102, 54, 53, 101), (100, 52, 51, 99), (96, 48, 63, 111), (98, 50, 49, 97), (109, 61, 60, 108), (107, 59, 58, 106), (105, 57, 56, 104), (103, 55, 54, 102), (101, 53, 52, 100), (111, 63, 62, 110), (99, 51, 50, 98), (110, 62, 61, 109), (65, 81, 80, 64), (80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95), (76, 92, 91, 75), (74, 90, 89, 73), (72, 88, 87, 71), (70, 86, 85, 69), (68, 84, 83, 67), (64, 80, 95, 79), (66, 82, 81, 65), (77, 93, 92, 76), (75, 91, 90, 74), (73, 89, 88, 72), (71, 87, 86, 70), (69, 85, 84, 68), (79, 95, 94, 78), (67, 83, 82, 66), (78, 94, 93, 77), (48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)] return myvertex, myfaces # ---------------------------------------------- # Create SKU code for inventory # ---------------------------------------------- def createunitsku(self, cabinet): # ------------------ # Wall or Floor # ------------------ if self.type_cabinet == "1": p1 = "F" else: p1 = "W" # ------------------ # Front type # ------------------ if cabinet.dType == "1" or cabinet.dType == "2" or cabinet.dType == "3" or cabinet.dType == "8": p2 = "D" # door elif cabinet.dType == "9" or cabinet.dType == "10": p2 = "L" # door elif cabinet.dType == "4" or cabinet.dType == "5" or cabinet.dType == "6" or cabinet.dType == "11": p2 = "G" # glass elif cabinet.dType == "7": p2 = "W" # drawers else: p2 = "N" # none # ------------------ # Door number # ------------------ if cabinet.dType == "1" or cabinet.dType == "2" or cabinet.dType == "3" or cabinet.dType == "4" \ or cabinet.dType == "5" or cabinet.dType == "6" or cabinet.dType == "9" or cabinet.dType == "10": p3 = "01" elif cabinet.dType == "7": p3 = "%02d" % cabinet.dNum elif cabinet.dType == "8" or cabinet.dType == "11": p3 = "02" else: p3 = "00" # ------------------ # Handles # ------------------ if cabinet.hand is True: p4 = 1 else: p4 = 0 # ------------------ # Shelves # ------------------ # noinspection PyBroadException try: if cabinet.dType == "7": p5 = "00" # drawers is always 0 else: p5 = "%02d" % cabinet.sNum except: p5 = "00" # ------------------ # Size # ------------------ x = cabinet.sX y = self.depth + cabinet.wY z = self.height + cabinet.wZ p6 = "%06.3fx%06.3fx%06.3f-%06.3f" % (x, y, z, self.thickness) # ------------------ # Door Size # ------------------ if cabinet.dType == "1" or cabinet.dType == "2" or cabinet.dType == "3" \ or cabinet.dType == "4" or cabinet.dType == "5" or cabinet.dType == "6": p7 = "%06.3f" % cabinet.sX elif cabinet.dType == "8" or cabinet.dType == "11": p7 = "%06.3f" % (cabinet.sX / 2) elif cabinet.dType == "9" or cabinet.dType == "10": # corners dwidth = cabinet.sX - self.depth - self.thickness - 0.001 p7 = "%06.3f" % dwidth else: p7 = "%06.3f" % 0 sku = "%s%s%s%s%s-%s-%s" % (p1, p2, p3, p4, p5, p6, p7) return sku