Update for changes in Blender's API
[blender-addons.git] / archimesh / achm_kitchen_maker.py
blobf9d981808771127e1dd6d312f5dba282231d3f5d
1 # ##### BEGIN GPL LICENSE BLOCK #####
3 # This program is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU General Public License
5 # as published by the Free Software Foundation; either version 2
6 # of the License, or (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software Foundation,
15 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 # ##### END GPL LICENSE BLOCK #####
19 # <pep8 compliant>
21 # ----------------------------------------------------------
22 # Automatic generation of kitchen cabinet
23 # Author: Antonio Vazquez (antonioya)
25 # ----------------------------------------------------------
26 import bpy
27 from math import pi, fabs
28 from copy import copy
29 from sys import exc_info
30 from datetime import datetime
31 from time import time
32 from bpy.types import Operator, PropertyGroup
33 from bpy.props import StringProperty, EnumProperty, FloatProperty, IntProperty, BoolProperty, CollectionProperty
34 from bpy_extras.io_utils import ExportHelper
35 from .achm_tools import *
37 # ----------------------------------------------------------
38 # Define rotation types
39 # ----------------------------------------------------------
40 RotationType_Default = 9
41 RotationType_R90CW = 1
42 RotationType_R90CCW = 2
43 RotationType_R180 = 3
46 # ----------------------------------------------------------
47 # Export menu UI
48 # ----------------------------------------------------------
49 class AchmExportInventory(Operator, ExportHelper):
50 bl_idname = "io_export.kitchen_inventory"
51 bl_description = 'Export kitchen inventory (.txt)'
52 bl_category = 'Archimesh'
53 bl_label = "Export"
55 # From ExportHelper. Filter filenames.
56 filename_ext = ".txt"
57 filter_glob = StringProperty(
58 default="*.txt",
59 options={'HIDDEN'},
62 filepath = StringProperty(
63 name="File Path",
64 description="File path used for exporting room data file",
65 maxlen=1024, default="",
68 # ----------------------------------------------------------
69 # Execute
70 # ----------------------------------------------------------
71 # noinspection PyUnusedLocal
72 def execute(self, context):
73 # noinspection PyBroadException
74 try:
75 # -------------------------------
76 # extract path and filename
77 # -------------------------------
78 (filepath, filename) = os.path.split(self.properties.filepath)
79 print('Exporting %s' % filename)
80 # -------------------------------
81 # Open output file
82 # -------------------------------
83 realpath = os.path.realpath(os.path.expanduser(self.properties.filepath))
84 fout = open(realpath, 'w')
86 st = datetime.fromtimestamp(time()).strftime('%Y-%m-%d %H:%M:%S')
87 fout.write("# Archimesh kitchen inventory\n")
88 fout.write("# " + st + "\n")
89 mylist = getinventory()
90 for e in mylist:
91 fout.write(e + "\n")
93 fout.close()
94 self.report({'INFO'}, realpath + "successfully exported")
95 except:
96 e = exc_info()[0]
97 self.report({'ERROR'}, "Unable to export inventory " + e)
99 return {'FINISHED'}
102 # ----------------------------------------------------------
103 # Generate inventory list
104 # ----------------------------------------------------------
105 def getinventory():
106 # Get List of boxes in the scene
107 unitobj = []
108 for obj in bpy.context.scene.objects:
109 # noinspection PyBroadException
110 try:
111 if obj["archimesh.sku"] is not None:
112 unitobj.extend([obj["archimesh.sku"]])
113 except:
114 pass
115 # ----------------------------------------
116 # Get number of unit structures (boxes)
117 # ----------------------------------------
118 boxes = []
119 boxestot = []
120 for u in unitobj:
121 key = u[:1] + u[8:28]
122 if key not in boxes:
123 boxes.extend([key])
124 boxestot.extend([1])
125 else:
126 x = boxes.index(key)
127 boxestot[x] += 1
128 # ----------------------------------------
129 # Get number of doors and drawer fronts
130 # ----------------------------------------
131 door = []
132 doortot = []
133 handles = 0
134 for u in unitobj:
135 if u[1:2] != "W":
136 w = float(u[36:42])
137 key = u[1:2] + "%06.3f" % w + u[22:28]
138 else: # Drawers
139 # calculate separation
140 sz = float(u[22:28])
141 gap = 0.001
142 dist = sz - (gap * int(u[2:4]))
143 space = dist / int(u[2:4])
144 key = u[1:2] + u[8:15] + "%06.3f" % space
146 n = int(u[2:4])
147 # handles
148 if u[4:5] == "1":
149 handles += n
150 if key not in door:
151 door.extend([key])
152 doortot.extend([n])
153 else:
154 x = door.index(key)
155 doortot[x] += n
156 # ----------------------------------------
157 # Get number of Shelves
158 # ----------------------------------------
159 shelves = []
160 shelvestot = []
161 for u in unitobj:
162 if int(u[5:7]) > 0:
163 w = float(u[8:14])
164 n = int(u[5:7])
165 th = float(u[29:35])
167 key = "%0.2f x %0.2f x %0.3f" % (w - (th * 2), float(u[15:21]) - th, th) # subtract board thickness
169 if key not in shelves:
170 shelves.extend([key])
171 shelvestot.extend([n])
172 else:
173 x = shelves.index(key)
174 shelvestot[x] += n
176 # ----------------------------------------
177 # Get Countertop size
178 # "T%06.3fx%06.3fx%06.3f-%06.3f"
179 # ----------------------------------------
180 t = 0
181 z = 0
182 for obj in bpy.context.scene.objects:
183 # noinspection PyBroadException
184 try:
185 if obj["archimesh.top_sku"] is not None:
186 u = obj["archimesh.top_sku"]
187 t += float(u[1:7])
188 z += float(u[22:28])
189 except:
190 pass
192 # ----------------------------------------
193 # Get Baseboard size
194 # ----------------------------------------
195 b = 0
196 btxt = None
197 for obj in bpy.context.scene.objects:
198 # noinspection PyBroadException
199 try:
200 if obj["archimesh.base_sku"] is not None:
201 u = obj["archimesh.base_sku"]
202 b += float(u[1:6])
203 btxt = "%0.3f x %0.3f" % (float(u[8:14]), float(u[15:21]))
204 except:
205 pass
207 # ----------------------------------------
208 # Prepare output data
209 # ----------------------------------------
210 output = []
211 output.extend(["Units\tDescription\tDimensions"])
212 for i in range(0, len(boxes)):
213 if boxes[i][:1] == "F":
214 typ = "Floor unit\t"
215 else:
216 typ = "Wall unit\t"
218 txt = "%0.2f x %0.2f x %0.2f" % (float(boxes[i][1:7]), float(boxes[i][8:14]), float(boxes[i][15:21]))
219 output.extend([str(boxestot[i]) + "\t" + typ + txt])
221 for i in range(0, len(door)):
222 if door[i][:1] == "D" or door[i][:1] == "L":
223 typ = "Solid door\t"
224 elif door[i][:1] == "G":
225 typ = "Glass door\t"
226 elif door[i][:1] == "W":
227 typ = "Drawer front\t"
228 else:
229 typ = "????\t"
231 txt = "%0.3f x %0.3f" % (float(door[i][1:7]), float(door[i][8:14]))
232 output.extend([str(doortot[i]) + "\t" + typ + txt])
234 for i in range(0, len(shelves)):
235 output.extend([str(shelvestot[i]) + "\tShelf\t" + shelves[i]])
237 output.extend([str(handles) + "\tHandle"])
238 if t > 0:
239 output.extend([str(round(t, 2)) + "\tCountertop (linear length)"])
240 if z > 0:
241 output.extend([str(round(z, 2)) + "\tCountertop wall piece(linear length)"])
242 if b > 0:
243 output.extend([str(round(b, 2)) + "\tBaseboard (linear length) " + btxt])
245 return output
248 # ------------------------------------------------------------------
249 # Define property group class for cabinet properties
250 # This is managed as an array of objects
251 # ------------------------------------------------------------------
252 class CabinetProperties(PropertyGroup):
253 # Cabinet width
254 sX = FloatProperty(
255 name='width', min=0.001, max=10, default=0.60, precision=3,
256 description='Cabinet width',
258 wY = FloatProperty(
259 name='', min=-10, max=10, default=0, precision=3,
260 description='Modify depth size',
262 wZ = FloatProperty(
263 name='', min=-10, max=10, default=0, precision=3,
264 description='Modify height size',
267 # Cabinet position shift
268 pX = FloatProperty(
269 name='', min=-10, max=10, default=0, precision=3,
270 description='Position x shift',
272 pY = FloatProperty(
273 name='', min=-10, max=10, default=0, precision=3,
274 description='Position y shift',
276 pZ = FloatProperty(
277 name='', min=-10, max=10, default=0, precision=3,
278 description='Position z shift',
281 # Door type
282 dType = EnumProperty(
283 items=(
284 ('1', "Single R", ""),
285 ('2', "Single L", ""),
286 ('3', "Single T", ""),
287 ('4', "Glass R", ""),
288 ('5', "Glass L", ""),
289 ('6', "Glass T", ""),
290 ('7', "Drawers", ""),
291 ('8', "Double", ""),
292 ('11', "Double Glass", ""),
293 ('10', "Corner R", ""),
294 ('9', "Corner L", ""),
295 ('99', "None", "")),
296 name="Door",
297 description="Type of front door or drawers",
300 # Shelves
301 sNum = IntProperty(
302 name='Shelves', min=0, max=10, default=1,
303 description='Number total of shelves',
305 # Drawers
306 dNum = IntProperty(
307 name='Num', min=1, max=10, default=3,
308 description='Number total of drawers',
310 # Glass Factor
311 gF = FloatProperty(
312 name='', min=0.001, max=1, default=0.1, precision=3,
313 description='Glass ratio',
315 # Handle flag
316 hand = BoolProperty(
317 name="Handle",
318 description="Create a handle", default=True,
320 # Left baseboard
321 bL = BoolProperty(
322 name="Left Baseboard",
323 description="Create a left baseboard", default=False,
325 # Right baseboard
326 bR = BoolProperty(
327 name="Right Baseboard",
328 description="Create a left baseboard", default=False,
330 # Fill countertop spaces
331 tC = BoolProperty(
332 name="Countertop fill",
333 description="Fill empty spaces with countertop", default=True,
335 # Add countertop edge
336 tE = BoolProperty(
337 name="Countertop edge",
338 description="Add edge to countertop", default=True,
340 # cabinet rotation
341 rotate = EnumProperty(
342 items=(
343 ('9', "Default", ""),
344 ('1', "90 CW", ""),
345 ('2', "90 CCW", ""),
346 ('3', "180", ""),
348 name="Rot",
349 description="Rotate cabinet relative to previous one",
353 bpy.utils.register_class(CabinetProperties)
356 # ------------------------------------------------------------------
357 # Define UI class
358 # Kitchens
359 # ------------------------------------------------------------------
360 class AchmKitchen(Operator):
361 bl_idname = "mesh.archimesh_kitchen"
362 bl_label = "Cabinets"
363 bl_description = "Cabinet Generator"
364 bl_category = 'Archimesh'
365 bl_options = {'REGISTER', 'UNDO'}
367 # Define properties
368 type_cabinet = EnumProperty(
369 items=(('1', "Floor", ""),
370 ('2', "Wall", "")),
371 name="Type",
372 description="Type of cabinets",
374 oldtype = type_cabinet
376 thickness = FloatProperty(
377 name='Thickness', min=0.001, max=5, default=0.018, precision=3,
378 description='Board thickness',
380 depth = FloatProperty(
381 name='Depth', min=0.001, max=50, default=0.59, precision=3,
382 description='Default cabinet depth',
384 height = FloatProperty(
385 name='Height', min=0.001, max=50, default=0.70, precision=3,
386 description='Default cabinet height',
388 handle = EnumProperty(
389 items=(
390 ('1', "Model 1", ""),
391 ('2', "Model 2", ""),
392 ('3', "Model 3", ""),
393 ('4', "Model 4", ""),
394 ('5', "Model 5", ""),
395 ('6', "Model 6", ""),
396 ('7', "Model 7", ""),
397 ('8', "Model 8", ""),
398 ('9', "None", ""),
400 name="Handle",
401 description="Type of handle",
403 handle_x = FloatProperty(
404 name='', min=0.001, max=10,
405 default=0.05, precision=3,
406 description='Displacement in X relative position (limited to door size)',
408 handle_z = FloatProperty(
409 name='', min=0.001, max=10,
410 default=0.05, precision=3,
411 description='Displacement in Z relative position (limited to door size)',
414 baseboard = BoolProperty(
415 name="Baseboard",
416 description="Create a baseboard automatically",
417 default=True,
419 baseheight = FloatProperty(
420 name='height', min=0.001, max=10,
421 default=0.16, precision=3,
422 description='Baseboard height',
424 basefactor = FloatProperty(
425 name='sink', min=0, max=1,
426 default=0.90, precision=3,
427 description='Baseboard sink',
430 countertop = BoolProperty(
431 name="Countertop",
432 description="Create a countertop automatically (only default cabinet height)",
433 default=True,
435 counterheight = FloatProperty(
436 name='height', min=0.001, max=10,
437 default=0.02, precision=3,
438 description='Countertop height',
440 counterextend = FloatProperty(
441 name='extend', min=0.001, max=10,
442 default=0.03, precision=3,
443 description='Countertop extent',
446 fitZ = BoolProperty(
447 name="Floor origin in Z=0",
448 description="Use Z=0 axis as vertical origin floor position",
449 default=True,
451 moveZ = FloatProperty(
452 name='Z position', min=0.001, max=10,
453 default=1.5, precision=3,
454 description='Wall cabinet Z position from floor',
457 cabinet_num = IntProperty(
458 name='Number of Cabinets', min=1, max=30,
459 default=1,
460 description='Number total of cabinets in the Kitchen',
462 cabinets = CollectionProperty(type=CabinetProperties)
464 # Materials
465 crt_mat = BoolProperty(
466 name="Create default Cycles materials",
467 description="Create default materials for Cycles render",
468 default=True,
471 # -----------------------------------------------------
472 # Draw (create UI interface)
473 # -----------------------------------------------------
474 # noinspection PyUnusedLocal
475 def draw(self, context):
476 layout = self.layout
477 space = bpy.context.space_data
478 if not space.local_view:
479 # Imperial units warning
480 if bpy.context.scene.unit_settings.system == "IMPERIAL":
481 row = layout.row()
482 row.label("Warning: Imperial units not supported", icon='COLOR_RED')
484 box = layout.box()
485 row = box.row()
486 row.prop(self, 'type_cabinet')
488 row.prop(self, 'thickness')
489 row = box.row()
490 row.prop(self, 'depth')
491 row.prop(self, 'height')
492 row = box.row()
493 row.prop(self, 'handle')
494 if self.handle != "9":
495 row.prop(self, 'handle_x')
496 row.prop(self, 'handle_z')
498 if self.type_cabinet == "1":
499 row = box.row()
500 row.prop(self, "countertop")
501 if self.countertop:
502 row.prop(self, "counterheight")
503 row.prop(self, "counterextend")
504 row = box.row()
505 row.prop(self, 'baseboard')
506 if self.baseboard:
507 row.prop(self, 'baseheight')
508 row.prop(self, 'basefactor', slider=True)
510 row = box.row()
511 row.prop(self, 'fitZ')
512 if self.type_cabinet == "2":
513 row.prop(self, 'moveZ')
515 # Cabinet number
516 row = box.row()
517 row.prop(self, 'cabinet_num')
518 # Add menu for cabinets
519 if self.cabinet_num > 0:
520 for idx in range(0, self.cabinet_num):
521 box = layout.box()
522 add_cabinet(self, box, idx + 1, self.cabinets[idx])
524 box = layout.box()
525 if not context.scene.render.engine == 'CYCLES':
526 box.enabled = False
527 box.prop(self, 'crt_mat')
528 else:
529 row = layout.row()
530 row.label("Warning: Operator does not work in local view mode", icon='ERROR')
532 # -----------------------------------------------------
533 # Execute
534 # -----------------------------------------------------
535 # noinspection PyUnusedLocal
536 def execute(self, context):
537 if bpy.context.mode == "OBJECT":
538 # Set default values
539 if self.oldtype != self.type_cabinet:
540 if self.type_cabinet == "1": # Floor
541 self.depth = 0.59
542 self.height = 0.70
544 if self.type_cabinet == "2": # Wall
545 self.depth = 0.35
546 self.height = 0.70
547 self.oldtype = self.type_cabinet
549 # Create all elements
550 for i in range(len(self.cabinets) - 1, self.cabinet_num):
551 self.cabinets.add()
553 # Create cabinets
554 create_kitchen_mesh(self)
555 return {'FINISHED'}
556 else:
557 self.report({'WARNING'}, "Archimesh: Option only valid in Object mode")
558 return {'CANCELLED'}
561 # -----------------------------------------------------
562 # Add cabinet parameters
563 # -----------------------------------------------------
564 def add_cabinet(self, box, num, cabinet):
565 doortype = cabinet.dType
566 row = box.row()
567 row.label("Cabinet " + str(num))
568 row.prop(cabinet, 'sX')
570 row = box.row()
571 row.prop(cabinet, 'wY')
572 row.prop(cabinet, 'wZ')
573 row.prop(cabinet, 'rotate')
575 row = box.row()
576 row.prop(cabinet, 'pX')
577 row.prop(cabinet, 'pY')
578 row.prop(cabinet, 'pZ')
580 row = box.row()
581 row.prop(cabinet, 'dType')
582 if doortype == "7": # Drawers
583 row.prop(cabinet, 'dNum') # drawers number
584 else:
585 row.prop(cabinet, 'sNum') # shelves number
586 # Glass ratio
587 if doortype == "4" or doortype == "5" or doortype == "6" or doortype == "11":
588 row.prop(cabinet, 'gF', slider=True) # shelves number
589 # Handle
590 row = box.row()
591 if self.handle != "9":
592 row.prop(cabinet, 'hand')
593 if self.baseboard and self.type_cabinet == "1":
594 row.prop(cabinet, 'bL')
595 row.prop(cabinet, 'bR')
597 if self.countertop and self.type_cabinet == "1":
598 row = box.row()
599 row.prop(cabinet, 'tC')
600 row.prop(cabinet, 'tE')
603 # ------------------------------------------------------------------------------
604 # Generate mesh data
605 # All custom values are passed using self container (self.myvariable)
606 # ------------------------------------------------------------------------------
607 def create_kitchen_mesh(self):
608 # deactivate others
609 for o in bpy.data.objects:
610 if o.select is True:
611 o.select = False
612 bpy.ops.object.select_all(False)
613 # Create cabinets
614 generate_cabinets(self)
616 return
619 # ------------------------------------------------------------------------------
620 # Generate cabinet
621 # All custom values are passed using self container (self.myvariable)
622 # ------------------------------------------------------------------------------
623 def generate_cabinets(self):
625 boxes = []
626 bases = []
627 location = bpy.context.scene.cursor_location
628 myloc = copy(location) # copy location to keep 3D cursor position
629 # Fit to floor
630 if self.fitZ:
631 myloc[2] = 0
632 # Move to wall position
633 if self.type_cabinet == "2": # wall
634 myloc[2] = myloc[2] + self.moveZ
635 # Baseboard
636 if self.type_cabinet == "1" and self.baseboard: # floor
637 myloc[2] = myloc[2] + self.baseheight # add baseboard position for bottom
639 # Create cabinets
640 lastx = myloc[0]
641 lasty = myloc[1]
642 lastrot = 0 # last rotation
643 # ------------------------------------------------------------------------------
644 # Cabinets
646 # By default all cabinets are created in X axis and later are rotated if needed
647 # the default rotation means keep last rotation, not 0, so if the previous
648 # cabinet is 90CW, the next one will be the same. To back to 0, you must select
649 # 90 CCW.
650 # ------------------------------------------------------------------------------
651 for i in range(0, self.cabinet_num):
652 mydata = create_box(self.type_cabinet, "Cabinet" + str(i + 1),
653 self.thickness,
654 self.cabinets[i].sX, self.depth + self.cabinets[i].wY, self.height + self.cabinets[i].wZ,
655 self.cabinets[i].pX + lastx,
656 self.cabinets[i].pY + lasty,
657 myloc[2] + self.cabinets[i].pZ,
658 self.cabinets[i].dType, self.cabinets[i].dNum, self.cabinets[i].sNum, self.cabinets[i].gF,
659 self.crt_mat,
660 self.cabinets[i].hand, self.handle, self.handle_x, self.handle_z, self.depth)
661 mybox = mydata[0]
662 # LastX is the sum of initial position + width of the cabinet.
663 lastx = mydata[1]
664 # add SKU property
665 sku = createunitsku(self, self.cabinets[i])
666 mydata[0]["archimesh.sku"] = sku
668 # Save rotation type
669 myrotationtype = int(self.cabinets[i].rotate)
671 # ---------------------------------------------------------
672 # Calculate new rotation angle
674 # ---------------------------------------------------------
675 myrot = lastrot
676 # ----------
677 # Default
678 # ----------
679 if myrotationtype == RotationType_Default:
680 myrot = myrot # do no change rotation
681 # ----------
682 # 90 CW
683 # ----------
684 if myrotationtype == RotationType_R90CW:
685 myrot += -pi / 2
686 # ----------
687 # 90 CCW
688 # ----------
689 if myrotationtype == RotationType_R90CCW:
690 myrot += pi / 2
691 # ----------
692 # 180
693 # ----------
694 if myrotationtype == RotationType_R180:
695 myrot = myrot + pi
697 # Save the rotation for next cabinet
698 lastrot = myrot
699 angle = myrot - ((2 * pi) * (myrot // (2 * pi))) # clamp one revolution
701 # -------------------------------------------
702 # Countertop (only default height cabinet)
703 # 9-Default, 1-90CW, 2-90CCW, 3-180
704 # -------------------------------------------
705 if self.countertop and self.type_cabinet == "1" and self.cabinets[i].wZ == 0:
706 w = self.cabinets[i].sX
707 # fill (depend on orientation)
708 if self.cabinets[i].tC:
709 # 0 or 180 degrees
710 if angle == 0 or angle == pi:
711 w += fabs(self.cabinets[i].pX)
712 # 90 or 270 degrees
713 if angle == (3 * pi) / 2 or angle == pi / 2:
714 w += fabs(self.cabinets[i].pY)
716 mycountertop = create_countertop("Countertop" + str(i + 1),
718 self.depth + self.cabinets[i].wY,
719 self.counterheight, self.counterextend,
720 self.crt_mat, self.cabinets[i].dType, self.depth,
721 self.cabinets[i].tE)
722 # -------------------------------
723 # Fill countertop spaces
724 # -------------------------------
725 if self.cabinets[i].tC:
726 # Default
727 if angle == 0:
728 if self.cabinets[i].pX >= 0:
729 mycountertop.location[0] = -self.cabinets[i].pX
730 else:
731 mycountertop.location[0] = 0
733 # 90CW
734 if angle == (3 * pi) / 2:
735 if self.cabinets[i].pY >= 0:
736 mycountertop.location[0] = 0
737 else:
738 mycountertop.location[0] = self.cabinets[i].pY
739 # 90CCW
740 if angle == pi / 2:
741 if self.cabinets[i].pY >= 0:
742 mycountertop.location[0] = self.cabinets[i].pY * -1
743 else:
744 mycountertop.location[0] = 0
745 # 180
746 if angle == pi:
747 mycountertop.location[0] = 0
749 mycountertop.location[2] = self.height
750 mycountertop.parent = mydata[0]
751 # --------------------
752 # add countertop SKU
753 # --------------------
754 t = w
755 # if corner, remove size
756 if self.cabinets[i].dType == "9" or self.cabinets[i].dType == "10":
757 t = t - self.cabinets[i].sX
759 mycountertop["archimesh.top_sku"] = "T%06.3fx%06.3fx%06.3f-%06.3f" % (t,
760 self.depth + self.cabinets[
761 i].wY + self.counterextend,
762 self.counterheight,
764 # ----------------
765 # Baseboard
766 # ----------------
767 if self.baseboard and self.type_cabinet == "1":
768 gap = (self.depth + self.cabinets[i].wY) - ((self.depth + self.cabinets[i].wY) * self.basefactor)
769 mybase = create_baseboard("Baseboard" + str(i + 1),
770 self.cabinets[i].sX, self.thickness, self.baseheight,
771 self.crt_mat, self.cabinets[i].bL, self.cabinets[i].bR,
772 (self.depth + self.cabinets[i].wY) * self.basefactor, self.cabinets[i].dType, gap)
773 bases.extend([mybase])
774 mybase.location[1] = (self.depth + self.cabinets[i].wY) * self.basefactor * -1
775 mybase.location[2] = -self.baseheight
776 mybase.parent = mydata[0]
777 # --------------------
778 # add base SKU
779 # --------------------
780 t = self.cabinets[i].sX
781 # Add sides
782 if self.cabinets[i].bR is True:
783 t = t + (self.depth + self.cabinets[i].wY) * self.basefactor
784 if self.cabinets[i].bL is True:
785 t = t + (self.depth + self.cabinets[i].wY) * self.basefactor
787 mybase["archimesh.base_sku"] = "B%06.3fx%06.3fx%06.3f" % (t, self.thickness, self.baseheight)
789 # Rotate
790 mybox.rotation_euler = (0, 0, myrot)
792 # -----------------------------------------
793 # Calculate new position for next cabinet
794 # -----------------------------------------
795 xm = 0
796 ym = 0
798 # 0 degrees
799 if angle == 0:
800 lastx = lastx
801 lasty = lasty
802 # 90 degrees
803 if angle == pi / 2:
804 ym = -self.cabinets[i].sX
805 lastx = lastx - self.cabinets[i].sX - self.cabinets[i].pX
806 lasty = lasty + self.cabinets[i].sX + self.cabinets[i].pY
807 # 180 degrees
808 if angle == pi:
809 lastx -= 2 * (self.cabinets[i].sX + self.cabinets[i].pX)
810 # 270 degrees
811 if angle == (3 * pi) / 2:
812 xm = self.depth - self.counterextend
813 lastx = lastx - self.cabinets[i].sX - self.cabinets[i].pX
814 lasty = lasty - self.cabinets[i].sX - self.cabinets[i].pX + self.cabinets[i].pY
816 myl = mybox.location
817 # noinspection PyUnresolvedReferences
818 mybox.location = (myl.x + xm, myl.y + ym, myl.z)
820 # ---------------------------------------
821 # Save box
822 # ---------------------------------------
823 boxes.extend([mybox])
825 # refine cabinets
826 for box in boxes:
827 remove_doubles(box)
828 set_normals(box)
830 # refine baseboard
831 for base in bases:
832 remove_doubles(base)
833 set_normals(base)
835 # Create materials
836 if self.crt_mat and bpy.context.scene.render.engine == 'CYCLES':
837 mat = create_diffuse_material("Cabinet_material", False, 0.8, 0.8, 0.8)
838 for box in boxes:
839 set_material(box, mat)
841 return
844 # ------------------------------------------------------------------------------
845 # Create cabinet box
847 # thickness: wood thickness
848 # sX: Size in X axis
849 # sY: Size in Y axis
850 # sZ: Size in Z axis
851 # pX: position X axis
852 # pY: position Y axis
853 # pZ: position Z axis
854 # doorType: Type of door or drawers
855 # drawers: Number of drawers
856 # shelves: Number of shelves
857 # gF: Glass size factor
858 # mat: Flag for creating materials
859 # handle: handle visibility flag
860 # handle_model: Type of handle
861 # handle_x: Position of handle in X axis
862 # handle_z: Position of handle in Z axis
863 # depth: Default depth
864 # ------------------------------------------------------------------------------
865 def create_box(type_cabinet, objname, thickness, sx, sy, sz, px, py, pz, doortype, drawers, shelves, gf, mat,
866 handle, handle_model, handle_x, handle_z, depth):
867 myvertex = []
868 myfaces = []
869 # external faces
870 myvertex.extend(
871 [(0, 0, 0), (0, -sy, 0), (0, -sy, sz), (0, 0, sz), (sx, 0, 0), (sx, -sy, 0), (sx, -sy, sz), (sx, 0, sz)])
872 myfaces.extend([(0, 1, 2, 3), (4, 5, 6, 7), (0, 4, 7, 3), (0, 1, 5, 4), (3, 2, 6, 7)])
874 # internal faces
875 myvertex.extend([(thickness, -thickness, thickness), (thickness, -sy, thickness),
876 (thickness, -sy, sz - thickness), (thickness, -thickness, sz - thickness),
877 (sx - thickness, -thickness, thickness), (sx - thickness, -sy, thickness),
878 (sx - thickness, -sy, sz - thickness), (sx - thickness, -thickness, sz - thickness)])
880 myfaces.extend([(8, 9, 10, 11), (12, 13, 14, 15), (8, 12, 15, 11), (8, 9, 13, 12), (11, 10, 14, 15)])
881 myfaces.extend([(1, 9, 10, 2), (2, 6, 14, 10), (6, 5, 13, 14), (5, 1, 9, 13)])
883 # -----------------
884 # shelves
885 # -----------------
886 v = 16 # vertice number
887 if doortype != "7": # Drawers
888 # calculate separation
889 dist = sz - (thickness * 2)
890 space = dist / (shelves + 1)
891 posz1 = thickness + space
893 for x in range(shelves):
894 posz2 = posz1 - thickness
895 myvertex.extend([(thickness, -thickness, posz1), (thickness, -sy, posz1),
896 (thickness, -sy, posz2), (thickness, -thickness, posz2),
897 (sx - thickness, -thickness, posz1), (sx - thickness, -sy, posz1),
898 (sx - thickness, -sy, posz2), (sx - thickness, -thickness, posz2)])
900 myfaces.extend([(v, v + 1, v + 2, v + 3), (v + 4, v + 5, v + 6, v + 7), (v, v + 4, v + 7, v + 3),
901 (v, v + 1, v + 5, v + 4), (v + 3, v + 2, v + 6, v + 7), (v + 1, v + 2, v + 6, v + 5)])
902 v += 8
903 posz1 += space
905 mymesh = bpy.data.meshes.new(objname)
906 myobject = bpy.data.objects.new(objname, mymesh)
908 myobject.location[0] = px
909 myobject.location[1] = py
910 myobject.location[2] = pz
911 bpy.context.scene.objects.link(myobject)
913 mymesh.from_pydata(myvertex, [], myfaces)
914 mymesh.update(calc_edges=True)
916 # ---------------------------------------
917 # Drawers
918 # ---------------------------------------
919 if doortype == "7": # Drawers
920 # calculate separation
921 gap = 0.001
922 dist = sz - (gap * drawers)
923 space = dist / drawers
924 posz1 = 0
926 for x in range(drawers):
927 mydrawer = create_drawer("Drawer", thickness, sx, sy, space, mat, handle,
928 handle_model, handle_z)
929 mydrawer.location[1] = -sy
930 mydrawer.location[2] = posz1
931 mydrawer.parent = myobject
932 remove_doubles(mydrawer)
933 set_normals(mydrawer)
934 posz1 = posz1 + space + gap # gap
936 # ---------------------------------------
937 # Doors
938 # ---------------------------------------
939 if doortype != "99" and doortype != "7": # None or Drawers
940 if doortype == "1" or doortype == "2" or doortype == "3" or doortype == "4" \
941 or doortype == "5" or doortype == "6": # single door
942 mydoor = create_door(type_cabinet, objname + "_Door", thickness, sx, sz, doortype, gf, mat, handle,
943 handle_model, handle_x, handle_z, 0.001)
944 mydoor.parent = myobject
945 mydoor.location[1] = -sy - 0.001 # add 1 mm gap
946 remove_doubles(mydoor)
947 set_normals(mydoor)
949 else: # double doors
950 if doortype == "8" or doortype == "10" or doortype == "11":
951 # Glass or not
952 if doortype != "11":
953 typ = "2"
954 else:
955 typ = "5"
957 # Adjust corner doors
958 dwidth = sx / 2
959 if doortype == "10":
960 dwidth = sx - depth - thickness - 0.001
962 mydoor1 = create_door(type_cabinet, objname + "_Door_L", thickness, dwidth, sz, typ, gf, mat,
963 handle,
964 handle_model, handle_x, handle_z, 0.0005) # left
965 mydoor1.location[1] = -sy - 0.001 # add 1 mm gap
966 mydoor1.parent = myobject
967 remove_doubles(mydoor1)
968 set_normals(mydoor1)
970 if doortype == "8" or doortype == "9" or doortype == "11":
971 # Glass or not
972 if doortype != "11":
973 typ = "1"
974 else:
975 typ = "4"
977 # Adjust corner doors
978 dwidth = sx / 2
979 if doortype == "9":
980 dwidth = sx - depth - thickness - 0.001
982 mydoor2 = create_door(type_cabinet, objname + "_Door_R", thickness, dwidth, sz, typ, gf, mat,
983 handle,
984 handle_model, handle_x, handle_z, 0.0005) # right
985 mydoor2.location[1] = -sy - 0.001 # add 1 mm gap
986 mydoor2.location[0] = sx
987 mydoor2.parent = myobject
988 remove_doubles(mydoor2)
989 set_normals(mydoor2)
991 return myobject, px + sx
994 # ------------------------------------------------------------------------------
995 # Create baseboard
997 # sX: Size in X axis
998 # sY: Size in Y axis
999 # sZ: Size in Z axis
1000 # mat: Flag for creating materials
1001 # bL: Flag to create left side
1002 # bR: Flag to create right side
1003 # depth: depth or position of baseboard
1004 # gap: space to close in corners
1005 # ------------------------------------------------------------------------------
1006 def create_baseboard(objname, sx, sy, sz, mat, bl, br, depth, doortype, gap):
1007 myvertex = []
1008 myfaces = []
1009 p = 0
1010 # external faces
1011 myvertex.extend(
1012 [(0, 0, 0), (0, -sy, 0), (0, -sy, sz), (0, 0, sz), (sx, 0, 0), (sx, -sy, 0), (sx, -sy, sz), (sx, 0, sz)])
1013 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)])
1014 # left side
1015 f = 8
1016 if bl:
1017 myvertex.extend(
1018 [(0, 0, 0), (0, depth, 0), (0, depth, sz), (0, 0, sz), (sy, 0, 0), (sy, depth, 0), (sy, depth, sz),
1019 (sy, 0, sz)])
1020 myfaces.extend(
1021 [(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),
1022 (f + 3, f + 2, f + 6, f + 7), (f + 1, f + 5, f + 6, f + 2)])
1023 f += 8
1024 # right side
1025 if br:
1026 p = sx - sy
1027 myvertex.extend([(p, 0, 0), (p, depth, 0), (p, depth, sz), (p, 0, sz), (p + sy, 0, 0), (p + sy, depth, 0),
1028 (p + sy, depth, sz), (p + sy, 0, sz)])
1029 myfaces.extend(
1030 [(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),
1031 (f + 3, f + 2, f + 6, f + 7), (f + 1, f + 5, f + 6, f + 2)])
1032 f += 8
1033 # Corners
1034 if doortype == "9" or doortype == "10":
1035 if doortype == "9":
1036 p = depth + sy
1037 if doortype == "10":
1038 p = sx - depth - sy
1040 size = gap * -2
1041 myvertex.extend([(p, -sy, 0), (p, size, 0), (p, size, sz), (p, -sy, sz), (p + sy, -sy, 0), (p + sy, size, 0),
1042 (p + sy, size, sz), (p + sy, -sy, sz)])
1043 myfaces.extend(
1044 [(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),
1045 (f + 3, f + 2, f + 6, f + 7), (f + 1, f + 5, f + 6, f + 2)])
1047 mymesh = bpy.data.meshes.new(objname)
1048 mybaseboard = bpy.data.objects.new(objname, mymesh)
1050 mybaseboard.location[0] = 0
1051 mybaseboard.location[1] = 0
1052 mybaseboard.location[2] = 0
1053 bpy.context.scene.objects.link(mybaseboard)
1055 mymesh.from_pydata(myvertex, [], myfaces)
1056 mymesh.update(calc_edges=True)
1058 # Material
1059 if mat and bpy.context.scene.render.engine == 'CYCLES':
1060 mat = create_diffuse_material("Baseboard_material", False, 0.8, 0.8, 0.8)
1061 set_material(mybaseboard, mat)
1063 return mybaseboard
1066 # ------------------------------------------------------------------------------
1067 # Create Countertop
1069 # sX: Size in X axis
1070 # sY: Size in Y axis
1071 # sZ: Size in Z axis
1072 # mat: Flag for creating materials
1073 # doorType: Type of door
1074 # depth: Depth of the cabinets
1075 # edge: add countertop edge
1076 # ------------------------------------------------------------------------------
1077 def create_countertop(objname, sx, sy, sz, over, mat, doortype, depth, edge):
1078 oy = 0.02
1079 oz = 0.05 + sz
1081 myvertex = []
1082 myfaces = []
1083 # if corner the size is less
1084 ts = 0
1085 tx = sx
1087 if doortype == "9":
1088 ts = sx - (sx - over - depth)
1089 tx = sx
1091 if doortype == "10":
1092 ts = 0
1093 tx = sx - over - depth
1095 # external faces
1096 myvertex.extend([(ts, 0, 0), (ts, -sy - over, 0), (ts, -sy - over, sz), (ts, 0, sz),
1097 (tx, 0, 0), (tx, -sy - over, 0), (tx, -sy - over, sz), (tx, 0, sz)])
1098 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)])
1099 # Back
1100 ts = 0
1101 tx = sx
1103 if doortype == "9":
1104 ts = oy
1106 if doortype == "10":
1107 tx -= oy
1108 # Add edge
1109 if edge is True:
1110 myvertex.extend([(ts, 0, sz), (ts, -oy, sz), (ts, -oy, oz), (ts, 0, oz),
1111 (tx, 0, sz), (tx, -oy, sz), (tx, -oy, oz), (tx, 0, oz)])
1112 myfaces.extend(
1113 [(8, 9, 10, 11), (12, 13, 14, 15), (8, 12, 15, 11), (8, 9, 13, 12), (11, 10, 14, 15), (9, 13, 14, 10)])
1115 mymesh = bpy.data.meshes.new(objname)
1116 mycountertop = bpy.data.objects.new(objname, mymesh)
1118 mycountertop.location[0] = 0
1119 mycountertop.location[1] = 0
1120 mycountertop.location[2] = 0
1121 bpy.context.scene.objects.link(mycountertop)
1123 mymesh.from_pydata(myvertex, [], myfaces)
1124 mymesh.update(calc_edges=True)
1126 # Material
1127 if mat and bpy.context.scene.render.engine == 'CYCLES':
1128 mat = create_diffuse_material("countertop_material", False, 0, 0, 0, 0.2, 0.2, 0.2, 0.15)
1129 set_material(mycountertop, mat)
1131 return mycountertop
1134 # ------------------------------------------------------------------------------
1135 # Create cabinet door
1137 # type_cabinet: Type of cabinet (floor or wall)
1138 # objName: Name of the created object
1139 # thickness: wood thickness
1140 # sX: Size in X axis
1141 # sY: Size in Y axis
1142 # sZ: Size in Z axis
1143 # doorType: Type of door or drawers
1144 # gF: Glass size factor
1145 # mat: Flag for creating materials
1146 # handle: handle visibility flag
1147 # handle_model: Type of handle
1148 # handle_x: Position of handle in X axis
1149 # handle_z: Position of handle in Z axis
1150 # gapX: size of the horizontal gap
1151 # ------------------------------------------------------------------------------
1152 def create_door(type_cabinet, objname, thickness, sx, sz, doortype, gf, mat, handle, handle_model, handle_x,
1153 handle_z, gapx):
1155 myvertex = []
1156 myfaces = []
1158 # Left open
1159 f = -1 # right
1160 if doortype == "2" or doortype == "5" or doortype == "10":
1161 f = 1
1162 # add small gap in width
1163 sx = sx - gapx
1164 # add small gap in top zone
1165 sz -= 0.002
1166 # External Frame
1167 myvertex.extend([(0, 0, 0), (0, -thickness, 0), (0, -thickness, sz), (0, 0, sz), (sx * f, 0, 0),
1168 (sx * f, -thickness, 0), (sx * f, -thickness, sz), (sx * f, 0, sz)])
1169 myfaces.extend([(0, 1, 2, 3), (4, 5, 6, 7), (0, 1, 5, 4), (3, 2, 6, 7)])
1170 # ---------------
1171 # Solid door
1172 # ---------------
1173 if doortype == "1" or doortype == "2" or doortype == "3" \
1174 or doortype == "8" or doortype == "9" or doortype == "10":
1175 myfaces.extend([(0, 4, 7, 3), (1, 2, 6, 5)])
1176 # ---------------
1177 # Glass door
1178 # ---------------
1179 if doortype == "4" or doortype == "5" or doortype == "6" or doortype == "11":
1180 w = sx * gf # calculate frame size W
1181 h = sz * gf # calculate frame size V
1183 myvertex.extend([(w * f, 0, h), (w * f, -thickness, h), (w * f, -thickness, sz - h), (w * f, 0, sz - h),
1184 ((sx - w) * f, 0, h),
1185 ((sx - w) * f, -thickness, h), ((sx - w) * f, -thickness, sz - h), ((sx - w) * f, 0, sz - h)])
1186 myfaces.extend([(8, 9, 10, 11), (12, 13, 14, 15), (8, 11, 15, 12), (10, 11, 15, 14), (8, 12, 13, 9),
1187 (1, 9, 10, 2), (5, 13, 14, 6), (6, 2, 10, 14), (5, 1, 9, 13),
1188 (0, 3, 11, 8), (12, 15, 7, 4), (4, 0, 8, 12), (11, 3, 7, 15)])
1190 mymesh = bpy.data.meshes.new(objname)
1191 mydoor = bpy.data.objects.new(objname, mymesh)
1192 if f == -1:
1193 mydoor.location[0] = sx
1194 else:
1195 mydoor.location[0] = 0
1197 mydoor.location[1] = 0
1198 mydoor.location[2] = 0
1199 bpy.context.scene.objects.link(mydoor)
1201 mymesh.from_pydata(myvertex, [], myfaces)
1202 mymesh.update(calc_edges=True)
1204 # ----------------------------------------------
1205 # Handles
1206 # RT: Put handle in right side top
1207 # LT: Put handle in left side top
1208 # RB: Put handle in right side bottom
1209 # LB: Put handle in left side bottom
1210 # T: Put handle in top side middle
1211 # B: Put handle in bottom side middle
1213 # The position is reverse to the open direction
1214 # of the door
1215 # ----------------------------------------------
1216 hpos = "RT" # Right by default
1217 if handle:
1218 # -----------------
1219 # Floor units
1220 # -----------------
1221 if type_cabinet == "1":
1222 if doortype == "1" or doortype == "4" or doortype == "9": # Right
1223 hpos = "LT"
1224 if doortype == "2" or doortype == "5" or doortype == "10": # Left
1225 hpos = "RT"
1226 if doortype == "3" or doortype == "6":
1227 hpos = "T"
1228 # -----------------
1229 # Wall units
1230 # -----------------
1231 if type_cabinet == "2":
1232 if doortype == "1" or doortype == "4" or doortype == "9": # Right
1233 hpos = "LB"
1234 if doortype == "2" or doortype == "5" or doortype == "10": # Left
1235 hpos = "RB"
1236 if doortype == "3" or doortype == "6":
1237 hpos = "B"
1239 create_handle(handle_model, mydoor, thickness, hpos, mat, handle_x, handle_z)
1241 if mat and bpy.context.scene.render.engine == 'CYCLES':
1242 # Door material
1243 mat = create_diffuse_material("Door_material", False, 0.8, 0.8, 0.8, 0.279, 0.337, 0.6, 0.2)
1244 set_material(mydoor, mat)
1245 # Add Glass
1246 if doortype == "4" or doortype == "5" or doortype == "6" or doortype == "11":
1247 mat = create_glass_material("DoorGlass_material", False)
1248 mydoor.data.materials.append(mat)
1249 select_faces(mydoor, 6, True)
1250 set_material_faces(mydoor, 1)
1252 # Limit rotation axis
1253 if hpos != "T" and hpos != "TM" and hpos != "B":
1254 mydoor.lock_rotation = (True, True, False)
1256 return mydoor
1259 # ------------------------------------------------------------------------------
1260 # Create drawers
1262 # thickness: wood thickness
1263 # sX: Size in X axis
1264 # sY: Size in Y axis
1265 # sZ: Size in Z axis
1266 # mat: Flag for creating materials
1267 # handle: handle visibility flag
1268 # handle_model: Type of handle
1269 # handle_z: Position of handle in Z axis
1270 # ------------------------------------------------------------------------------
1271 def create_drawer(objname, thickness, sx, sy, sz, mat, handle, handle_model, handle_z):
1272 myvertex = []
1273 myfaces = []
1274 # Front face
1275 myvertex.extend([(0, 0, 0), (0, -thickness, 0), (0, -thickness, sz), (0, 0, sz), (sx, 0, 0), (sx, -thickness, 0),
1276 (sx, -thickness, sz), (sx, 0, sz)])
1277 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)])
1279 # internal faces (thickness cm gap)
1280 myvertex.extend([(thickness, 0, thickness),
1281 (thickness, sy - thickness, thickness),
1282 (sx - thickness, sy - thickness, thickness),
1283 (sx - thickness, 0, thickness),
1284 (thickness * 2, 0, thickness),
1285 (thickness * 2, sy - thickness * 2, thickness),
1286 (sx - thickness * 2, sy - thickness * 2, thickness),
1287 (sx - thickness * 2, 0, thickness)])
1289 myfaces.extend([(8, 9, 13, 12), (13, 9, 10, 14), (14, 10, 11, 15), (12, 13, 14, 15)])
1290 h = sz * 0.7
1291 myvertex.extend([(thickness, 0, h),
1292 (thickness, sy - thickness, h),
1293 (sx - thickness, sy - thickness, h),
1294 (sx - thickness, 0, h),
1295 (thickness * 2, 0, h),
1296 (thickness * 2, sy - thickness * 2, h),
1297 (sx - thickness * 2, sy - thickness * 2, h),
1298 (sx - thickness * 2, 0, h)])
1299 myfaces.extend(
1300 [(16, 17, 21, 20), (21, 17, 18, 22), (22, 18, 19, 23), (8, 9, 17, 16), (9, 10, 18, 17), (10, 11, 19, 18),
1301 (12, 13, 21, 20), (13, 14, 22, 21), (14, 15, 23, 22)])
1303 mymesh = bpy.data.meshes.new(objname)
1304 mydrawer = bpy.data.objects.new(objname, mymesh)
1306 mydrawer.location[0] = 0
1307 mydrawer.location[1] = 0
1308 mydrawer.location[2] = 0
1309 bpy.context.scene.objects.link(mydrawer)
1311 mymesh.from_pydata(myvertex, [], myfaces)
1312 mymesh.update(calc_edges=True)
1314 # Handle
1315 if handle:
1316 model = handle_model
1317 # Drawers always horizontal handle, so override values
1318 if model == "1":
1319 model = "3"
1321 if model == "4":
1322 model = "2"
1324 create_handle(model, mydrawer, thickness, "TM", mat, 0, handle_z) # always in the top area/middle
1326 # Material
1327 if mat and bpy.context.scene.render.engine == 'CYCLES':
1328 mat = create_diffuse_material("Drawer_material", False, 0.8, 0.8, 0.8, 0.6, 0.6, 0.6, 0.2)
1329 set_material(mydrawer, mat)
1331 # Lock transformation
1332 mydrawer.lock_location = (True, False, True) # only Y axis
1334 return mydrawer
1337 # ------------------------------------------------------------------------------
1338 # Create Handles
1340 # model: handle model
1341 # myDoor: Door that has the handle
1342 # thickness: thickness of board
1343 # handle_position: position of the handle
1344 # RT: Put handle in right side top
1345 # LT: Put handle in left side top
1346 # RB: Put handle in right side bottom
1347 # LB: Put handle in left side bottom
1348 # T: Put handle in top side middle
1349 # TM: Put handle in top side middle (drawers)
1350 # B: Put handle in bottom side middle
1351 # mat: create default cycles material
1352 # handle_x: Position of handle in X axis
1353 # handle_z: Position of handle in Z axis
1354 # ------------------------------------------------------------------------------
1355 def create_handle(model, mydoor, thickness, handle_position, mat, handle_x, handle_z):
1356 if model == "9":
1357 return None
1359 # Retry mesh data
1360 if model == "1" or model == "3":
1361 mydata = handle_model_01()
1362 elif model == "2" or model == "4":
1363 mydata = handle_model_02()
1364 elif model == "5":
1365 mydata = handle_model_05()
1366 elif model == "6":
1367 mydata = handle_model_06()
1368 elif model == "7":
1369 mydata = handle_model_07()
1370 elif model == "8":
1371 mydata = handle_model_08()
1372 else:
1373 mydata = handle_model_01() # default model
1375 # move data
1376 myvertex = mydata[0]
1377 myfaces = mydata[1]
1379 mymesh = bpy.data.meshes.new("Handle")
1380 myhandle = bpy.data.objects.new("Handle", mymesh)
1382 bpy.context.scene.objects.link(myhandle)
1384 mymesh.from_pydata(myvertex, [], myfaces)
1385 mymesh.update(calc_edges=True)
1387 # Position handle
1388 myhandle.location.y = -thickness
1389 # Calculate dimensions
1390 if model == "1" or model == "4" or model == "5" or model == "6":
1391 width = myhandle.dimensions.z / 2
1392 height = myhandle.dimensions.x / 2
1393 else:
1394 width = myhandle.dimensions.x / 2
1395 height = myhandle.dimensions.z / 2
1396 # Limit handle position to door dimensions
1397 if handle_x + width > mydoor.dimensions.x:
1398 handle_x = mydoor.dimensions.x - 0.01
1400 if handle_z + height > mydoor.dimensions.z:
1401 handle_z = mydoor.dimensions.z - 0.01
1403 # Position in X axis
1404 if handle_position == "LT" or handle_position == "LB":
1405 myhandle.location.x = -mydoor.dimensions.x + handle_x + width
1407 if handle_position == "RT" or handle_position == "RB":
1408 myhandle.location.x = mydoor.dimensions.x - handle_x - width
1410 # Position in Z axis
1411 if handle_position == "RT" or handle_position == "LT":
1412 if mydoor.dimensions.z - handle_z - height > 1.2:
1413 myhandle.location.z = 1.2
1414 else:
1415 myhandle.location.z = mydoor.dimensions.z - handle_z - height
1417 if handle_position == "RB" or handle_position == "LB":
1418 myhandle.location.z = handle_z + height
1420 # Position for Middle point
1421 if handle_position == "T" or handle_position == "B":
1422 myhandle.location.x = -mydoor.dimensions.x / 2
1424 if handle_position == "TM":
1425 myhandle.location.x = mydoor.dimensions.x / 2
1427 if handle_position == "T" or handle_position == "TM":
1428 myhandle.location.z = mydoor.dimensions.z - handle_z - height
1430 if handle_position == "B":
1431 myhandle.location.z = handle_z - height
1433 # rotate
1434 if handle_position != "T" and handle_position != "B" and handle_position != "TM":
1435 yrot = 0
1436 if model == "1":
1437 yrot = pi / 2
1439 if model == "4":
1440 if handle_position == "LT" or handle_position == "LB":
1441 yrot = -pi / 2
1442 else:
1443 yrot = pi / 2
1445 myhandle.rotation_euler = (0, yrot, 0.0) # radians PI=180
1447 # parent
1448 myhandle.parent = mydoor
1449 # Materials
1450 if mat and bpy.context.scene.render.engine == 'CYCLES':
1451 mat = create_glossy_material("Handle_material", False, 0.733, 0.779, 0.8, 0.733, 0.779, 0.8, 0.02)
1452 set_material(myhandle, mat)
1454 # Smooth
1455 if model == "1" or model == "3":
1456 set_smooth(myhandle)
1457 set_modifier_subsurf(myhandle)
1459 if model == "5" or model == "6" or model == "7" or model == "8":
1460 set_smooth(myhandle)
1462 return myhandle
1465 # ----------------------------------------------
1466 # Handle model 01
1467 # ----------------------------------------------
1468 def handle_model_01():
1469 # ------------------------------------
1470 # Mesh data
1471 # ------------------------------------
1472 minx = -0.07222598791122437
1473 maxx = 0.07222597301006317
1474 maxy = 6.545917585754069e-08
1475 minz = -0.004081448074430227
1476 maxz = 0.004081418737769127
1478 # Vertex
1479 myvertex = [(maxx - 0.013172730803489685, -0.025110241025686264, maxz - 0.0003106782678514719),
1480 (maxx - 0.01216559112071991, -0.027320515364408493, maxz - 0.0011954230722039938),
1481 (maxx - 0.011492643505334854, -0.028797375038266182, maxz - 0.0025195349007844925),
1482 (maxx - 0.011256333440542221, -0.029315980151295662, maxz - 0.0040814326939546675),
1483 (maxx - 0.011492643505334854, -0.02879737690091133, minz + 0.0025195364141836762),
1484 (maxx - 0.01216559112071991, -0.02732051908969879, minz + 0.0011954230722039938),
1485 (maxx - 0.013172730803489685, -0.025110244750976562, minz + 0.0003106798976659775),
1486 (maxx - 0.014360729604959488, -0.022503048181533813, minz),
1487 (maxx - 0.01554873213171959, -0.019895851612091064, minz + 0.00031067943200469017),
1488 (maxx - 0.016555871814489365, -0.017685577273368835, minz + 0.001195424236357212),
1489 (maxx - 0.01722881942987442, -0.016208721324801445, minz + 0.0025195354828611016),
1490 (maxx - 0.017465125769376755, -0.015690118074417114, minz + 0.00408143286244389),
1491 (maxx - 0.01722881942987442, -0.016208721324801445, maxz - 0.0025195367634296417),
1492 (maxx - 0.016555871814489365, -0.017685577273368835, maxz - 0.0011954237706959248),
1493 (maxx - 0.01554873213171959, -0.019895853474736214, maxz - 0.00031068059615790844),
1494 (maxx - 0.014360729604959488, -0.022503050044178963, maxz),
1495 (maxx - 0.00908602774143219, -0.022446047514677048, maxz - 0.0003106782678514719),
1496 (maxx - 0.007382020354270935, -0.024176951497793198, maxz - 0.0011954226065427065),
1497 (maxx - 0.006243452429771423, -0.025333505123853683, maxz - 0.002519535133615136),
1498 (maxx - 0.005843624472618103, -0.025739632546901703, maxz - 0.004081432702012222),
1499 (maxx - 0.006243452429771423, -0.025333506986498833, minz + 0.0025195362977683544),
1500 (maxx - 0.007382020354270935, -0.024176953360438347, minz + 0.0011954230722039938),
1501 (maxx - 0.00908602774143219, -0.022446051239967346, minz + 0.0003106798976659775),
1502 (maxx - 0.011096026748418808, -0.020404310896992683, minz),
1503 (maxx - 0.013106036931276321, -0.01836257427930832, minz + 0.0003106796648353338),
1504 (maxx - 0.014810033142566681, -0.01663167029619217, minz + 0.001195424236357212),
1505 (maxx - 0.015948612242937088, -0.015475118532776833, minz + 0.0025195355992764235),
1506 (maxx - 0.016348421573638916, -0.015068991109728813, minz + 0.004081432861045897),
1507 (maxx - 0.015948612242937088, -0.015475118532776833, maxz - 0.00251953664701432),
1508 (maxx - 0.014810033142566681, -0.01663167029619217, maxz - 0.0011954233050346375),
1509 (maxx - 0.013106033205986023, -0.01836257241666317, maxz - 0.0003106803633272648),
1510 (maxx - 0.011096026748418808, -0.020404312759637833, maxz - 4.656612873077393e-10),
1511 (maxx - 0.004618480801582336, -0.01468262542039156, maxz - 0.0008190707303583622),
1512 (maxx - 0.002191290259361267, -0.014774298295378685, maxz - 0.001584529411047697),
1513 (maxx - 0.0005694925785064697, -0.014835557900369167, maxz - 0.002730117877945304),
1514 (maxx, -0.014857066795229912, maxz - 0.004081432337202706),
1515 (maxx - 0.0005694925785064697, -0.014835558831691742, minz + 0.002730119973421097),
1516 (maxx - 0.002191290259361267, -0.014774300158023834, minz + 0.001584530808031559),
1517 (maxx - 0.004618480801582336, -0.01468262542039156, minz + 0.0008190732914954424),
1518 (maxx - 0.0074815452098846436, -0.014574488624930382, minz + 0.000550281023606658),
1519 (maxx - 0.010344602167606354, -0.014466354623436928, minz + 0.0008190732914954424),
1520 (maxx - 0.012771788984537125, -0.01437467709183693, minz + 0.0015845317393541336),
1521 (maxx - 0.014393582940101624, -0.01431342400610447, minz + 0.002730119158513844),
1522 (maxx - 0.014963079243898392, -0.014291912317276001, maxz - 0.004081433403984924),
1523 (maxx - 0.014393582940101624, -0.01431342400610447, maxz - 0.0027301193913444877),
1524 (maxx - 0.012771788984537125, -0.014374678023159504, maxz - 0.0015845298767089844),
1525 (maxx - 0.010344602167606354, -0.014466352760791779, maxz - 0.0008190723601728678),
1526 (maxx - 0.0074815452098846436, -0.014574489556252956, maxz - 0.0005502800922840834),
1527 (maxx - 0.004618480801582336, maxy - 2.029310053330846e-11, maxz - 0.0008190718945115805),
1528 (maxx - 0.002191290259361267, maxy - 7.808864666003501e-11, maxz - 0.0015845305752009153),
1529 (maxx - 0.0005694925785064697, maxy - 1.645759084567544e-10, maxz - 0.002730119042098522),
1530 (maxx, maxy - 2.665956344571896e-10, minz + 0.004081433353314345),
1531 (maxx - 0.0005694925785064697, maxy - 3.686153604576248e-10, minz + 0.0027301188092678785),
1532 (maxx - 0.002191290259361267, maxy - 4.5510972768170177e-10, minz + 0.0015845296438783407),
1533 (maxx - 0.004618480801582336, maxy - 5.128981683810707e-10, minz + 0.0008190721273422241),
1534 (maxx - 0.0074815452098846436, maxy - 5.331912689143792e-10, minz + 0.0005502798594534397),
1535 (maxx - 0.010344602167606354, maxy - 5.128981683810707e-10, minz + 0.0008190721273422241),
1536 (maxx - 0.012771788984537125, maxy - 4.5510972768170177e-10, minz + 0.0015845305752009153),
1537 (maxx - 0.014393582940101624, maxy - 3.686153604576248e-10, minz + 0.0027301181107759476),
1538 (maxx - 0.014963079243898392, maxy - 2.665956344571896e-10, minz + 0.00408143232919933),
1539 (maxx - 0.014393582940101624, maxy - 1.645759084567544e-10, maxz - 0.002730120439082384),
1540 (maxx - 0.012771788984537125, maxy - 7.808864666003501e-11, maxz - 0.0015845310408622026),
1541 (maxx - 0.010344602167606354, maxy - 2.029310053330846e-11, maxz - 0.000819073524326086),
1542 (maxx - 0.0074815452098846436, maxy, maxz - 0.0005502812564373016),
1543 (minx + 0.013172738254070282, -0.025110241025686264, maxz - 0.0003106782678514719),
1544 (minx + 0.012165598571300507, -0.027320515364408493, maxz - 0.0011954230722039938),
1545 (minx + 0.011492650955915451, -0.028797375038266182, maxz - 0.0025195349007844925),
1546 (minx + 0.011256340891122818, -0.029315980151295662, maxz - 0.0040814326939546675),
1547 (minx + 0.011492650955915451, -0.02879737690091133, minz + 0.0025195364141836762),
1548 (minx + 0.012165598571300507, -0.02732051908969879, minz + 0.0011954230722039938),
1549 (minx + 0.013172738254070282, -0.025110244750976562, minz + 0.0003106798976659775),
1550 (minx + 0.014360737055540085, -0.022503048181533813, minz),
1551 (minx + 0.015548739582300186, -0.019895851612091064, minz + 0.00031067943200469017),
1552 (minx + 0.01655587926506996, -0.017685577273368835, minz + 0.001195424236357212),
1553 (minx + 0.017228826880455017, -0.016208721324801445, minz + 0.0025195354828611016),
1554 (minx + 0.01746513321995735, -0.015690118074417114, minz + 0.00408143286244389),
1555 (minx + 0.017228826880455017, -0.016208721324801445, maxz - 0.0025195367634296417),
1556 (minx + 0.01655587926506996, -0.017685577273368835, maxz - 0.0011954237706959248),
1557 (minx + 0.015548739582300186, -0.019895853474736214, maxz - 0.00031068059615790844),
1558 (minx + 0.014360737055540085, -0.022503050044178963, maxz),
1559 (maxx - 0.07222597673535347, -0.022503051906824112, maxz),
1560 (maxx - 0.07222597673535347, -0.019637949764728546, maxz - 0.00031068059615790844),
1561 (maxx - 0.07222597673535347, -0.01720903068780899, maxz - 0.0011954237706959248),
1562 (maxx - 0.07222597673535347, -0.015586081892251968, maxz - 0.0025195368798449636),
1563 (maxx - 0.07222597673535347, -0.015016178600490093, minz + 0.004081432688119335),
1564 (maxx - 0.07222597673535347, -0.015586081892251968, minz + 0.00251953536644578),
1565 (maxx - 0.07222597673535347, -0.01720903068780899, minz + 0.001195424236357212),
1566 (maxx - 0.07222597673535347, -0.019637947902083397, minz + 0.00031067943200469017),
1567 (maxx - 0.07222597673535347, -0.022503051906824112, minz),
1568 (maxx - 0.07222597673535347, -0.025368154048919678, minz + 0.0003106798976659775),
1569 (maxx - 0.07222597673535347, -0.027797073125839233, minz + 0.0011954230722039938),
1570 (maxx - 0.07222597673535347, -0.029420025646686554, minz + 0.0025195364141836762),
1571 (maxx - 0.07222597673535347, -0.029989928007125854, maxz - 0.004081432643072702),
1572 (maxx - 0.07222597673535347, -0.029420021921396255, maxz - 0.0025195349007844925),
1573 (maxx - 0.07222597673535347, -0.027797069400548935, maxz - 0.0011954230722039938),
1574 (maxx - 0.07222597673535347, -0.025368154048919678, maxz - 0.0003106782678514719),
1575 (minx + 0.00908602774143219, -0.022446047514677048, maxz - 0.0003106782678514719),
1576 (minx + 0.007382035255432129, -0.024176951497793198, maxz - 0.0011954226065427065),
1577 (minx + 0.006243467330932617, -0.025333505123853683, maxz - 0.002519535133615136),
1578 (minx + 0.005843639373779297, -0.025739632546901703, maxz - 0.004081432702012222),
1579 (minx + 0.006243467330932617, -0.025333506986498833, minz + 0.0025195362977683544),
1580 (minx + 0.007382035255432129, -0.024176953360438347, minz + 0.0011954230722039938),
1581 (minx + 0.00908602774143219, -0.022446051239967346, minz + 0.0003106798976659775),
1582 (minx + 0.011096034198999405, -0.020404310896992683, minz),
1583 (minx + 0.013106044381856918, -0.01836257427930832, minz + 0.0003106796648353338),
1584 (minx + 0.014810040593147278, -0.01663167029619217, minz + 0.001195424236357212),
1585 (minx + 0.015948619693517685, -0.015475118532776833, minz + 0.0025195355992764235),
1586 (minx + 0.016348429024219513, -0.015068991109728813, minz + 0.004081432861045897),
1587 (minx + 0.015948619693517685, -0.015475118532776833, maxz - 0.00251953664701432),
1588 (minx + 0.014810040593147278, -0.01663167029619217, maxz - 0.0011954233050346375),
1589 (minx + 0.01310604065656662, -0.01836257241666317, maxz - 0.0003106803633272648),
1590 (minx + 0.011096034198999405, -0.020404312759637833, maxz - 4.656612873077393e-10),
1591 (minx + 0.004618480801582336, -0.01468262542039156, maxz - 0.0008190707303583622),
1592 (minx + 0.002191305160522461, -0.014774298295378685, maxz - 0.001584529411047697),
1593 (minx + 0.0005695074796676636, -0.014835557900369167, maxz - 0.002730117877945304),
1594 (minx, -0.014857066795229912, maxz - 0.004081432337202706),
1595 (minx + 0.0005694925785064697, -0.014835558831691742, minz + 0.002730119973421097),
1596 (minx + 0.002191290259361267, -0.014774300158023834, minz + 0.001584530808031559),
1597 (minx + 0.004618480801582336, -0.01468262542039156, minz + 0.0008190732914954424),
1598 (minx + 0.0074815452098846436, -0.014574488624930382, minz + 0.000550281023606658),
1599 (minx + 0.01034460961818695, -0.014466354623436928, minz + 0.0008190732914954424),
1600 (minx + 0.012771796435117722, -0.01437467709183693, minz + 0.0015845317393541336),
1601 (minx + 0.01439359039068222, -0.01431342400610447, minz + 0.002730119158513844),
1602 (minx + 0.014963086694478989, -0.014291912317276001, maxz - 0.004081433403984924),
1603 (minx + 0.01439359039068222, -0.01431342400610447, maxz - 0.0027301193913444877),
1604 (minx + 0.012771796435117722, -0.014374678023159504, maxz - 0.0015845298767089844),
1605 (minx + 0.01034460961818695, -0.014466352760791779, maxz - 0.0008190723601728678),
1606 (minx + 0.0074815452098846436, -0.014574489556252956, maxz - 0.0005502800922840834),
1607 (minx + 0.004618480801582336, maxy - 2.029310053330846e-11, maxz - 0.0008190718945115805),
1608 (minx + 0.002191305160522461, maxy - 7.808864666003501e-11, maxz - 0.0015845305752009153),
1609 (minx + 0.0005695074796676636, maxy - 1.645759084567544e-10, maxz - 0.002730119042098522),
1610 (minx, maxy - 2.665956344571896e-10, minz + 0.004081433353314345),
1611 (minx + 0.0005694925785064697, maxy - 3.686153604576248e-10, minz + 0.0027301188092678785),
1612 (minx + 0.002191290259361267, maxy - 4.5510972768170177e-10, minz + 0.0015845296438783407),
1613 (minx + 0.004618480801582336, maxy - 5.128981683810707e-10, minz + 0.0008190721273422241),
1614 (minx + 0.0074815452098846436, maxy - 5.331912689143792e-10, minz + 0.0005502798594534397),
1615 (minx + 0.01034460961818695, maxy - 5.128981683810707e-10, minz + 0.0008190721273422241),
1616 (minx + 0.012771796435117722, maxy - 4.5510972768170177e-10, minz + 0.0015845305752009153),
1617 (minx + 0.01439359039068222, maxy - 3.686153604576248e-10, minz + 0.0027301181107759476),
1618 (minx + 0.014963086694478989, maxy - 2.665956344571896e-10, minz + 0.00408143232919933),
1619 (minx + 0.01439359039068222, maxy - 1.645759084567544e-10, maxz - 0.002730120439082384),
1620 (minx + 0.012771796435117722, maxy - 7.808864666003501e-11, maxz - 0.0015845310408622026),
1621 (minx + 0.01034460961818695, maxy - 2.029310053330846e-11, maxz - 0.000819073524326086),
1622 (minx + 0.0074815452098846436, maxy, maxz - 0.0005502812564373016)]
1624 # Faces
1625 myfaces = [(90, 89, 6, 5), (88, 87, 8, 7), (86, 85, 10, 9), (84, 83, 12, 11), (80, 95, 0, 15),
1626 (82, 81, 14, 13), (93, 92, 3, 2), (91, 90, 5, 4), (89, 88, 7, 6), (87, 86, 9, 8),
1627 (85, 84, 11, 10), (95, 94, 1, 0), (83, 82, 13, 12), (94, 93, 2, 1), (81, 80, 15, 14),
1628 (92, 91, 4, 3), (2, 3, 19, 18), (13, 14, 30, 29), (15, 0, 16, 31), (11, 12, 28, 27),
1629 (9, 10, 26, 25), (7, 8, 24, 23), (5, 6, 22, 21), (3, 4, 20, 19), (14, 15, 31, 30),
1630 (1, 2, 18, 17), (12, 13, 29, 28), (0, 1, 17, 16), (10, 11, 27, 26), (8, 9, 25, 24),
1631 (6, 7, 23, 22), (4, 5, 21, 20), (19, 20, 36, 35), (30, 31, 47, 46), (17, 18, 34, 33),
1632 (28, 29, 45, 44), (16, 17, 33, 32), (26, 27, 43, 42), (24, 25, 41, 40), (22, 23, 39, 38),
1633 (20, 21, 37, 36), (18, 19, 35, 34), (29, 30, 46, 45), (31, 16, 32, 47), (27, 28, 44, 43),
1634 (25, 26, 42, 41), (23, 24, 40, 39), (21, 22, 38, 37), (36, 37, 53, 52), (34, 35, 51, 50),
1635 (45, 46, 62, 61), (47, 32, 48, 63), (43, 44, 60, 59), (41, 42, 58, 57), (39, 40, 56, 55),
1636 (37, 38, 54, 53), (35, 36, 52, 51), (46, 47, 63, 62), (33, 34, 50, 49), (44, 45, 61, 60),
1637 (32, 33, 49, 48), (42, 43, 59, 58), (40, 41, 57, 56), (38, 39, 55, 54), (90, 69, 70, 89),
1638 (88, 71, 72, 87), (86, 73, 74, 85), (84, 75, 76, 83), (80, 79, 64, 95), (82, 77, 78, 81),
1639 (93, 66, 67, 92), (91, 68, 69, 90), (89, 70, 71, 88), (87, 72, 73, 86), (85, 74, 75, 84),
1640 (95, 64, 65, 94), (83, 76, 77, 82), (94, 65, 66, 93), (81, 78, 79, 80), (92, 67, 68, 91),
1641 (66, 98, 99, 67), (77, 109, 110, 78), (79, 111, 96, 64), (75, 107, 108, 76), (73, 105, 106, 74),
1642 (71, 103, 104, 72), (69, 101, 102, 70), (67, 99, 100, 68), (78, 110, 111, 79), (65, 97, 98, 66),
1643 (76, 108, 109, 77), (64, 96, 97, 65), (74, 106, 107, 75), (72, 104, 105, 73), (70, 102, 103, 71),
1644 (68, 100, 101, 69), (99, 115, 116, 100), (110, 126, 127, 111), (97, 113, 114, 98), (108, 124, 125, 109),
1645 (96, 112, 113, 97), (106, 122, 123, 107), (104, 120, 121, 105), (102, 118, 119, 103),
1646 (100, 116, 117, 101),
1647 (98, 114, 115, 99), (109, 125, 126, 110), (111, 127, 112, 96), (107, 123, 124, 108),
1648 (105, 121, 122, 106),
1649 (103, 119, 120, 104), (101, 117, 118, 102), (116, 132, 133, 117), (114, 130, 131, 115),
1650 (125, 141, 142, 126),
1651 (127, 143, 128, 112), (123, 139, 140, 124), (121, 137, 138, 122), (119, 135, 136, 120),
1652 (117, 133, 134, 118),
1653 (115, 131, 132, 116), (126, 142, 143, 127), (113, 129, 130, 114), (124, 140, 141, 125),
1654 (112, 128, 129, 113),
1655 (122, 138, 139, 123), (120, 136, 137, 121), (118, 134, 135, 119)]
1657 return myvertex, myfaces
1660 # ----------------------------------------------
1661 # Handle model 02
1662 # ----------------------------------------------
1663 def handle_model_02():
1664 # ------------------------------------
1665 # Mesh data
1666 # ------------------------------------
1667 minx = -0.09079331159591675
1668 maxx = 0.09079315513372421
1669 maxy = 0
1670 minz = -0.018363870680332184
1671 maxz = 0.0015741242095828056
1673 # Vertex
1674 myvertex = [(maxx, maxy, maxz - 9.313225746154785e-10),
1675 (maxx, maxy, maxz - 0.0031482474878430367),
1676 (maxx, -0.02426009438931942, maxz - 0.0031482460908591747),
1677 (maxx, -0.02426009438931942, maxz),
1678 (maxx, -0.02727462910115719, maxz),
1679 (maxx, -0.02727462910115719, maxz - 0.0031482460908591747),
1680 (maxx, -0.02426009625196457, minz + 0.002603583037853241),
1681 (maxx, -0.027274630963802338, minz + 0.002603583037853241),
1682 (maxx, -0.02426009625196457, minz),
1683 (maxx, -0.027274630963802338, minz),
1684 (maxx, -0.021415365859866142, minz + 0.002603583037853241),
1685 (maxx, -0.02141536772251129, minz),
1686 (maxx - 0.0907932324437013, -0.02426009438931942, maxz - 0.0031482460908591747),
1687 (maxx - 0.0907932324437013, -0.02426009438931942, maxz),
1688 (minx, maxy, maxz - 9.313225746154785e-10),
1689 (minx, maxy, maxz - 0.0031482474878430367),
1690 (minx, -0.02426009438931942, maxz - 0.0031482460908591747),
1691 (minx, -0.02426009438931942, maxz),
1692 (minx, -0.02727462910115719, maxz),
1693 (minx, -0.02727462910115719, maxz - 0.0031482460908591747),
1694 (maxx - 0.0907932324437013, -0.02727462910115719, maxz),
1695 (maxx - 0.0907932324437013, maxy, maxz - 9.313225746154785e-10),
1696 (maxx - 0.0907932324437013, -0.02727462910115719, maxz - 0.0031482460908591747),
1697 (maxx - 0.0907932324437013, maxy, maxz - 0.0031482474878430367),
1698 (maxx - 0.0907932324437013, -0.02426009625196457, minz + 0.002603583037853241),
1699 (minx, -0.02426009625196457, minz + 0.002603583037853241),
1700 (minx, -0.027274630963802338, minz + 0.002603583037853241),
1701 (maxx - 0.0907932324437013, -0.027274630963802338, minz + 0.002603583037853241),
1702 (maxx - 0.0907932324437013, -0.02426009625196457, minz),
1703 (minx, -0.02426009625196457, minz),
1704 (minx, -0.027274630963802338, minz),
1705 (maxx - 0.0907932324437013, -0.027274630963802338, minz),
1706 (maxx - 0.0907932324437013, -0.021415365859866142, minz + 0.002603583037853241),
1707 (minx, -0.021415365859866142, minz + 0.002603583037853241),
1708 (maxx - 0.0907932324437013, -0.02141536772251129, minz),
1709 (minx, -0.02141536772251129, minz)]
1711 # Faces
1712 myfaces = [(2, 5, 7, 6), (13, 3, 0, 21), (3, 2, 1, 0), (7, 27, 31, 9), (23, 21, 0, 1),
1713 (5, 22, 27, 7), (4, 5, 2, 3), (2, 12, 23, 1), (20, 4, 3, 13), (5, 4, 20, 22),
1714 (12, 2, 6, 24), (9, 31, 28, 8), (6, 7, 9, 8), (32, 10, 11, 34), (6, 8, 11, 10),
1715 (8, 28, 34, 11), (24, 6, 10, 32), (16, 25, 26, 19), (13, 21, 14, 17), (17, 14, 15, 16),
1716 (26, 30, 31, 27), (23, 15, 14, 21), (19, 26, 27, 22), (18, 17, 16, 19), (16, 15, 23, 12),
1717 (20, 13, 17, 18), (19, 22, 20, 18), (22, 27, 24, 12), (12, 24, 25, 16), (30, 29, 28, 31),
1718 (25, 29, 30, 26), (27, 31, 28, 24), (28, 34, 32, 24), (32, 34, 35, 33), (25, 33, 35, 29),
1719 (29, 35, 34, 28), (24, 32, 33, 25)]
1721 return myvertex, myfaces
1724 # ----------------------------------------------
1725 # Handle model 05
1726 # ----------------------------------------------
1727 def handle_model_05():
1728 # ------------------------------------
1729 # Mesh data
1730 # ------------------------------------
1731 minx = -0.012873317115008831
1732 maxx = 0.012873315252363682
1733 maxy = 6.581399869531879e-10
1734 minz = -0.012873317115008831
1735 maxz = 0.012873315252363682
1737 # Vertex
1738 myvertex = [(maxx - 0.01287331552838386, maxy, maxz - 0.008879524189978838),
1739 (maxx - 0.01287331552838386, -0.004451401997357607, maxz - 0.008879524189978838),
1740 (maxx - 0.012094165373127908, maxy, maxz - 0.008956264238804579),
1741 (maxx - 0.012094165373127908, -0.004451401997357607, maxz - 0.008956263773143291),
1742 (maxx - 0.011344957514666021, maxy, maxz - 0.00918353395536542),
1743 (maxx - 0.011344957514666021, -0.004451401997357607, maxz - 0.009183533489704132),
1744 (maxx - 0.010654483688995242, maxy, maxz - 0.00955259962938726),
1745 (maxx - 0.010654483688995242, -0.004451401997357607, maxz - 0.009552599163725972),
1746 (maxx - 0.010049278382211924, maxy, maxz - 0.010049279080703855),
1747 (maxx - 0.010049278382211924, -0.004451401997357607, maxz - 0.010049278382211924),
1748 (maxx - 0.009552599163725972, maxy - 6.581399869531879e-10, maxz - 0.01065448485314846),
1749 (maxx - 0.009552599163725972, -0.004451401997357607, maxz - 0.01065448415465653),
1750 (maxx - 0.009183533489704132, maxy - 6.581399869531879e-10, maxz - 0.011344958445988595),
1751 (maxx - 0.009183533489704132, -0.004451401997357607, maxz - 0.011344957863911986),
1752 (maxx - 0.008956263773143291, maxy - 6.581399869531879e-10, maxz - 0.0120941661298275),
1753 (maxx - 0.008956263773143291, -0.004451401997357607, maxz - 0.012094165605958551),
1754 (maxx - 0.008879524189978838, maxy - 6.581399869531879e-10, maxz - 0.012873315995101497),
1755 (maxx - 0.008879524189978838, -0.004451401997357607, maxz - 0.012873315519886824),
1756 (maxx - 0.008956263307482004, maxy - 6.581399869531879e-10, minz + 0.012094166420865804),
1757 (maxx - 0.008956263307482004, -0.004451401997357607, minz + 0.01209416682831943),
1758 (maxx - 0.009183533024042845, maxy - 6.581399869531879e-10, minz + 0.011344958795234561),
1759 (maxx - 0.009183533024042845, -0.004451401997357607, minz + 0.011344959260895848),
1760 (maxx - 0.009552599163725972, maxy - 6.581399869531879e-10, minz + 0.01065448415465653),
1761 (maxx - 0.009552599163725972, -0.004451401997357607, minz + 0.01065448485314846),
1762 (maxx - 0.010049278382211924, -6.581399869531879e-10, minz + 0.010049278847873211),
1763 (maxx - 0.010049278382211924, -0.004451401997357607, minz + 0.010049279546365142),
1764 (maxx - 0.010654483921825886, -6.581399869531879e-10, minz + 0.00955259962938726),
1765 (maxx - 0.010654483921825886, -0.004451401997357607, minz + 0.009552600095048547),
1766 (maxx - 0.011344958213157952, -6.581399869531879e-10, minz + 0.009183533256873488),
1767 (maxx - 0.011344958213157952, -0.004451401997357607, minz + 0.009183533489704132),
1768 (maxx - 0.012094166362658143, -6.581399869531879e-10, minz + 0.008956264238804579),
1769 (maxx - 0.012094166362658143, -0.004451401997357607, minz + 0.008956264238804579),
1770 (minx + 0.012873315537646146, -6.581399869531879e-10, minz + 0.008879524655640125),
1771 (minx + 0.012873315537646146, -0.004451401997357607, minz + 0.008879525121301413),
1772 (minx + 0.012094165082089603, -6.581399869531879e-10, minz + 0.008956264238804579),
1773 (minx + 0.012094165082089603, -0.004451401997357607, minz + 0.008956264704465866),
1774 (minx + 0.011344957165420055, -6.581399869531879e-10, minz + 0.009183534886687994),
1775 (minx + 0.011344957165420055, -0.004451401997357607, minz + 0.009183535352349281),
1776 (minx + 0.010654483223333955, -6.581399869531879e-10, minz + 0.009552601026371121),
1777 (minx + 0.010654483223333955, -0.004451401997357607, minz + 0.009552601724863052),
1778 (minx + 0.010049277916550636, -6.581399869531879e-10, minz + 0.010049280477687716),
1779 (minx + 0.010049277916550636, -0.004451401997357607, minz + 0.010049281176179647),
1780 (minx + 0.009552598698064685, maxy - 6.581399869531879e-10, minz + 0.010654486482962966),
1781 (minx + 0.009552598698064685, -0.004451401997357607, minz + 0.010654486948624253),
1782 (minx + 0.009183533024042845, maxy - 6.581399869531879e-10, minz + 0.011344961123540998),
1783 (minx + 0.009183533024042845, -0.004451401997357607, minz + 0.011344961589202285),
1784 (minx + 0.008956264238804579, maxy - 6.581399869531879e-10, minz + 0.01209416938945651),
1785 (minx + 0.008956264238804579, -0.004451401997357607, minz + 0.012094169855117798),
1786 (minx + 0.008879525121301413, maxy - 6.581399869531879e-10, maxz - 0.012873312440222273),
1787 (minx + 0.008879525121301413, -0.004451401997357607, maxz - 0.012873311965007517),
1788 (minx + 0.008956265170127153, maxy - 6.581399869531879e-10, maxz - 0.012094162055291235),
1789 (minx + 0.008956265170127153, -0.004451401997357607, maxz - 0.012094161589629948),
1790 (minx + 0.009183535818010569, maxy - 6.581399869531879e-10, maxz - 0.01134495425503701),
1791 (minx + 0.009183535818010569, -0.004451401997357607, maxz - 0.011344953789375722),
1792 (minx + 0.009552602656185627, maxy - 6.581399869531879e-10, maxz - 0.010654480429366231),
1793 (minx + 0.009552602656185627, -0.004451401997357607, maxz - 0.010654479963704944),
1794 (minx + 0.01004928327165544, maxy, maxz - 0.010049275355413556),
1795 (minx + 0.01004928327165544, -0.004451401997357607, maxz - 0.010049275122582912),
1796 (minx + 0.010654489509761333, maxy, maxz - 0.009552596602588892),
1797 (minx + 0.010654489509761333, -0.004451401997357607, maxz - 0.009552596136927605),
1798 (minx + 0.011344964150339365, maxy, maxz - 0.00918353139422834),
1799 (minx + 0.011344964150339365, -0.004451401997357607, maxz - 0.009183531161397696),
1800 (minx + 0.012094172765500844, maxy, maxz - 0.008956263307482004),
1801 (minx + 0.012094172765500844, -0.004451401997357607, maxz - 0.00895626237615943),
1802 (minx + 0.01287331571475725, -0.01000460609793663, maxz),
1803 (maxx - 0.010361857246607542, -0.01000460609793663, maxz - 0.0002473592758178711),
1804 (maxx - 0.00794691126793623, -0.01000460609793663, maxz - 0.0009799236431717873),
1805 (maxx - 0.005721285007894039, -0.01000460609793663, maxz - 0.002169545739889145),
1806 (maxx - 0.0037705078721046448, -0.01000460609793663, maxz - 0.0037705088034272194),
1807 (maxx - 0.002169545739889145, -0.01000460609793663, maxz - 0.005721286870539188),
1808 (maxx - 0.0009799227118492126, -0.010004607029259205, maxz - 0.007946912664920092),
1809 (maxx - 0.00024735741317272186, -0.010004607029259205, maxz - 0.010361858177930117),
1810 (maxx, -0.010004607029259205, minz + 0.012873315524888684),
1811 (maxx - 0.00024735648185014725, -0.010004607029259205, minz + 0.010361856315284967),
1812 (maxx - 0.0009799227118492126, -0.010004607029259205, minz + 0.007946911733597517),
1813 (maxx - 0.002169545739889145, -0.01000460796058178, minz + 0.005721283610910177),
1814 (maxx - 0.0037705078721046448, -0.01000460796058178, minz + 0.003770505078136921),
1815 (maxx - 0.005721286404877901, -0.01000460796058178, minz + 0.002169542945921421),
1816 (maxx - 0.007946913596242666, -0.01000460796058178, minz + 0.0009799208492040634),
1817 (maxx - 0.010361860506236553, -0.01000460796058178, minz + 0.00024735648185014725),
1818 (minx + 0.012873311520098518, -0.01000460796058178, minz),
1819 (minx + 0.010361851193010807, -0.01000460796058178, minz + 0.00024735648185014725),
1820 (minx + 0.007946905214339495, -0.01000460796058178, minz + 0.0009799255058169365),
1821 (minx + 0.005721278488636017, -0.01000460796058178, minz + 0.0021695485338568687),
1822 (minx + 0.003770500421524048, -0.01000460796058178, minz + 0.0037705106660723686),
1823 (minx + 0.002169538289308548, -0.01000460796058178, minz + 0.005721290595829487),
1824 (minx + 0.0009799189865589142, -0.010004607029259205, minz + 0.007946919184178114),
1825 (minx + 0.000247354619204998, -0.010004607029259205, minz + 0.010361866094172001),
1826 (minx, -0.010004607029259205, maxz - 0.012873305383929612),
1827 (minx + 0.0002473592758178711, -0.010004607029259205, maxz - 0.010361845139414072),
1828 (minx + 0.0009799282997846603, -0.010004607029259205, maxz - 0.007946899626404047),
1829 (minx + 0.0021695513278245926, -0.01000460609793663, maxz - 0.005721272900700569),
1830 (minx + 0.003770517185330391, -0.01000460609793663, maxz - 0.003770497627556324),
1831 (minx + 0.005721298512071371, -0.01000460609793663, maxz - 0.0021695364266633987),
1832 (minx + 0.00794692849740386, -0.01000460609793663, maxz - 0.0009799161925911903),
1833 (minx + 0.010361875407397747, -0.01000460609793663, maxz - 0.000247354619204998),
1834 (minx + 0.01287331571475725, -0.012252332642674446, maxz),
1835 (maxx - 0.010361857246607542, -0.012252332642674446, maxz - 0.0002473592758178711),
1836 (maxx - 0.00794691126793623, -0.012252332642674446, maxz - 0.0009799236431717873),
1837 (maxx - 0.005721285007894039, -0.012252332642674446, maxz - 0.002169545739889145),
1838 (maxx - 0.0037705078721046448, -0.012252332642674446, maxz - 0.0037705088034272194),
1839 (maxx - 0.002169545739889145, -0.012252332642674446, maxz - 0.005721286870539188),
1840 (maxx - 0.0009799227118492126, -0.012252334505319595, maxz - 0.007946912664920092),
1841 (maxx - 0.00024735741317272186, -0.012252334505319595, maxz - 0.010361858177930117),
1842 (maxx, -0.012252334505319595, minz + 0.012873315638136429),
1843 (maxx - 0.00024735648185014725, -0.012252334505319595, minz + 0.010361856315284967),
1844 (maxx - 0.0009799227118492126, -0.012252334505319595, minz + 0.007946911733597517),
1845 (maxx - 0.002169545739889145, -0.01225233543664217, minz + 0.005721283610910177),
1846 (maxx - 0.0037705078721046448, -0.01225233543664217, minz + 0.003770505078136921),
1847 (maxx - 0.005721286404877901, -0.01225233543664217, minz + 0.002169542945921421),
1848 (maxx - 0.007946913596242666, -0.01225233543664217, minz + 0.0009799208492040634),
1849 (maxx - 0.010361860506236553, -0.01225233543664217, minz + 0.00024735648185014725),
1850 (minx + 0.012873311520098518, -0.01225233543664217, minz),
1851 (minx + 0.010361851193010807, -0.01225233543664217, minz + 0.00024735648185014725),
1852 (minx + 0.007946905214339495, -0.01225233543664217, minz + 0.0009799255058169365),
1853 (minx + 0.005721278488636017, -0.01225233543664217, minz + 0.0021695485338568687),
1854 (minx + 0.003770500421524048, -0.01225233543664217, minz + 0.0037705106660723686),
1855 (minx + 0.002169538289308548, -0.01225233543664217, minz + 0.005721290595829487),
1856 (minx + 0.0009799189865589142, -0.012252334505319595, minz + 0.007946919184178114),
1857 (minx + 0.000247354619204998, -0.012252334505319595, minz + 0.010361866094172001),
1858 (minx, -0.012252334505319595, maxz - 0.012873305270680646),
1859 (minx + 0.0002473592758178711, -0.012252334505319595, maxz - 0.010361845139414072),
1860 (minx + 0.0009799282997846603, -0.012252334505319595, maxz - 0.007946899626404047),
1861 (minx + 0.0021695513278245926, -0.012252332642674446, maxz - 0.005721272900700569),
1862 (minx + 0.003770517185330391, -0.012252332642674446, maxz - 0.003770497627556324),
1863 (minx + 0.005721298512071371, -0.012252332642674446, maxz - 0.0021695364266633987),
1864 (minx + 0.00794692849740386, -0.012252332642674446, maxz - 0.0009799161925911903),
1865 (minx + 0.010361875407397747, -0.012252332642674446, maxz - 0.000247354619204998),
1866 (minx + 0.01287331597587027, -0.012252331711351871, maxz - 0.006033936515450478),
1867 (maxx - 0.011539019644260406, -0.012252331711351871, maxz - 0.006165354512631893),
1868 (maxx - 0.010255999164655805, -0.012252331711351871, maxz - 0.006554554216563702),
1869 (maxx - 0.009073560824617743, -0.012252332642674446, maxz - 0.007186579518020153),
1870 (maxx - 0.008037144783884287, -0.012252332642674446, maxz - 0.008037144318223),
1871 (maxx - 0.007186580915004015, -0.012252332642674446, maxz - 0.009073559893295169),
1872 (maxx - 0.006554554216563702, -0.012252332642674446, maxz - 0.010255998698994517),
1873 (maxx - 0.006165354512631893, -0.012252332642674446, maxz - 0.011539018712937832),
1874 (maxx - 0.006033937446773052, -0.012252332642674446, maxz - 0.012873314963572108),
1875 (maxx - 0.0061653535813093185, -0.012252332642674446, minz + 0.011539021041244268),
1876 (maxx - 0.006554554216563702, -0.012252332642674446, minz + 0.01025600079447031),
1877 (maxx - 0.007186580915004015, -0.012252332642674446, minz + 0.009073561755940318),
1878 (maxx - 0.008037144783884287, -0.012252332642674446, minz + 0.008037145715206861),
1879 (maxx - 0.009073561057448387, -0.012252332642674446, minz + 0.007186580449342728),
1880 (maxx - 0.010256000561639667, -0.012252334505319595, minz + 0.006554553750902414),
1881 (maxx - 0.011539021274074912, -0.012252334505319595, minz + 0.0061653549782931805),
1882 (minx + 0.012873313747317816, -0.012252334505319595, minz + 0.006033938378095627),
1883 (minx + 0.01153901673387736, -0.012252334505319595, minz + 0.0061653549782931805),
1884 (minx + 0.01025599567219615, -0.012252334505319595, minz + 0.0065545570105314255),
1885 (minx + 0.009073557797819376, -0.012252332642674446, minz + 0.007186583708971739),
1886 (minx + 0.008037141524255276, -0.012252332642674446, minz + 0.008037148043513298),
1887 (minx + 0.007186576724052429, -0.012252332642674446, minz + 0.00907356571406126),
1888 (minx + 0.006554551888257265, -0.012252332642674446, minz + 0.010256004752591252),
1889 (minx + 0.006165352184325457, -0.012252332642674446, minz + 0.011539026163518429),
1890 (minx + 0.006033936981111765, -0.012252332642674446, maxz - 0.012873308875832823),
1891 (minx + 0.006165355443954468, -0.012252332642674446, maxz - 0.011539011728018522),
1892 (minx + 0.006554556544870138, -0.012252332642674446, maxz - 0.010255991481244564),
1893 (minx + 0.007186584174633026, -0.012252332642674446, maxz - 0.00907355290837586),
1894 (minx + 0.008037150837481022, -0.012252332642674446, maxz - 0.008037138264626265),
1895 (minx + 0.009073568508028984, -0.012252332642674446, maxz - 0.007186574395745993),
1896 (minx + 0.010256008245050907, -0.012252331711351871, maxz - 0.006554548628628254),
1897 (minx + 0.011539029655978084, -0.012252331711351871, maxz - 0.006165351718664169),
1898 (maxx - 0.01237887132447213, -0.012252329848706722, maxz - 0.010387574089691043),
1899 (maxx - 0.011465257033705711, -0.012252329848706722, maxz - 0.01076600537635386),
1900 (maxx - 0.01108119694981724, -0.012252329848706722, maxz - 0.011081195320002735),
1901 (maxx - 0.010766007238999009, -0.012252329848706722, maxz - 0.011465255171060562),
1902 (maxx - 0.010531799867749214, -0.012252329848706722, maxz - 0.01190342620247975),
1903 (maxx - 0.01108119694981724, -0.012252329848706722, minz + 0.01108119951095432),
1904 (maxx - 0.011903428356163204, -0.012252329848706722, minz + 0.010531801730394363),
1905 (minx + 0.012378871033433825, -0.012252329848706722, minz + 0.010387577582150698),
1906 (minx + 0.011465256451629102, -0.012252329848706722, minz + 0.01076600980013609),
1907 (minx + 0.01076600607484579, -0.012252329848706722, minz + 0.011465260875411332),
1908 (minx + 0.010531799402087927, -0.012252329848706722, minz + 0.011903432430699468),
1909 (minx + 0.010338877560570836, -0.012252329848706722, maxz - 0.01287331168983985),
1910 (minx + 0.010531801264733076, -0.012252329848706722, maxz - 0.01190342364134267),
1911 (minx + 0.011081199743784964, -0.012252329848706722, maxz - 0.011081192875280976),
1912 (minx + 0.011465260293334723, -0.012252329848706722, maxz - 0.010766003280878067),
1913 (maxx - 0.01287331586396423, -0.012252329848706722, maxz - 0.010338874999433756),
1914 (maxx - 0.011903427948709577, -0.012252329848706722, maxz - 0.010531798237934709),
1915 (maxx - 0.010387575486674905, -0.012252329848706722, maxz - 0.012378869636449963),
1916 (maxx - 0.010338877094909549, -0.012252329848706722, maxz - 0.012873313945746867),
1917 (maxx - 0.010387575486674905, -0.012252329848706722, minz + 0.012378874002024531),
1918 (maxx - 0.010531799867749214, -0.012252329848706722, minz + 0.011903430917300284),
1919 (maxx - 0.010766007238999009, -0.012252329848706722, minz + 0.011465259245596826),
1920 (maxx - 0.011465257382951677, -0.012252329848706722, minz + 0.010766008868813515),
1921 (maxx - 0.01237887202296406, -0.012252329848706722, minz + 0.010387577582150698),
1922 (minx + 0.01287331567758343, -0.012252329848706722, minz + 0.010338879656046629),
1923 (minx + 0.011903427541255951, -0.012252329848706722, minz + 0.010531802894547582),
1924 (minx + 0.011081196367740631, -0.012252329848706722, minz + 0.011081200325861573),
1925 (minx + 0.010387575021013618, -0.012252329848706722, minz + 0.01237887586466968),
1926 (minx + 0.01038757641799748, -0.012252329848706722, maxz - 0.012378867017105222),
1927 (minx + 0.010766008868813515, -0.012252329848706722, maxz - 0.011465252609923482),
1928 (minx + 0.011903432314284146, -0.012252329848706722, maxz - 0.01053179637528956),
1929 (minx + 0.01237887580646202, -0.012252329848706722, maxz - 0.010387573391199112)]
1931 # Faces
1932 myfaces = [(0, 1, 3, 2), (2, 3, 5, 4), (4, 5, 7, 6), (6, 7, 9, 8), (8, 9, 11, 10),
1933 (10, 11, 13, 12), (12, 13, 15, 14), (14, 15, 17, 16), (16, 17, 19, 18), (18, 19, 21, 20),
1934 (20, 21, 23, 22), (22, 23, 25, 24), (24, 25, 27, 26), (26, 27, 29, 28), (28, 29, 31, 30),
1935 (30, 31, 33, 32), (32, 33, 35, 34), (34, 35, 37, 36), (36, 37, 39, 38), (38, 39, 41, 40),
1936 (40, 41, 43, 42), (42, 43, 45, 44), (44, 45, 47, 46), (46, 47, 49, 48), (48, 49, 51, 50),
1937 (50, 51, 53, 52), (52, 53, 55, 54), (54, 55, 57, 56), (56, 57, 59, 58), (58, 59, 61, 60),
1938 (60, 61, 63, 62), (62, 63, 1, 0), (45, 43, 85, 86), (23, 21, 74, 75), (51, 49, 88, 89),
1939 (7, 5, 66, 67), (29, 27, 77, 78), (57, 55, 91, 92), (35, 33, 80, 81), (13, 11, 69, 70),
1940 (63, 61, 94, 95), (41, 39, 83, 84), (19, 17, 72, 73), (47, 45, 86, 87), (3, 1, 64, 65),
1941 (25, 23, 75, 76), (53, 51, 89, 90), (9, 7, 67, 68), (31, 29, 78, 79), (59, 57, 92, 93),
1942 (37, 35, 81, 82), (15, 13, 70, 71), (1, 63, 95, 64), (43, 41, 84, 85), (21, 19, 73, 74),
1943 (49, 47, 87, 88), (5, 3, 65, 66), (27, 25, 76, 77), (55, 53, 90, 91), (11, 9, 68, 69),
1944 (33, 31, 79, 80), (61, 59, 93, 94), (39, 37, 82, 83), (17, 15, 71, 72), (89, 88, 120, 121),
1945 (67, 66, 98, 99), (78, 77, 109, 110), (87, 86, 118, 119), (65, 64, 96, 97), (76, 75, 107, 108),
1946 (64, 95, 127, 96), (85, 84, 116, 117), (74, 73, 105, 106), (94, 93, 125, 126), (83, 82, 114, 115),
1947 (72, 71, 103, 104), (92, 91, 123, 124), (81, 80, 112, 113), (70, 69, 101, 102), (90, 89, 121, 122),
1948 (68, 67, 99, 100), (79, 78, 110, 111), (88, 87, 119, 120), (66, 65, 97, 98), (77, 76, 108, 109),
1949 (86, 85, 117, 118), (75, 74, 106, 107), (95, 94, 126, 127), (84, 83, 115, 116), (73, 72, 104, 105),
1950 (93, 92, 124, 125), (82, 81, 113, 114), (71, 70, 102, 103), (91, 90, 122, 123), (69, 68, 100, 101),
1951 (80, 79, 111, 112), (123, 122, 154, 155), (101, 100, 132, 133), (112, 111, 143, 144),
1952 (121, 120, 152, 153),
1953 (99, 98, 130, 131), (110, 109, 141, 142), (119, 118, 150, 151), (97, 96, 128, 129), (108, 107, 139, 140),
1954 (96, 127, 159, 128), (117, 116, 148, 149), (106, 105, 137, 138), (126, 125, 157, 158),
1955 (115, 114, 146, 147),
1956 (104, 103, 135, 136), (124, 123, 155, 156), (113, 112, 144, 145), (102, 101, 133, 134),
1957 (122, 121, 153, 154),
1958 (100, 99, 131, 132), (111, 110, 142, 143), (120, 119, 151, 152), (98, 97, 129, 130),
1959 (109, 108, 140, 141),
1960 (118, 117, 149, 150), (107, 106, 138, 139), (127, 126, 158, 159), (116, 115, 147, 148),
1961 (105, 104, 136, 137),
1962 (125, 124, 156, 157), (114, 113, 145, 146), (103, 102, 134, 135), (157, 156, 173, 174),
1963 (133, 132, 162, 163),
1964 (134, 133, 163, 164), (132, 131, 161, 162), (150, 149, 169, 170), (146, 145, 167, 185),
1965 (135, 134, 164, 177),
1966 (155, 154, 172, 189), (144, 143, 183, 184), (153, 152, 171, 188), (131, 130, 176, 161),
1967 (142, 141, 182, 166),
1968 (151, 150, 170, 187), (129, 128, 175, 160), (140, 139, 181, 165), (128, 159, 191, 175),
1969 (149, 148, 186, 169),
1970 (138, 137, 179, 180), (158, 157, 174, 190), (147, 146, 185, 168), (136, 135, 177, 178),
1971 (156, 155, 189, 173),
1972 (145, 144, 184, 167), (154, 153, 188, 172), (143, 142, 166, 183), (152, 151, 187, 171),
1973 (130, 129, 160, 176),
1974 (141, 140, 165, 182), (139, 138, 180, 181), (159, 158, 190, 191), (148, 147, 168, 186),
1975 (137, 136, 178, 179),
1976 (175, 191, 190, 174, 173, 189, 172, 188, 171, 187, 170, 169, 186, 168, 185, 167, 184, 183, 166, 182, 165,
1977 181, 180, 179, 178, 177, 164, 163, 162, 161, 176, 160)]
1979 return myvertex, myfaces
1982 # ----------------------------------------------
1983 # Handle model 06
1984 # ----------------------------------------------
1985 def handle_model_06():
1986 # ------------------------------------
1987 # Mesh data
1988 # ------------------------------------
1989 minx = -0.021158458665013313
1990 maxx = 0.021158456802368164
1991 maxy = 6.581399869531879e-10
1992 minz = -0.021158462390303612
1993 maxz = 0.021158454939723015
1995 # Vertex
1996 myvertex = [(maxx - 0.021158457078388343, maxy, maxz - 0.01716466387733817),
1997 (maxx - 0.021158457078388343, -0.004451401997357607, maxz - 0.01716466387733817),
1998 (maxx - 0.02037930692313239, maxy, maxz - 0.017241403926163912),
1999 (maxx - 0.02037930692313239, -0.004451401997357607, maxz - 0.017241403460502625),
2000 (maxx - 0.019630099064670503, maxy, maxz - 0.017468673642724752),
2001 (maxx - 0.019630099064670503, -0.004451401997357607, maxz - 0.017468673177063465),
2002 (maxx - 0.018939625238999724, maxy, maxz - 0.017837739316746593),
2003 (maxx - 0.018939625238999724, -0.004451401997357607, maxz - 0.017837738851085305),
2004 (maxx - 0.018334419932216406, maxy, maxz - 0.018334418768063188),
2005 (maxx - 0.018334419932216406, -0.004451401997357607, maxz - 0.018334418069571257),
2006 (maxx - 0.017837740713730454, maxy - 6.581399869531879e-10, maxz - 0.018939624540507793),
2007 (maxx - 0.017837740713730454, -0.004451401997357607, maxz - 0.018939623842015862),
2008 (maxx - 0.017468675039708614, maxy - 6.581399869531879e-10, maxz - 0.01963009813334793),
2009 (maxx - 0.017468675039708614, -0.004451401997357607, maxz - 0.01963009755127132),
2010 (maxx - 0.017241405323147774, maxy - 6.581399869531879e-10, maxz - 0.020379305817186832),
2011 (maxx - 0.017241405323147774, -0.004451401997357607, maxz - 0.020379305293317884),
2012 (maxx - 0.01716466573998332, maxy - 6.581399869531879e-10, maxz - 0.02115845568246083),
2013 (maxx - 0.01716466573998332, -0.004451401997357607, maxz - 0.021158455207246157),
2014 (maxx - 0.017241404857486486, maxy - 6.581399869531879e-10, minz + 0.020379311696160585),
2015 (maxx - 0.017241404857486486, -0.004451401997357607, minz + 0.02037931210361421),
2016 (maxx - 0.017468674574047327, maxy - 6.581399869531879e-10, minz + 0.01963010407052934),
2017 (maxx - 0.017468674574047327, -0.004451401997357607, minz + 0.01963010453619063),
2018 (maxx - 0.017837740713730454, maxy - 6.581399869531879e-10, minz + 0.01893962942995131),
2019 (maxx - 0.017837740713730454, -0.004451401997357607, minz + 0.01893963012844324),
2020 (maxx - 0.018334419932216406, -6.581399869531879e-10, minz + 0.01833442412316799),
2021 (maxx - 0.018334419932216406, -0.004451401997357607, minz + 0.018334424821659923),
2022 (maxx - 0.018939625471830368, -6.581399869531879e-10, minz + 0.01783774490468204),
2023 (maxx - 0.018939625471830368, -0.004451401997357607, minz + 0.017837745370343328),
2024 (maxx - 0.019630099763162434, -6.581399869531879e-10, minz + 0.01746867853216827),
2025 (maxx - 0.019630099763162434, -0.004451401997357607, minz + 0.017468678764998913),
2026 (maxx - 0.020379307912662625, -6.581399869531879e-10, minz + 0.01724140951409936),
2027 (maxx - 0.020379307912662625, -0.004451401997357607, minz + 0.01724140951409936),
2028 (minx + 0.02115845708765063, -6.581399869531879e-10, minz + 0.017164669930934906),
2029 (minx + 0.02115845708765063, -0.004451401997357607, minz + 0.017164670396596193),
2030 (minx + 0.020379306632094085, -6.581399869531879e-10, minz + 0.01724140951409936),
2031 (minx + 0.020379306632094085, -0.004451401997357607, minz + 0.017241409979760647),
2032 (minx + 0.019630098715424538, -6.581399869531879e-10, minz + 0.017468680161982775),
2033 (minx + 0.019630098715424538, -0.004451401997357607, minz + 0.017468680627644062),
2034 (minx + 0.018939624773338437, -6.581399869531879e-10, minz + 0.017837746301665902),
2035 (minx + 0.018939624773338437, -0.004451401997357607, minz + 0.017837747000157833),
2036 (minx + 0.01833441946655512, -6.581399869531879e-10, minz + 0.018334425752982497),
2037 (minx + 0.01833441946655512, -0.004451401997357607, minz + 0.018334426451474428),
2038 (minx + 0.017837740248069167, maxy - 6.581399869531879e-10, minz + 0.018939631758257747),
2039 (minx + 0.017837740248069167, -0.004451401997357607, minz + 0.018939632223919034),
2040 (minx + 0.017468674574047327, maxy - 6.581399869531879e-10, minz + 0.019630106398835778),
2041 (minx + 0.017468674574047327, -0.004451401997357607, minz + 0.019630106864497066),
2042 (minx + 0.01724140578880906, maxy - 6.581399869531879e-10, minz + 0.02037931466475129),
2043 (minx + 0.01724140578880906, -0.004451401997357607, minz + 0.02037931513041258),
2044 (minx + 0.017164666671305895, maxy - 6.581399869531879e-10, maxz - 0.021158452127581606),
2045 (minx + 0.017164666671305895, -0.004451401997357607, maxz - 0.02115845165236685),
2046 (minx + 0.017241406720131636, maxy - 6.581399869531879e-10, maxz - 0.02037930174265057),
2047 (minx + 0.017241406720131636, -0.004451401997357607, maxz - 0.02037930127698928),
2048 (minx + 0.01746867736801505, maxy - 6.581399869531879e-10, maxz - 0.019630093942396343),
2049 (minx + 0.01746867736801505, -0.004451401997357607, maxz - 0.019630093476735055),
2050 (minx + 0.01783774420619011, maxy - 6.581399869531879e-10, maxz - 0.018939620116725564),
2051 (minx + 0.01783774420619011, -0.004451401997357607, maxz - 0.018939619651064277),
2052 (minx + 0.018334424821659923, maxy, maxz - 0.01833441504277289),
2053 (minx + 0.018334424821659923, -0.004451401997357607, maxz - 0.018334414809942245),
2054 (minx + 0.018939631059765816, maxy, maxz - 0.017837736289948225),
2055 (minx + 0.018939631059765816, -0.004451401997357607, maxz - 0.017837735824286938),
2056 (minx + 0.019630105700343847, maxy, maxz - 0.017468671081587672),
2057 (minx + 0.019630105700343847, -0.004451401997357607, maxz - 0.01746867084875703),
2058 (minx + 0.020379314315505326, maxy, maxz - 0.017241402994841337),
2059 (minx + 0.020379314315505326, -0.004451401997357607, maxz - 0.017241402063518763),
2060 (minx + 0.02115845651317172, -0.01480177417397499, maxz),
2061 (maxx - 0.017030648421496153, -0.01480177417397499, maxz - 0.00040655583143234253),
2062 (maxx - 0.013061466626822948, -0.01480177417397499, maxz - 0.0016105938702821732),
2063 (maxx - 0.00940344762057066, -0.01480177417397499, maxz - 0.0035658441483974457),
2064 (maxx - 0.006197170354425907, -0.01480177417397499, maxz - 0.006197171285748482),
2065 (maxx - 0.0035658441483974457, -0.01480177417397499, maxz - 0.009403450414538383),
2066 (maxx - 0.0016105901449918747, -0.014801775105297565, maxz - 0.013061468489468098),
2067 (maxx - 0.0004065539687871933, -0.014801775105297565, maxz - 0.017030649818480015),
2068 (maxx, -0.014801775105297565, minz + 0.0211584585064859),
2069 (maxx - 0.0004065539687871933, -0.014801775105297565, minz + 0.017030648421496153),
2070 (maxx - 0.0016105901449918747, -0.014801775105297565, minz + 0.013061468489468098),
2071 (maxx - 0.0035658441483974457, -0.01480177603662014, minz + 0.00940344762057066),
2072 (maxx - 0.006197170354425907, -0.01480177603662014, minz + 0.006197166629135609),
2073 (maxx - 0.009403450414538383, -0.01480177603662014, minz + 0.0035658422857522964),
2074 (maxx - 0.013061470352113247, -0.01480177603662014, minz + 0.0016105901449918747),
2075 (maxx - 0.017030653543770313, -0.01480177603662014, minz + 0.0004065539687871933),
2076 (minx + 0.02115844961887081, -0.01480177603662014, minz),
2077 (minx + 0.017030637711286545, -0.01480177603662014, minz + 0.0004065539687871933),
2078 (minx + 0.013061455450952053, -0.01480177603662014, minz + 0.0016105975955724716),
2079 (minx + 0.009403438307344913, -0.01480177603662014, minz + 0.0035658497363328934),
2080 (minx + 0.006197156384587288, -0.01480177603662014, minz + 0.006197175942361355),
2081 (minx + 0.003565831109881401, -0.01480177603662014, minz + 0.00940345972776413),
2082 (minx + 0.001610584557056427, -0.014801775105297565, minz + 0.013061481527984142),
2083 (minx + 0.0004065483808517456, -0.014801775105297565, minz + 0.01703066425397992),
2084 (minx, -0.014801775105297565, maxz - 0.021158439990372813),
2085 (minx + 0.00040655583143234253, -0.014801775105297565, maxz - 0.01703062793239951),
2086 (minx + 0.0016105994582176208, -0.014801775105297565, maxz - 0.013061447069048882),
2087 (minx + 0.0035658515989780426, -0.01480177417397499, maxz - 0.009403428062796593),
2088 (minx + 0.006197184324264526, -0.01480177417397499, maxz - 0.006197153590619564),
2089 (minx + 0.00940346997231245, -0.01480177417397499, maxz - 0.003565829247236252),
2090 (minx + 0.013061493635177612, -0.01480177417397499, maxz - 0.0016105808317661285),
2091 (minx + 0.017030677758157253, -0.01480177417397499, maxz - 0.00040655024349689484),
2092 (minx + 0.02115845651317172, -0.017049500718712807, maxz),
2093 (maxx - 0.017030648421496153, -0.017049500718712807, maxz - 0.00040655583143234253),
2094 (maxx - 0.013061466626822948, -0.017049500718712807, maxz - 0.0016105938702821732),
2095 (maxx - 0.00940344762057066, -0.017049500718712807, maxz - 0.0035658441483974457),
2096 (maxx - 0.006197170354425907, -0.017049500718712807, maxz - 0.006197171285748482),
2097 (maxx - 0.0035658441483974457, -0.017049500718712807, maxz - 0.009403450414538383),
2098 (maxx - 0.0016105901449918747, -0.017049502581357956, maxz - 0.013061468489468098),
2099 (maxx - 0.0004065539687871933, -0.017049502581357956, maxz - 0.017030649818480015),
2100 (maxx, -0.017049502581357956, maxz - 0.021158458637408728),
2101 (maxx - 0.0004065539687871933, -0.017049502581357956, minz + 0.017030648421496153),
2102 (maxx - 0.0016105901449918747, -0.017049502581357956, minz + 0.013061468489468098),
2103 (maxx - 0.0035658441483974457, -0.017049502581357956, minz + 0.00940344762057066),
2104 (maxx - 0.006197170354425907, -0.017049502581357956, minz + 0.006197166629135609),
2105 (maxx - 0.009403450414538383, -0.017049502581357956, minz + 0.0035658422857522964),
2106 (maxx - 0.013061470352113247, -0.017049502581357956, minz + 0.0016105901449918747),
2107 (maxx - 0.017030653543770313, -0.017049502581357956, minz + 0.0004065539687871933),
2108 (minx + 0.02115844961887081, -0.017049502581357956, minz),
2109 (minx + 0.017030637711286545, -0.017049502581357956, minz + 0.0004065539687871933),
2110 (minx + 0.013061455450952053, -0.017049502581357956, minz + 0.0016105975955724716),
2111 (minx + 0.009403438307344913, -0.017049502581357956, minz + 0.0035658497363328934),
2112 (minx + 0.006197156384587288, -0.017049502581357956, minz + 0.006197175942361355),
2113 (minx + 0.003565831109881401, -0.017049502581357956, minz + 0.00940345972776413),
2114 (minx + 0.001610584557056427, -0.017049502581357956, minz + 0.013061481527984142),
2115 (minx + 0.0004065483808517456, -0.017049502581357956, minz + 0.01703066425397992),
2116 (minx, -0.017049502581357956, maxz - 0.02115843980423726),
2117 (minx + 0.00040655583143234253, -0.017049502581357956, maxz - 0.01703062793239951),
2118 (minx + 0.0016105994582176208, -0.017049502581357956, maxz - 0.013061447069048882),
2119 (minx + 0.0035658515989780426, -0.017049500718712807, maxz - 0.009403428062796593),
2120 (minx + 0.006197184324264526, -0.017049500718712807, maxz - 0.006197153590619564),
2121 (minx + 0.00940346997231245, -0.017049500718712807, maxz - 0.003565829247236252),
2122 (minx + 0.013061493635177612, -0.017049500718712807, maxz - 0.0016105808317661285),
2123 (minx + 0.017030677758157253, -0.017049500718712807, maxz - 0.00040655024349689484),
2124 (minx + 0.021158456942334758, -0.017049498856067657, maxz - 0.00991731882095337),
2125 (maxx - 0.01896542147733271, -0.017049498856067657, maxz - 0.010133316740393639),
2126 (maxx - 0.016856661066412926, -0.017049498856067657, maxz - 0.010773001238703728),
2127 (maxx - 0.014913217630237341, -0.017049500718712807, maxz - 0.01181179191917181),
2128 (maxx - 0.013209773227572441, -0.017049500718712807, maxz - 0.013209772296249866),
2129 (maxx - 0.011811794713139534, -0.017049500718712807, maxz - 0.014913215301930904),
2130 (maxx - 0.010773001238703728, -0.017049500718712807, maxz - 0.01685666013509035),
2131 (maxx - 0.010133316740393639, -0.017049500718712807, maxz - 0.01896541938185692),
2132 (maxx - 0.009917320683598518, -0.017049500718712807, maxz - 0.02115845573538011),
2133 (maxx - 0.01013331487774849, -0.017049500718712807, minz + 0.018965424969792366),
2134 (maxx - 0.010773001238703728, -0.017049500718712807, minz + 0.01685666525736451),
2135 (maxx - 0.011811794713139534, -0.017049500718712807, minz + 0.01491321949288249),
2136 (maxx - 0.013209773227572441, -0.017049500718712807, minz + 0.01320977695286274),
2137 (maxx - 0.014913217630237341, -0.017049500718712807, minz + 0.011811795644462109),
2138 (maxx - 0.016856663394719362, -0.017049502581357956, minz + 0.010773002170026302),
2139 (maxx - 0.01896542403846979, -0.017049502581357956, minz + 0.010133319534361362),
2140 (minx + 0.021158453279507494, -0.017049502581357956, minz + 0.009917323477566242),
2141 (minx + 0.018965415423735976, -0.017049502581357956, minz + 0.010133319534361362),
2142 (minx + 0.016856654547154903, -0.017049502581357956, minz + 0.01077300775796175),
2143 (minx + 0.014913210645318031, -0.017049500718712807, minz + 0.011811801232397556),
2144 (minx + 0.013209767639636993, -0.017049500718712807, minz + 0.013209780678153038),
2145 (minx + 0.011811788193881512, -0.017049500718712807, minz + 0.014913226012140512),
2146 (minx + 0.01077299751341343, -0.017049500718712807, minz + 0.016856671776622534),
2147 (minx + 0.010133313946425915, -0.017049500718712807, minz + 0.018965433351695538),
2148 (minx + 0.009917320683598518, -0.017049500718712807, maxz - 0.02115844572963077),
2149 (minx + 0.010133318603038788, -0.017049500718712807, maxz - 0.01896540797315538),
2150 (minx + 0.0107730058953166, -0.017049500718712807, maxz - 0.01685664849355817),
2151 (minx + 0.011811800301074982, -0.017049500718712807, maxz - 0.014913204126060009),
2152 (minx + 0.013209782540798187, -0.017049500718712807, maxz - 0.013209762051701546),
2153 (minx + 0.014913228340446949, -0.017049500718712807, maxz - 0.011811783537268639),
2154 (minx + 0.016856675501912832, -0.017049498856067657, maxz - 0.010772991925477982),
2155 (minx + 0.01896543661132455, -0.017049498856067657, maxz - 0.010133312083780766),
2156 (maxx - 0.020345793396700174, -0.017049498856067657, maxz - 0.01707291603088379),
2157 (maxx - 0.018844185629859567, -0.017049498856067657, maxz - 0.017694902140647173),
2158 (maxx - 0.01821294822730124, -0.017049498856067657, maxz - 0.01821294496767223),
2159 (maxx - 0.017694905400276184, -0.017049498856067657, maxz - 0.018844182137399912),
2160 (maxx - 0.017309964634478092, -0.017049498856067657, maxz - 0.0195643559563905),
2161 (maxx - 0.01821294822730124, -0.017049498856067657, minz + 0.01821295404806733),
2162 (maxx - 0.019564359914511442, -0.017049498856067657, minz + 0.017309968825429678),
2163 (minx + 0.02034579199971631, -0.017049498856067657, minz + 0.017072923481464386),
2164 (minx + 0.018844183767214417, -0.017049498856067657, minz + 0.017694910988211632),
2165 (minx + 0.01769490260630846, -0.017049498856067657, minz + 0.01884419354610145),
2166 (minx + 0.017309962771832943, -0.017049498856067657, minz + 0.01956436806358397),
2167 (minx + 0.016992878634482622, -0.017049498856067657, maxz - 0.021158450354705316),
2168 (minx + 0.017309966031461954, -0.017049498856067657, maxz - 0.019564351649023592),
2169 (minx + 0.01821295195259154, -0.017049498856067657, maxz - 0.018212941009551287),
2170 (minx + 0.01884419028647244, -0.017049498856067657, maxz - 0.017694898648187518),
2171 (maxx - 0.021158457657990293, -0.017049498856067657, maxz - 0.016992874443531036),
2172 (maxx - 0.01956435921601951, -0.017049498856067657, maxz - 0.017309961607679725),
2173 (maxx - 0.017072918359190226, -0.017049498856067657, maxz - 0.020345790137071162),
2174 (maxx - 0.016992878168821335, -0.017049498856067657, maxz - 0.021158454062492393),
2175 (maxx - 0.017072918359190226, -0.017049498856067657, minz + 0.020345799159258604),
2176 (maxx - 0.017309964634478092, -0.017049498856067657, minz + 0.01956436550244689),
2177 (maxx - 0.017694905400276184, -0.017049498856067657, minz + 0.01884419098496437),
2178 (maxx - 0.018844186328351498, -0.017049498856067657, minz + 0.01769490959122777),
2179 (maxx - 0.020345794560853392, -0.017049498856067657, minz + 0.017072923481464386),
2180 (minx + 0.021158456452073482, -0.017049498856067657, minz + 0.01699288422241807),
2181 (minx + 0.019564357702620327, -0.017049498856067657, minz + 0.01730997092090547),
2182 (minx + 0.01821294636465609, -0.017049498856067657, minz + 0.018212955445051193),
2183 (minx + 0.01707291742786765, -0.017049498856067657, minz + 0.020345802302472293),
2184 (minx + 0.017072919756174088, -0.017049498856067657, maxz - 0.020345785829704255),
2185 (minx + 0.017694907495751977, -0.017049498856067657, maxz - 0.018844177946448326),
2186 (minx + 0.01956436550244689, -0.017049498856067657, maxz - 0.017309958348050714),
2187 (minx + 0.020345799799542874, -0.017049498856067657, maxz - 0.017072914633899927)]
2189 # Faces
2190 myfaces = [(0, 1, 3, 2), (2, 3, 5, 4), (4, 5, 7, 6), (6, 7, 9, 8), (8, 9, 11, 10),
2191 (10, 11, 13, 12), (12, 13, 15, 14), (14, 15, 17, 16), (16, 17, 19, 18), (18, 19, 21, 20),
2192 (20, 21, 23, 22), (22, 23, 25, 24), (24, 25, 27, 26), (26, 27, 29, 28), (28, 29, 31, 30),
2193 (30, 31, 33, 32), (32, 33, 35, 34), (34, 35, 37, 36), (36, 37, 39, 38), (38, 39, 41, 40),
2194 (40, 41, 43, 42), (42, 43, 45, 44), (44, 45, 47, 46), (46, 47, 49, 48), (48, 49, 51, 50),
2195 (50, 51, 53, 52), (52, 53, 55, 54), (54, 55, 57, 56), (56, 57, 59, 58), (58, 59, 61, 60),
2196 (60, 61, 63, 62), (62, 63, 1, 0), (45, 43, 85, 86), (23, 21, 74, 75), (51, 49, 88, 89),
2197 (7, 5, 66, 67), (29, 27, 77, 78), (57, 55, 91, 92), (35, 33, 80, 81), (13, 11, 69, 70),
2198 (63, 61, 94, 95), (41, 39, 83, 84), (19, 17, 72, 73), (47, 45, 86, 87), (3, 1, 64, 65),
2199 (25, 23, 75, 76), (53, 51, 89, 90), (9, 7, 67, 68), (31, 29, 78, 79), (59, 57, 92, 93),
2200 (37, 35, 81, 82), (15, 13, 70, 71), (1, 63, 95, 64), (43, 41, 84, 85), (21, 19, 73, 74),
2201 (49, 47, 87, 88), (5, 3, 65, 66), (27, 25, 76, 77), (55, 53, 90, 91), (11, 9, 68, 69),
2202 (33, 31, 79, 80), (61, 59, 93, 94), (39, 37, 82, 83), (17, 15, 71, 72), (89, 88, 120, 121),
2203 (67, 66, 98, 99), (78, 77, 109, 110), (87, 86, 118, 119), (65, 64, 96, 97), (76, 75, 107, 108),
2204 (64, 95, 127, 96), (85, 84, 116, 117), (74, 73, 105, 106), (94, 93, 125, 126), (83, 82, 114, 115),
2205 (72, 71, 103, 104), (92, 91, 123, 124), (81, 80, 112, 113), (70, 69, 101, 102), (90, 89, 121, 122),
2206 (68, 67, 99, 100), (79, 78, 110, 111), (88, 87, 119, 120), (66, 65, 97, 98), (77, 76, 108, 109),
2207 (86, 85, 117, 118), (75, 74, 106, 107), (95, 94, 126, 127), (84, 83, 115, 116), (73, 72, 104, 105),
2208 (93, 92, 124, 125), (82, 81, 113, 114), (71, 70, 102, 103), (91, 90, 122, 123), (69, 68, 100, 101),
2209 (80, 79, 111, 112), (123, 122, 154, 155), (101, 100, 132, 133), (112, 111, 143, 144),
2210 (121, 120, 152, 153),
2211 (99, 98, 130, 131), (110, 109, 141, 142), (119, 118, 150, 151), (97, 96, 128, 129), (108, 107, 139, 140),
2212 (96, 127, 159, 128), (117, 116, 148, 149), (106, 105, 137, 138), (126, 125, 157, 158),
2213 (115, 114, 146, 147),
2214 (104, 103, 135, 136), (124, 123, 155, 156), (113, 112, 144, 145), (102, 101, 133, 134),
2215 (122, 121, 153, 154),
2216 (100, 99, 131, 132), (111, 110, 142, 143), (120, 119, 151, 152), (98, 97, 129, 130),
2217 (109, 108, 140, 141),
2218 (118, 117, 149, 150), (107, 106, 138, 139), (127, 126, 158, 159), (116, 115, 147, 148),
2219 (105, 104, 136, 137),
2220 (125, 124, 156, 157), (114, 113, 145, 146), (103, 102, 134, 135), (157, 156, 173, 174),
2221 (133, 132, 162, 163),
2222 (134, 133, 163, 164), (132, 131, 161, 162), (150, 149, 169, 170), (146, 145, 167, 185),
2223 (135, 134, 164, 177),
2224 (155, 154, 172, 189), (144, 143, 183, 184), (153, 152, 171, 188), (131, 130, 176, 161),
2225 (142, 141, 182, 166),
2226 (151, 150, 170, 187), (129, 128, 175, 160), (140, 139, 181, 165), (128, 159, 191, 175),
2227 (149, 148, 186, 169),
2228 (138, 137, 179, 180), (158, 157, 174, 190), (147, 146, 185, 168), (136, 135, 177, 178),
2229 (156, 155, 189, 173),
2230 (145, 144, 184, 167), (154, 153, 188, 172), (143, 142, 166, 183), (152, 151, 187, 171),
2231 (130, 129, 160, 176),
2232 (141, 140, 165, 182), (139, 138, 180, 181), (159, 158, 190, 191), (148, 147, 168, 186),
2233 (137, 136, 178, 179),
2234 (175, 191, 190, 174, 173, 189, 172, 188, 171, 187, 170, 169, 186, 168, 185, 167, 184, 183, 166, 182, 165,
2235 181, 180, 179, 178, 177, 164, 163, 162, 161, 176, 160)]
2237 return myvertex, myfaces
2240 # ----------------------------------------------
2241 # Handle model 07
2242 # ----------------------------------------------
2243 def handle_model_07():
2244 # ------------------------------------
2245 # Mesh data
2246 # ------------------------------------
2247 minx = -0.10910986363887787
2248 maxx = 0.10910986363887787
2249 maxy = 0
2250 minz = -0.0039262366481125355
2251 maxz = 0.0039262366481125355
2253 # Vertex
2254 myvertex = [(maxx, -0.017620893195271492, maxz),
2255 (maxx, -0.01611838862299919, maxz - 0.00029886653646826744),
2256 (maxx, -0.014844624325633049, maxz - 0.0011499673128128052),
2257 (maxx, -0.013993524014949799, maxz - 0.002423731260932982),
2258 (maxx, -0.013694657012820244, minz + 0.003926236289926277),
2259 (maxx, -0.013993524014949799, minz + 0.002423729980364442),
2260 (maxx, -0.014844624325633049, minz + 0.001149968709796667),
2261 (maxx, -0.016118386760354042, minz + 0.0002988663036376238),
2262 (maxx, -0.017620891332626343, minz),
2263 (maxx, -0.019123397767543793, minz + 0.00029886653646826744),
2264 (maxx, -0.020397160202264786, minz + 0.0011499675456434488),
2265 (maxx, -0.021248264238238335, minz + 0.0024237307952716947),
2266 (maxx, -0.02154713124036789, maxz - 0.003926236195012284),
2267 (maxx, -0.021248262375593185, maxz - 0.0024237297475337982),
2268 (maxx, -0.020397160202264786, maxz - 0.0011499666143208742),
2269 (maxx, -0.019123397767543793, maxz - 0.0002988646738231182),
2270 (maxx - 0.02949388325214386, -0.01396019384264946, maxz - 0.0024807279696688056),
2271 (maxx - 0.030047059059143066, -0.01396019384264946, maxz - 0.0025907604722306132),
2272 (maxx - 0.030516013503074646, -0.01396019384264946, maxz - 0.002904107444919646),
2273 (maxx - 0.030829355120658875, -0.01396019384264946, maxz - 0.0033730645664036274),
2274 (maxx - 0.030939392745494843, -0.01396019198000431, minz + 0.003926236608184253),
2275 (maxx - 0.030829355120658875, -0.01396019384264946, minz + 0.0033730643335729837),
2276 (maxx - 0.030516013503074646, -0.01396019384264946, minz + 0.0029041077941656113),
2277 (maxx - 0.030047059059143066, -0.01396019384264946, minz + 0.002590760588645935),
2278 (maxx - 0.02949388325214386, -0.01396019384264946, minz + 0.0024807280860841274),
2279 (maxx - 0.02894071489572525, -0.01396019384264946, minz + 0.002590760588645935),
2280 (maxx - 0.028471753001213074, -0.01396019384264946, minz + 0.002904107444919646),
2281 (maxx - 0.028158411383628845, -0.01396019384264946, minz + 0.0033730644499883056),
2282 (maxx - 0.028048373758792877, -0.01396019384264946, maxz - 0.0039262363893523555),
2283 (maxx - 0.028158411383628845, -0.01396019384264946, maxz - 0.0033730638679116964),
2284 (maxx - 0.028471753001213074, -0.01396019384264946, maxz - 0.0029041070956736803),
2285 (maxx - 0.02894071489572525, -0.01396019384264946, maxz - 0.0025907597737386823),
2286 (maxx - 0.02949388325214386, -1.862645149230957e-09, maxz - 0.0024807279696688056),
2287 (maxx - 0.030047059059143066, -1.862645149230957e-09, maxz - 0.0025907604722306132),
2288 (maxx - 0.030516013503074646, -1.862645149230957e-09, maxz - 0.002904107444919646),
2289 (maxx - 0.030829355120658875, maxy, maxz - 0.0033730645664036274),
2290 (maxx - 0.030939392745494843, maxy, minz + 0.003926236608184253),
2291 (maxx - 0.030829355120658875, maxy, minz + 0.0033730643335729837),
2292 (maxx - 0.030516013503074646, -1.862645149230957e-09, minz + 0.0029041077941656113),
2293 (maxx - 0.030047059059143066, -1.862645149230957e-09, minz + 0.002590760588645935),
2294 (maxx - 0.02949388325214386, -1.862645149230957e-09, minz + 0.0024807280860841274),
2295 (maxx - 0.02894071489572525, -1.862645149230957e-09, minz + 0.002590760588645935),
2296 (maxx - 0.028471753001213074, -1.862645149230957e-09, minz + 0.002904107444919646),
2297 (maxx - 0.028158411383628845, -1.862645149230957e-09, minz + 0.0033730644499883056),
2298 (maxx - 0.028048373758792877, -1.862645149230957e-09, maxz - 0.0039262363893523555),
2299 (maxx - 0.028158411383628845, -1.862645149230957e-09, maxz - 0.0033730638679116964),
2300 (maxx - 0.028471753001213074, -1.862645149230957e-09, maxz - 0.0029041070956736803),
2301 (maxx - 0.02894071489572525, -1.862645149230957e-09, maxz - 0.0025907597737386823),
2302 (minx + 0.10910986037924886, -0.017620893195271492, maxz),
2303 (minx + 0.10910986037924886, -0.01611838862299919, maxz - 0.00029886653646826744),
2304 (minx + 0.10910986037924886, -0.014844624325633049, maxz - 0.0011499673128128052),
2305 (minx + 0.10910986037924886, -0.013993524014949799, maxz - 0.002423731260932982),
2306 (minx + 0.10910986037924886, -0.013694657012820244, minz + 0.003926236289926277),
2307 (minx + 0.10910986037924886, -0.013993524014949799, minz + 0.002423729980364442),
2308 (minx + 0.10910986037924886, -0.014844624325633049, minz + 0.001149968709796667),
2309 (minx + 0.10910986037924886, -0.016118386760354042, minz + 0.0002988663036376238),
2310 (minx + 0.10910986037924886, -0.017620891332626343, minz),
2311 (minx + 0.10910986037924886, -0.019123397767543793, minz + 0.00029886653646826744),
2312 (minx + 0.10910986037924886, -0.020397160202264786, minz + 0.0011499675456434488),
2313 (minx + 0.10910986037924886, -0.021248264238238335, minz + 0.0024237307952716947),
2314 (minx + 0.10910986037924886, -0.02154713124036789, maxz - 0.003926236195012284),
2315 (minx + 0.10910986037924886, -0.021248262375593185, maxz - 0.0024237297475337982),
2316 (minx + 0.10910986037924886, -0.020397160202264786, maxz - 0.0011499666143208742),
2317 (minx + 0.10910986037924886, -0.019123397767543793, maxz - 0.0002988646738231182),
2318 (minx, -0.017620893195271492, maxz),
2319 (minx, -0.01611838862299919, maxz - 0.00029886653646826744),
2320 (minx, -0.014844624325633049, maxz - 0.0011499673128128052),
2321 (minx, -0.013993524014949799, maxz - 0.002423731260932982),
2322 (minx, -0.013694657012820244, minz + 0.003926236289926277),
2323 (minx, -0.013993524014949799, minz + 0.002423729980364442),
2324 (minx, -0.014844624325633049, minz + 0.001149968709796667),
2325 (minx, -0.016118386760354042, minz + 0.0002988663036376238),
2326 (minx, -0.017620891332626343, minz),
2327 (minx, -0.019123397767543793, minz + 0.00029886653646826744),
2328 (minx, -0.020397160202264786, minz + 0.0011499675456434488),
2329 (minx, -0.021248264238238335, minz + 0.0024237307952716947),
2330 (minx, -0.02154713124036789, maxz - 0.003926236195012284),
2331 (minx, -0.021248262375593185, maxz - 0.0024237297475337982),
2332 (minx, -0.020397160202264786, maxz - 0.0011499666143208742),
2333 (minx, -0.019123397767543793, maxz - 0.0002988646738231182),
2334 (minx + 0.02949388325214386, -0.01396019384264946, maxz - 0.0024807279696688056),
2335 (minx + 0.030047059059143066, -0.01396019384264946, maxz - 0.0025907604722306132),
2336 (minx + 0.030516013503074646, -0.01396019384264946, maxz - 0.002904107444919646),
2337 (minx + 0.030829355120658875, -0.01396019384264946, maxz - 0.0033730645664036274),
2338 (minx + 0.030939392745494843, -0.01396019198000431, minz + 0.003926236608184253),
2339 (minx + 0.030829355120658875, -0.01396019384264946, minz + 0.0033730643335729837),
2340 (minx + 0.030516013503074646, -0.01396019384264946, minz + 0.0029041077941656113),
2341 (minx + 0.030047059059143066, -0.01396019384264946, minz + 0.002590760588645935),
2342 (minx + 0.02949388325214386, -0.01396019384264946, minz + 0.0024807280860841274),
2343 (minx + 0.02894071489572525, -0.01396019384264946, minz + 0.002590760588645935),
2344 (minx + 0.028471753001213074, -0.01396019384264946, minz + 0.002904107444919646),
2345 (minx + 0.028158411383628845, -0.01396019384264946, minz + 0.0033730644499883056),
2346 (minx + 0.028048373758792877, -0.01396019384264946, maxz - 0.0039262363893523555),
2347 (minx + 0.028158411383628845, -0.01396019384264946, maxz - 0.0033730638679116964),
2348 (minx + 0.028471753001213074, -0.01396019384264946, maxz - 0.0029041070956736803),
2349 (minx + 0.02894071489572525, -0.01396019384264946, maxz - 0.0025907597737386823),
2350 (minx + 0.02949388325214386, -1.862645149230957e-09, maxz - 0.0024807279696688056),
2351 (minx + 0.030047059059143066, -1.862645149230957e-09, maxz - 0.0025907604722306132),
2352 (minx + 0.030516013503074646, -1.862645149230957e-09, maxz - 0.002904107444919646),
2353 (minx + 0.030829355120658875, maxy, maxz - 0.0033730645664036274),
2354 (minx + 0.030939392745494843, maxy, minz + 0.003926236608184253),
2355 (minx + 0.030829355120658875, maxy, minz + 0.0033730643335729837),
2356 (minx + 0.030516013503074646, -1.862645149230957e-09, minz + 0.0029041077941656113),
2357 (minx + 0.030047059059143066, -1.862645149230957e-09, minz + 0.002590760588645935),
2358 (minx + 0.02949388325214386, -1.862645149230957e-09, minz + 0.0024807280860841274),
2359 (minx + 0.02894071489572525, -1.862645149230957e-09, minz + 0.002590760588645935),
2360 (minx + 0.028471753001213074, -1.862645149230957e-09, minz + 0.002904107444919646),
2361 (minx + 0.028158411383628845, -1.862645149230957e-09, minz + 0.0033730644499883056),
2362 (minx + 0.028048373758792877, -1.862645149230957e-09, maxz - 0.0039262363893523555),
2363 (minx + 0.028158411383628845, -1.862645149230957e-09, maxz - 0.0033730638679116964),
2364 (minx + 0.028471753001213074, -1.862645149230957e-09, maxz - 0.0029041070956736803),
2365 (minx + 0.02894071489572525, -1.862645149230957e-09, maxz - 0.0025907597737386823)]
2367 # Faces
2368 myfaces = [(49, 48, 0, 1), (60, 59, 11, 12), (58, 57, 9, 10), (56, 55, 7, 8), (54, 53, 5, 6),
2369 (52, 51, 3, 4), (48, 63, 15, 0), (50, 49, 1, 2), (61, 60, 12, 13), (59, 58, 10, 11),
2370 (57, 56, 8, 9), (55, 54, 6, 7), (53, 52, 4, 5), (63, 62, 14, 15), (51, 50, 2, 3),
2371 (62, 61, 13, 14), (17, 16, 32, 33), (32, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33),
2372 (28, 27, 43, 44), (26, 25, 41, 42),
2373 (24, 23, 39, 40), (22, 21, 37, 38), (20, 19, 35, 36), (16, 31, 47, 32), (18, 17, 33, 34),
2374 (29, 28, 44, 45), (27, 26, 42, 43), (25, 24, 40, 41), (23, 22, 38, 39), (21, 20, 36, 37),
2375 (31, 30, 46, 47), (19, 18, 34, 35), (30, 29, 45, 46), (49, 65, 64, 48), (60, 76, 75, 59),
2376 (58, 74, 73, 57), (56, 72, 71, 55), (54, 70, 69, 53), (52, 68, 67, 51), (48, 64, 79, 63),
2377 (50, 66, 65, 49), (61, 77, 76, 60), (59, 75, 74, 58), (57, 73, 72, 56), (55, 71, 70, 54),
2378 (53, 69, 68, 52), (63, 79, 78, 62), (51, 67, 66, 50), (62, 78, 77, 61), (81, 97, 96, 80),
2379 (96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111), (92, 108, 107, 91),
2380 (90, 106, 105, 89), (88, 104, 103, 87), (86, 102, 101, 85),
2381 (84, 100, 99, 83), (80, 96, 111, 95), (82, 98, 97, 81), (93, 109, 108, 92), (91, 107, 106, 90),
2382 (89, 105, 104, 88), (87, 103, 102, 86), (85, 101, 100, 84), (95, 111, 110, 94), (83, 99, 98, 82),
2383 (94, 110, 109, 93), (0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1),
2384 (64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79)]
2386 return myvertex, myfaces
2389 # ----------------------------------------------
2390 # Handle model 08
2391 # ----------------------------------------------
2392 def handle_model_08():
2393 # ------------------------------------
2394 # Mesh data
2395 # ------------------------------------
2396 minx = -0.05910986289381981
2397 maxx = 0.05910986289381981
2398 maxy = 0
2399 minz = -0.0039262366481125355
2400 maxz = 0.0039262366481125355
2402 # Vertex
2403 myvertex = [(maxx, -0.017620893195271492, maxz),
2404 (maxx, -0.01611838862299919, maxz - 0.00029886653646826744),
2405 (maxx, -0.014844624325633049, maxz - 0.0011499673128128052),
2406 (maxx, -0.013993524014949799, maxz - 0.002423731260932982),
2407 (maxx, -0.013694657012820244, minz + 0.003926236289926277),
2408 (maxx, -0.013993524014949799, minz + 0.002423729980364442),
2409 (maxx, -0.014844624325633049, minz + 0.001149968709796667),
2410 (maxx, -0.016118386760354042, minz + 0.0002988663036376238),
2411 (maxx, -0.017620891332626343, minz),
2412 (maxx, -0.019123397767543793, minz + 0.00029886653646826744),
2413 (maxx, -0.020397160202264786, minz + 0.0011499675456434488),
2414 (maxx, -0.021248264238238335, minz + 0.0024237307952716947),
2415 (maxx, -0.02154713124036789, maxz - 0.003926236195012284),
2416 (maxx, -0.021248262375593185, maxz - 0.0024237297475337982),
2417 (maxx, -0.020397160202264786, maxz - 0.0011499666143208742),
2418 (maxx, -0.019123397767543793, maxz - 0.0002988646738231182),
2419 (maxx - 0.010583892464637756, -0.01396019384264946, maxz - 0.0024807279696688056),
2420 (maxx - 0.011137068271636963, -0.01396019384264946, maxz - 0.0025907604722306132),
2421 (maxx - 0.011606022715568542, -0.01396019384264946, maxz - 0.002904107444919646),
2422 (maxx - 0.011919364333152771, -0.01396019384264946, maxz - 0.0033730645664036274),
2423 (maxx - 0.012029401957988739, -0.01396019198000431, minz + 0.003926236608184253),
2424 (maxx - 0.011919364333152771, -0.01396019384264946, minz + 0.0033730643335729837),
2425 (maxx - 0.011606022715568542, -0.01396019384264946, minz + 0.0029041077941656113),
2426 (maxx - 0.011137068271636963, -0.01396019384264946, minz + 0.002590760588645935),
2427 (maxx - 0.010583892464637756, -0.01396019384264946, minz + 0.0024807280860841274),
2428 (maxx - 0.010030724108219147, -0.01396019384264946, minz + 0.002590760588645935),
2429 (maxx - 0.00956176221370697, -0.01396019384264946, minz + 0.002904107444919646),
2430 (maxx - 0.009248420596122742, -0.01396019384264946, minz + 0.0033730644499883056),
2431 (maxx - 0.009138382971286774, -0.01396019384264946, maxz - 0.0039262363893523555),
2432 (maxx - 0.009248420596122742, -0.01396019384264946, maxz - 0.0033730638679116964),
2433 (maxx - 0.00956176221370697, -0.01396019384264946, maxz - 0.0029041070956736803),
2434 (maxx - 0.010030724108219147, -0.01396019384264946, maxz - 0.0025907597737386823),
2435 (maxx - 0.010583892464637756, -1.862645149230957e-09, maxz - 0.0024807279696688056),
2436 (maxx - 0.011137068271636963, -1.862645149230957e-09, maxz - 0.0025907604722306132),
2437 (maxx - 0.011606022715568542, -1.862645149230957e-09, maxz - 0.002904107444919646),
2438 (maxx - 0.011919364333152771, maxy, maxz - 0.0033730645664036274),
2439 (maxx - 0.012029401957988739, maxy, minz + 0.003926236608184253),
2440 (maxx - 0.011919364333152771, maxy, minz + 0.0033730643335729837),
2441 (maxx - 0.011606022715568542, -1.862645149230957e-09, minz + 0.0029041077941656113),
2442 (maxx - 0.011137068271636963, -1.862645149230957e-09, minz + 0.002590760588645935),
2443 (maxx - 0.010583892464637756, -1.862645149230957e-09, minz + 0.0024807280860841274),
2444 (maxx - 0.010030724108219147, -1.862645149230957e-09, minz + 0.002590760588645935),
2445 (maxx - 0.00956176221370697, -1.862645149230957e-09, minz + 0.002904107444919646),
2446 (maxx - 0.009248420596122742, -1.862645149230957e-09, minz + 0.0033730644499883056),
2447 (maxx - 0.009138382971286774, -1.862645149230957e-09, maxz - 0.0039262363893523555),
2448 (maxx - 0.009248420596122742, -1.862645149230957e-09, maxz - 0.0033730638679116964),
2449 (maxx - 0.00956176221370697, -1.862645149230957e-09, maxz - 0.0029041070956736803),
2450 (maxx - 0.010030724108219147, -1.862645149230957e-09, maxz - 0.0025907597737386823),
2451 (minx, -0.017620893195271492, maxz),
2452 (minx, -0.01611838862299919, maxz - 0.00029886653646826744),
2453 (minx, -0.014844624325633049, maxz - 0.0011499673128128052),
2454 (minx, -0.013993524014949799, maxz - 0.002423731260932982),
2455 (minx, -0.013694657012820244, minz + 0.003926236289926277),
2456 (minx, -0.013993524014949799, minz + 0.002423729980364442),
2457 (minx, -0.014844624325633049, minz + 0.001149968709796667),
2458 (minx, -0.016118386760354042, minz + 0.0002988663036376238),
2459 (minx, -0.017620891332626343, minz),
2460 (minx, -0.019123397767543793, minz + 0.00029886653646826744),
2461 (minx, -0.020397160202264786, minz + 0.0011499675456434488),
2462 (minx, -0.021248264238238335, minz + 0.0024237307952716947),
2463 (minx, -0.02154713124036789, maxz - 0.003926236195012284),
2464 (minx, -0.021248262375593185, maxz - 0.0024237297475337982),
2465 (minx, -0.020397160202264786, maxz - 0.0011499666143208742),
2466 (minx, -0.019123397767543793, maxz - 0.0002988646738231182),
2467 (minx + 0.010583892464637756, -0.01396019384264946, maxz - 0.0024807279696688056),
2468 (minx + 0.011137068271636963, -0.01396019384264946, maxz - 0.0025907604722306132),
2469 (minx + 0.011606022715568542, -0.01396019384264946, maxz - 0.002904107444919646),
2470 (minx + 0.011919364333152771, -0.01396019384264946, maxz - 0.0033730645664036274),
2471 (minx + 0.012029401957988739, -0.01396019198000431, minz + 0.003926236608184253),
2472 (minx + 0.011919364333152771, -0.01396019384264946, minz + 0.0033730643335729837),
2473 (minx + 0.011606022715568542, -0.01396019384264946, minz + 0.0029041077941656113),
2474 (minx + 0.011137068271636963, -0.01396019384264946, minz + 0.002590760588645935),
2475 (minx + 0.010583892464637756, -0.01396019384264946, minz + 0.0024807280860841274),
2476 (minx + 0.010030724108219147, -0.01396019384264946, minz + 0.002590760588645935),
2477 (minx + 0.00956176221370697, -0.01396019384264946, minz + 0.002904107444919646),
2478 (minx + 0.009248420596122742, -0.01396019384264946, minz + 0.0033730644499883056),
2479 (minx + 0.009138382971286774, -0.01396019384264946, maxz - 0.0039262363893523555),
2480 (minx + 0.009248420596122742, -0.01396019384264946, maxz - 0.0033730638679116964),
2481 (minx + 0.00956176221370697, -0.01396019384264946, maxz - 0.0029041070956736803),
2482 (minx + 0.010030724108219147, -0.01396019384264946, maxz - 0.0025907597737386823),
2483 (minx + 0.010583892464637756, -1.862645149230957e-09, maxz - 0.0024807279696688056),
2484 (minx + 0.011137068271636963, -1.862645149230957e-09, maxz - 0.0025907604722306132),
2485 (minx + 0.011606022715568542, -1.862645149230957e-09, maxz - 0.002904107444919646),
2486 (minx + 0.011919364333152771, maxy, maxz - 0.0033730645664036274),
2487 (minx + 0.012029401957988739, maxy, minz + 0.003926236608184253),
2488 (minx + 0.011919364333152771, maxy, minz + 0.0033730643335729837),
2489 (minx + 0.011606022715568542, -1.862645149230957e-09, minz + 0.0029041077941656113),
2490 (minx + 0.011137068271636963, -1.862645149230957e-09, minz + 0.002590760588645935),
2491 (minx + 0.010583892464637756, -1.862645149230957e-09, minz + 0.0024807280860841274),
2492 (minx + 0.010030724108219147, -1.862645149230957e-09, minz + 0.002590760588645935),
2493 (minx + 0.00956176221370697, -1.862645149230957e-09, minz + 0.002904107444919646),
2494 (minx + 0.009248420596122742, -1.862645149230957e-09, minz + 0.0033730644499883056),
2495 (minx + 0.009138382971286774, -1.862645149230957e-09, maxz - 0.0039262363893523555),
2496 (minx + 0.009248420596122742, -1.862645149230957e-09, maxz - 0.0033730638679116964),
2497 (minx + 0.00956176221370697, -1.862645149230957e-09, maxz - 0.0029041070956736803),
2498 (minx + 0.010030724108219147, -1.862645149230957e-09, maxz - 0.0025907597737386823),
2499 (maxx - 0.0591098596341908, -0.017620893195271492, maxz),
2500 (maxx - 0.0591098596341908, -0.01611838862299919, maxz - 0.00029886653646826744),
2501 (maxx - 0.0591098596341908, -0.014844624325633049, maxz - 0.0011499673128128052),
2502 (maxx - 0.0591098596341908, -0.013993524014949799, maxz - 0.002423731260932982),
2503 (maxx - 0.0591098596341908, -0.013694657012820244, minz + 0.003926236289926277),
2504 (maxx - 0.0591098596341908, -0.013993524014949799, minz + 0.002423729980364442),
2505 (maxx - 0.0591098596341908, -0.014844624325633049, minz + 0.001149968709796667),
2506 (maxx - 0.0591098596341908, -0.016118386760354042, minz + 0.0002988663036376238),
2507 (maxx - 0.0591098596341908, -0.017620891332626343, minz),
2508 (maxx - 0.0591098596341908, -0.019123397767543793, minz + 0.00029886653646826744),
2509 (maxx - 0.0591098596341908, -0.020397160202264786, minz + 0.0011499675456434488),
2510 (maxx - 0.0591098596341908, -0.021248264238238335, minz + 0.0024237307952716947),
2511 (maxx - 0.0591098596341908, -0.02154713124036789, maxz - 0.003926236195012284),
2512 (maxx - 0.0591098596341908, -0.021248262375593185, maxz - 0.0024237297475337982),
2513 (maxx - 0.0591098596341908, -0.020397160202264786, maxz - 0.0011499666143208742),
2514 (maxx - 0.0591098596341908, -0.019123397767543793, maxz - 0.0002988646738231182)]
2516 # Faces
2517 myfaces = [(97, 96, 0, 1), (108, 107, 11, 12), (106, 105, 9, 10), (104, 103, 7, 8), (102, 101, 5, 6),
2518 (100, 99, 3, 4), (96, 111, 15, 0), (98, 97, 1, 2), (109, 108, 12, 13), (107, 106, 10, 11),
2519 (105, 104, 8, 9), (103, 102, 6, 7), (101, 100, 4, 5), (111, 110, 14, 15), (99, 98, 2, 3),
2520 (110, 109, 13, 14), (17, 16, 32, 33), (32, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33),
2521 (28, 27, 43, 44), (26, 25, 41, 42),
2522 (24, 23, 39, 40), (22, 21, 37, 38), (20, 19, 35, 36), (16, 31, 47, 32), (18, 17, 33, 34),
2523 (29, 28, 44, 45), (27, 26, 42, 43), (25, 24, 40, 41), (23, 22, 38, 39), (21, 20, 36, 37),
2524 (31, 30, 46, 47), (19, 18, 34, 35), (30, 29, 45, 46),
2525 (0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1),
2526 (97, 49, 48, 96),
2527 (108, 60, 59, 107), (106, 58, 57, 105), (104, 56, 55, 103), (102, 54, 53, 101), (100, 52, 51, 99),
2528 (96, 48, 63, 111), (98, 50, 49, 97), (109, 61, 60, 108), (107, 59, 58, 106), (105, 57, 56, 104),
2529 (103, 55, 54, 102), (101, 53, 52, 100), (111, 63, 62, 110), (99, 51, 50, 98), (110, 62, 61, 109),
2530 (65, 81, 80, 64), (80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95), (76, 92, 91, 75),
2531 (74, 90, 89, 73), (72, 88, 87, 71),
2532 (70, 86, 85, 69), (68, 84, 83, 67), (64, 80, 95, 79), (66, 82, 81, 65), (77, 93, 92, 76),
2533 (75, 91, 90, 74), (73, 89, 88, 72), (71, 87, 86, 70), (69, 85, 84, 68), (79, 95, 94, 78),
2534 (67, 83, 82, 66), (78, 94, 93, 77), (48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63)]
2536 return myvertex, myfaces
2539 # ----------------------------------------------
2540 # Creaate SKU code for inventory
2541 # ----------------------------------------------
2542 def createunitsku(self, cabinet):
2543 # ------------------
2544 # Wall or Floor
2545 # ------------------
2546 if self.type_cabinet == "1":
2547 p1 = "F"
2548 else:
2549 p1 = "W"
2550 # ------------------
2551 # Front type
2552 # ------------------
2553 if cabinet.dType == "1" or cabinet.dType == "2" or cabinet.dType == "3" or cabinet.dType == "8":
2554 p2 = "D" # door
2555 elif cabinet.dType == "9" or cabinet.dType == "10":
2556 p2 = "L" # door
2557 elif cabinet.dType == "4" or cabinet.dType == "5" or cabinet.dType == "6" or cabinet.dType == "11":
2558 p2 = "G" # glass
2559 elif cabinet.dType == "7":
2560 p2 = "W" # drawers
2561 else:
2562 p2 = "N" # none
2563 # ------------------
2564 # Door number
2565 # ------------------
2566 if cabinet.dType == "1" or cabinet.dType == "2" or cabinet.dType == "3" or cabinet.dType == "4" \
2567 or cabinet.dType == "5" or cabinet.dType == "6" or cabinet.dType == "9" or cabinet.dType == "10":
2568 p3 = "01"
2569 elif cabinet.dType == "7":
2570 p3 = "%02d" % cabinet.dNum
2571 elif cabinet.dType == "8" or cabinet.dType == "11":
2572 p3 = "02"
2573 else:
2574 p3 = "00"
2575 # ------------------
2576 # Handles
2577 # ------------------
2578 if cabinet.hand is True:
2579 p4 = 1
2580 else:
2581 p4 = 0
2582 # ------------------
2583 # Shelves
2584 # ------------------
2585 # noinspection PyBroadException
2586 try:
2587 if cabinet.dType == "7":
2588 p5 = "00" # drawers is always 0
2589 else:
2590 p5 = "%02d" % cabinet.sNum
2591 except:
2592 p5 = "00"
2593 # ------------------
2594 # Size
2595 # ------------------
2596 x = cabinet.sX
2597 y = self.depth + cabinet.wY
2598 z = self.height + cabinet.wZ
2600 p6 = "%06.3fx%06.3fx%06.3f-%06.3f" % (x, y, z, self.thickness)
2602 # ------------------
2603 # Door Size
2604 # ------------------
2605 if cabinet.dType == "1" or cabinet.dType == "2" or cabinet.dType == "3" \
2606 or cabinet.dType == "4" or cabinet.dType == "5" or cabinet.dType == "6":
2607 p7 = "%06.3f" % cabinet.sX
2608 elif cabinet.dType == "8" or cabinet.dType == "11":
2609 p7 = "%06.3f" % (cabinet.sX / 2)
2610 elif cabinet.dType == "9" or cabinet.dType == "10": # corners
2611 dwidth = cabinet.sX - self.depth - self.thickness - 0.001
2612 p7 = "%06.3f" % dwidth
2613 else:
2614 p7 = "%06.3f" % 0
2616 sku = "%s%s%s%s%s-%s-%s" % (p1, p2, p3, p4, p5, p6, p7)
2618 return sku