diff --git a/import_keyboard.py b/import_keyboard.py index efe6c96..e774da5 100644 --- a/import_keyboard.py +++ b/import_keyboard.py @@ -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": diff --git a/template.blend b/template.blend index 739d0ed..6c3e3d0 100644 Binary files a/template.blend and b/template.blend differ