Fixed case with irregular layouts

plate-64p
Kirpal Demian 8 years ago
parent e2d7c92854
commit 391c85136d
  1. 121
      import_keyboard.py
  2. BIN
      template.blend

@ -388,7 +388,7 @@ def read(filepath):
"SA4TL", "SA4TM", "SA4TR", "SA4ML", "SA4MM", "SA4MR", "SA4BL", "SA4BM", "SA4BR", # SA R4
"SASPACETL", "SASPACETM", "SASPACETR", "SASPACEML", "SASPACEMM", "SASPACEMR", "SASPACEBL", "SASPACEBM", "SASPACEBR", # SA SPACE
"SATLF", "SATMF", "SATRF", "SAMLF", "SAMMF", "SAMRF", "SABLF", "SABMF", "SABRF", "SATLS", "SATMS", "SATRS", "SAMLS", "SAMMS", "SAMRS", "SABLS", "SABMS", "SABRS",
"side", "switch", "led"]
"case", "switch", "led"]
# blender file with template objects
templateBlend = os.path.join(os.path.dirname(
__file__), "template.blend", "Object")
@ -408,10 +408,6 @@ def read(filepath):
keyboard_empty.location = (0, 0, 0)
scn.objects.link(keyboard_empty)
# set width and height of keyboard
width = 0
height = 0
# initialize font list with default font
fonts = [gotham for i in range(0, 12)]
# get fonts from css
@ -1147,19 +1143,12 @@ def read(filepath):
for obj in scn.objects:
obj.select = False
# set the keyboard width and height if it was smaller than the
# current width
if key["x"] + key["w"] + 0.05 > width:
width = key["x"] + key["w"] + 0.05
if key["y"] + key["h"] + 0.05 > height:
height = key["y"] + key["h"] + 0.05
bpy.context.window_manager.progress_update(currentKey)
currentKey += 1
m = Material()
m.set_cycles()
m.make_material("side")
m.make_material("case")
diffuseBSDF = m.nodes['Diffuse BSDF']
@ -1195,65 +1184,42 @@ def read(filepath):
mp.link(diffuseBSDF, 'BSDF', mixShader, 2)
mp.link(mixShader, 'Shader', materialOutput, 'Surface')
# create all the sides and the bottom of the case
side = bpy.data.objects['side']
side1 = side.copy()
side1.data = side.data.copy()
side1.animation_data_clear()
side1.active_material = bpy.data.materials["side"]
side2 = side.copy()
side2.data = side.data.copy()
side2.animation_data_clear()
side2.active_material = bpy.data.materials["side"]
side3 = side.copy()
side3.data = side.data.copy()
side3.animation_data_clear()
side3.active_material = bpy.data.materials["side"]
side4 = side.copy()
side4.data = side.data.copy()
side4.animation_data_clear()
side4.active_material = bpy.data.materials["side"]
side5 = side.copy()
side5.data = side.data.copy()
side5.animation_data_clear()
side5.active_material = bpy.data.materials["side"]
# set case pieces size and location and add them to the scene
side1.location = (0.1, height / 2, 0)
side1.dimensions = (0.2, (height + 0.4), 1)
scn.objects.link(side1)
side2.location = (width / -2, -0.1, 0)
side2.dimensions = (width, 0.2, 1)
scn.objects.link(side2)
side3.location = ((width + 0.1) * -1, height / 2, 0)
side3.dimensions = (0.2, (height + 0.4), 1)
scn.objects.link(side3)
side4.location = (width / -2, (height + 0.1), 0)
side4.dimensions = (width, 0.2, 1)
scn.objects.link(side4)
side5.location = (width / -2, height / 2, -0.25)
side5.dimensions = (width, height, 0.5)
scn.objects.link(side5)
# get case height and width from generated keys
scn.objects.active = keyboard_empty
bpy.ops.object.select_grouped(type="CHILDREN_RECURSIVE")
bpy.ops.object.duplicate()
scn.objects.active = bpy.context.selected_objects[0]
bpy.ops.object.join()
bpy.ops.object.origin_set(type="ORIGIN_GEOMETRY", center="BOUNDS")
width = scn.objects.active.dimensions[0] + 0.5
height = scn.objects.active.dimensions[1] + 0.5
caseX = scn.objects.active.location[0]
caseY = scn.objects.active.location[1]
bpy.ops.object.delete(use_global=False)
# create the case
caseTemplate = bpy.data.objects['case']
case = caseTemplate.copy()
case.data = caseTemplate.data.copy()
case.animation_data_clear()
case.location = (caseX, caseY, -0.25)
case.dimensions = (width, height, 0.5)
scn.objects.link(case)
case.select = True
scn.objects.active = case
# name the case
case.name = "Case"
bpy.ops.object.transform_apply(location=False, rotation=False, scale=True)
# deselect everything
for obj in scn.objects:
obj.select = False
# select all case parts and join them together
side1.select = True
side2.select = True
side3.select = True
side4.select = True
side5.select = True
scn.objects.active = side5
bpy.ops.object.join()
# name the case
side5.name = "Case"
case.select = True
scn.objects.active = keyboard_empty
bpy.ops.object.parent_set(type="OBJECT")
@ -1273,24 +1239,11 @@ def read(filepath):
bpy.ops.object.transform_apply(location=True, scale=True, rotation=True)
bpy.ops.object.delete(use_global=False)
side5.select = True
scn.objects.active = side5
case.select = True
scn.objects.active = case
# bevel the corners
bpy.ops.object.mode_set(mode='EDIT')
bpy.context.tool_settings.mesh_select_mode = (False, True, False)
bpy.ops.object.mode_set(mode='OBJECT')
side5.data.edges[24].select = True
side5.data.edges[26].select = True
side5.data.edges[53].select = True
side5.data.edges[56].select = True
bpy.ops.object.editmode_toggle()
bpy.ops.mesh.bevel(vertex_only=False, offset=0.033,
offset_type='OFFSET', segments=5)
bpy.ops.object.mode_set(mode='OBJECT')
bpy.ops.object.modifier_add(type="BEVEL")
bpy.ops.object.modifier_apply(modifier="Bevel")
if "switchType" in keyboard:
if keyboard["switchType"] == "MX1A-11xx" or keyboard["switchType"] == "KS-3-Black":

Binary file not shown.
Loading…
Cancel
Save