diff --git a/src/product_gen/__pycache__/generate_lamp.cpython-35.pyc b/src/product_gen/__pycache__/generate_lamp.cpython-35.pyc index 2aa0a03..222d423 100644 Binary files a/src/product_gen/__pycache__/generate_lamp.cpython-35.pyc and b/src/product_gen/__pycache__/generate_lamp.cpython-35.pyc differ diff --git a/src/product_gen/__pycache__/generate_shades.cpython-35.pyc b/src/product_gen/__pycache__/generate_shades.cpython-35.pyc index 9b9e0e2..c75a2df 100644 Binary files a/src/product_gen/__pycache__/generate_shades.cpython-35.pyc and b/src/product_gen/__pycache__/generate_shades.cpython-35.pyc differ diff --git a/src/product_gen/generate_lamp.py b/src/product_gen/generate_lamp.py index 9b505ec..6719a64 100644 --- a/src/product_gen/generate_lamp.py +++ b/src/product_gen/generate_lamp.py @@ -6,18 +6,20 @@ import product_gen.generate_shades as gs def generate_models(shape_parameters): # Shade + print(shape_parameters["shape"]) if shape_parameters["shape"] == "mesh": shade = gs.generate_mesh_shade(shape_parameters) - elif shape_parameters["shape"] == "led" or "bio": + elif shape_parameters["shape"] == "led" or shape_parameters["shape"] == "bio": shade = gs.generate_led_shade(shape_parameters) else: # default pendant + print("doing pendant") shade = gs.generate_pendant_shade(shape_parameters) # Base if "bio" not in shape_parameters["shape"]: - radius1 = 0.3 + radius1 = shape_parameters["fixture_radius"] radius2 = 0.07 - depth = 0.5 + depth = shape_parameters["fixture_length"] location = (0.0, 0.0, depth/2.0) base = product_gen.generate_lamp_base.generate_cone_base(radius1, radius2, diff --git a/src/product_gen/generate_shades.py b/src/product_gen/generate_shades.py index 2227929..6657986 100644 --- a/src/product_gen/generate_shades.py +++ b/src/product_gen/generate_shades.py @@ -14,86 +14,56 @@ def UpOrDown(normal): return True return False +def morph_shape(x, L, H, morph_type="linear"): + + y = H + if morph_type == "linear": + y = (x/L)*H + elif morph_type == "logistic": + k = 10.0 + v = 1.0 + y = H/(1.0 + math.exp(-k*(x-L/4.0))**v) + elif morph_type == "sinusoid": + y = math.sin((x/L)*math.pi/2.0) + elif morph_type == "hyperbolic_tan": + y = math.tanh((x/L)*math.pi/2.0) + elif morph_type == "circle": + y = math.sqrt(L*L-(L-x)**2) + return y + def generate_pendant_shade(shape_parameters): radius = shape_parameters["radius"] depth = shape_parameters["height"] - print(depth) - bpy.ops.mesh.primitive_cylinder_add(radius=radius, depth=depth) + cone = bpy.data.objects["Cylinder"] cone.name = "shade" bpy.ops.object.mode_set(mode='EDIT') num_subdivisions = 3 - if len(shape_parameters["division_offsets"])>3: - num_subdivisions = 4 for idx in range(num_subdivisions): bpy.ops.mesh.subdivide() bm = bmesh.from_edit_mesh(cone.data) num_verts = len(bm.verts) - summed_offset = 0.0 - for jdx in range(len(shape_parameters["division_offsets"])): - summed_offset += shape_parameters["division_offsets"][jdx] - for idx in range(num_verts): bm.verts.ensure_lookup_table() vert = bm.verts[idx] - theta = math.atan2(vert.co.x, vert.co.y) vert.co.z = vert.co.z -depth/2.0 + theta = math.atan2(vert.co.x, vert.co.y) - delta = abs(vert.co.z) - frac = delta/depth - - summed_offset = 0.0 - prev_offset = 0.0 - - division_index = len(shape_parameters["division_offsets"])-1 - for jdx in range(len(shape_parameters["division_offsets"])): - prev_offset = summed_offset - summed_offset += shape_parameters["division_offsets"][jdx] - if frac >=prev_offset and frac <= summed_offset: - division_index = jdx - current_offset = shape_parameters["division_offsets"][division_index] - division_type = shape_parameters["division_patterns"][division_index] - - if division_index==0: - division_radius = shape_parameters["fixture_radius"] - previous_offset = 0.0 - previous_radius = division_radius + if abs(vert.co.z)