Esempio n. 1
0
def comm_tower(height=25.0, radius=0.5):

    base_height = 1.2
    pole_radius = 0.10
    top_height = 0.1
    antenna_height = 2.0

    obj_base = ddd.regularpolygon(3, radius, "Comm Tower Base").extrude(base_height)
    obj_base = ddd.uv.map_cubic(obj_base)
    obj_base = obj_base.material(ddd.mats.metal_paint_red)

    obj_pole = ddd.regularpolygon(4, pole_radius, "Comm Tower Pole").extrude(height - base_height - top_height)
    obj_pole = ddd.uv.map_cubic(obj_pole)
    obj_pole = obj_pole.material(ddd.mats.metal_paint_red)
    obj_pole = ddd.align.matrix_polar(obj_pole.translate([radius - pole_radius * 2, 0, base_height]), 3)

    obj_top = ddd.regularpolygon(3, radius, "Comm Tower Top").extrude(top_height)
    obj_top = obj_top.material(ddd.mats.metal_paint_red)
    obj_top = ddd.uv.map_cubic(obj_top)
    obj_top = obj_top.translate([0, 0, height - top_height])

    obj_antenna = ddd.regularpolygon(3, 0.05, "Comm Antenna Vert").extrude(antenna_height).translate([0, 0, height])
    obj_antenna = ddd.uv.map_cubic(obj_antenna)
    obj_antenna = obj_antenna.material(ddd.mats.steel)

    # TODO: Combination of suitable meshes shall be done automatically
    combined = ddd.group([obj_base, obj_pole, obj_top]).combine()
    obj = ddd.group([combined, obj_antenna])

    obj.name = "Communications Tower"
    return obj
Esempio n. 2
0
 def trunk_callback(height):
     section = ddd.regularpolygon(sides=5, r=r).extrude_step(ddd.regularpolygon(sides=5, r=r*0.8), height * 0.15)
     section = section.extrude_step(ddd.regularpolygon(sides=5, r=r*0.8).translate([random.uniform(-0.4, 0.4), random.uniform(-0.4, 0.4)]), height * 0.35)
     section = section.extrude_step(ddd.regularpolygon(sides=5, r=r*0.7).translate([random.uniform(-0.3, 0.3), random.uniform(-0.3, 0.3)]), height * 0.5)
     section = section.smooth(math.pi * 0.45)
     section = ddd.uv.map_cylindrical(section, split=False)
     section = section.material(ddd.mats.bark)
     return section
Esempio n. 3
0
def childrens_playground_arc(length=3.25, width=1.0, sides=7, height=None):

    arc_thick = 0.08
    bar_thick = 0.05
    if height is None:
        height = length / 2 * 0.9

    circleline = ddd.regularpolygon(sides * 2, name="Childrens Playground Arc Side Arc").rotate(-math.pi / 2).outline().scale([length / 2, height])
    arcline = circleline.intersection(ddd.rect([-length, 0.1, length, height * 2]))
    arc = circleline.buffer(arc_thick / 2).intersection(ddd.rect([-length, 0, length, height * 2]))
    arc = arc.extrude(arc_thick, center=True).material(ddd.mats.metal_paint_red)
    arc = arc.rotate(ddd.ROT_FLOOR_TO_FRONT)
    arc = ddd.uv.map_cubic(arc)

    arc1 = arc.copy().translate([0, -width / 2, 0])
    arc2 = arc.copy().translate([0, +width / 2, 0])
    item = ddd.group([arc1, arc2])

    bar = ddd.point(name="Childrens Playground Arc Bar").buffer(bar_thick / 2).extrude(width - arc_thick, center=True).rotate(ddd.ROT_FLOOR_TO_FRONT)
    bar = ddd.uv.map_cubic(bar)
    mats = [ddd.mats.metal_paint_white, ddd.mats.metal_paint_red]
    for idx, p in enumerate(arcline.geom.coords[1:-1]):
        pbar = bar.copy().translate([p[0], 0, p[1]])
        pbar = pbar.material(mats[idx % 2])
        item.append(pbar)

    item = ddd.meshops.batch_by_material(item).clean(remove_degenerate=False)

    return item
Esempio n. 4
0
def traffic_sign_circle(r=0.5, thick=0.1, caps=True):
    sides = 16
    item = ddd.regularpolygon(sides, r, name="Sign circle").material(ddd.mats.metal_paint_red)
    item = item.rotate(math.pi / sides).extrude(thick, cap=caps, base=caps)
    item = item.rotate(ddd.ROT_FLOOR_TO_FRONT).translate([0, thick / 2, r * math.cos(math.pi / sides)])
    item = ddd.uv.map_cubic(item)
    return item
Esempio n. 5
0
def bar_u(height=0.8, width=0.4, r=0.15, thick=0.1):
    """
    A U-shaped figure, like that used for handles, bycicle stands...
    """
    vertical_height = height - r

    base = ddd.regularpolygon(6, r=thick * 0.5, name="U-Shape")

    path = ddd.point().line_to([0,
                                vertical_height]).arc_to([r, height],
                                                         [r, vertical_height],
                                                         True,
                                                         resolution=1)
    path = path.line_to([width - r,
                         height]).arc_to([width, vertical_height],
                                         [width - r, vertical_height],
                                         True,
                                         resolution=1)
    path = path.line_to([width, 0])

    item = base.extrude_along(path)
    item = item.rotate(ddd.ROT_FLOOR_TO_FRONT)  #.rotate(ddd.ROT_TOP_CW)
    item = item.translate([-width * 0.5, 0, 0])
    item = item.material(ddd.mats.steel)
    item = ddd.uv.map_cubic(item)
    return item
Esempio n. 6
0
def cart_wheel(r=0.075, thick=0.03):
    """
    """
    sides = 10
    item = ddd.regularpolygon(sides, r,
                              name="Cart Wheel").rotate(math.pi / sides)
    item = item.extrude(thick).material(ddd.mats.plastic_black)
    item = ddd.uv.map_cylindrical(item)
    item = item.rotate(ddd.ROT_FLOOR_TO_FRONT).translate([0, thick / 2, 0])
    return item
Esempio n. 7
0
def bollard(height=1.2, r=0.2, sides=6):
    """
    A bollard. Sits centered on its base.
    """
    bollard = ddd.regularpolygon(6, r, name="Bollard")
    extrude_steps = ((2.0, 0), (2.0, 0.75), (1.0, 1), (1.0, 6.75), (2.0, 7), (2.0, 7.75), (1.0, 8))
    bollard = extrude_step_multi(bollard, extrude_steps, base=False, cap=True, scale_y=height / 8)
    bollard = bollard.material(ddd.mats.bronze)
    bollard = ddd.uv.map_cylindrical(bollard)
    return bollard
Esempio n. 8
0
def roundedpost(height=2.00, r=0.075, sides=6, mat_post=None):
    """
    A rounded post.
    """
    col = ddd.regularpolygon(sides, r, name="Post").extrude(height)  # , cap=False, base=False)
    if mat_post: col = col.material(mat_post)
    col = col.smooth(math.pi * 0.45)
    col = ddd.uv.map_cylindrical(col, scale=[0.25, 0.25], split=False)
    col = ddd.collision.aabox_from_aabb(col)
    #col.mesh.face_normals = ((1, 0, 0) for n in col.mesh.face_normals]

    return col
Esempio n. 9
0
def tree_fir(height=20, r=0.2):
    """
    (Abeto) They are large trees, reaching heights of 10–80 m (33–262 ft) tall with trunk diameters
    of 0.5–4 m (1 ft 8 in–13 ft 1 in) when mature.
    """
    top_r = (height / 4) * random.uniform(0.9, 1.1)
    top_base_h = height / 10

    section = ddd.regularpolygon(sides=5, r=r).extrude_step(ddd.regularpolygon(sides=5, r=r*0.1), height)
    section = ddd.uv.map_cylindrical(section)
    section = section.material(ddd.mats.bark)

    #pol = ddd.regularpolygon(sides=9, r=1)
    #layer = pol.extrude_step(pol.scale(0.5), -0.4, base=False, cap=False)
    #layer = layer.extrude_step(ddd.point(), -0.2, cap=False)
    #layer = layer.material(ddd.mats.treetop).twosided().translate([0, 0, 0.6])
    layer = ddd.sphere(subdivisions=1).scale([1, 1, 0.5])
    #layer = ddd.uv.map_spherical(layer)
    layer = layer.vertex_func(lambda x, y, z, i: [x, y, z + ((x*x + y*y) * 0.7)])
    layer = layer.material(ddd.mats.treetop)

    numlayers = 8
    leaves = ddd.group3(name="Fir leaves group")
    for i in range(numlayers):
        lh = top_base_h + ((height - top_base_h) / (numlayers - 1)) * i
        lobj = layer.copy(name="Fir leaves %d" % i)
        lscale = top_r * (1 / numlayers) * (numlayers - i)
        lobj = layer.scale([lscale, lscale, lscale]).translate([0, 0, lh])
        #lobj = ddd.uv.map_cubic(lobj)
        leaves.append(lobj)

    leaves = leaves.combine()
    leaves  = leaves.merge_vertices()
    #leaves  = leaves.smooth(math.pi*2)
    leaves  = ddd.uv.map_spherical(leaves, scale=[4, 8], split=False)

    obj = ddd.group3([section.combine(), leaves], name="Fir")
    #obj.show()
    return obj
Esempio n. 10
0
def childrens_playground_sandbox(r=1.5, sides=5, height=0.4, thick=0.1):
    """
    """
    area = ddd.regularpolygon(sides, r, name="Playground Sand")
    item = area.material(ddd.mats.wood)
    item = item.outline().buffer(thick / 2).extrude(height)
    item = ddd.uv.map_cubic(item)
    item.name = "Playground sandbox border"

    area = area.triangulate().material(ddd.mats.sand).translate([0, 0, height / 3])
    area = ddd.uv.map_cubic(area)

    item = ddd.group([area, item], name="Playground Sandbox")

    return item
Esempio n. 11
0
def pipeline_start(pipeline, root):
    """
    Generate different geometric objects.
    """

    items = ddd.group3()

    # Remember to use JOIN_ROUND so resolution is applied when buffering points
    fig = ddd.point([0, 0]).buffer(1.0, resolution=2, join_style=ddd.JOIN_ROUND, cap_style=ddd.CAP_ROUND).triangulate()
    items.append(fig)
    fig = ddd.point([0, 0]).buffer(1.0, resolution=3, join_style=ddd.JOIN_ROUND, cap_style=ddd.CAP_ROUND).triangulate()
    items.append(fig)
    fig = ddd.point([0, 0]).buffer(1.0, resolution=4, join_style=ddd.JOIN_ROUND, cap_style=ddd.CAP_ROUND).triangulate()
    items.append(fig)

    # Extrusion with optional caps
    fig = ddd.disc().extrude(5)
    items.append(fig)
    fig = ddd.disc().extrude(5, base=False)
    items.append(fig)
    fig = ddd.disc().extrude(5, cap=False)
    items.append(fig)
    fig = ddd.disc().extrude(5, cap=False, base=False)
    items.append(fig)


    # Extrude line (to faces, not volume)
    fig1 = ddd.line([[-2, 0], [0, 0], [2, 2]])
    fig = fig1.extrude(2.0).twosided()
    items.append(fig)

    # Extrusion to line (explicit)
    fig1 = ddd.rect([-4, -2, 4, 2])
    fig2 = ddd.line([[-4, 0], [4, 0]])
    fig = fig1.extrude_step(fig2, 1.0)
    items.append(fig)

    # Extrusion to line (explicit)
    fig1 = ddd.rect([-4, -2, 4, 2])
    fig2 = ddd.line([[-3, 0], [3, 0]])
    fig = fig1.extrude_step(fig2, 1.0)
    items.append(fig)

    # Extrusion to line (explicit, method subtract)
    fig1 = ddd.rect([-4, -2, 4, 2])
    fig2 = ddd.line([[-3, 0], [3, 0]])
    fig = fig1.extrude_step(fig2, 1.0, method=ddd.EXTRUSION_METHOD_SUBTRACT)  # TODO: this currently fails but should be fixed
    items.append(fig)

    # Extrusion to line with vertical (explicit) for skillion roofs
    fig1 = ddd.rect([-4, -2, 4, 2])
    fig2 = ddd.line([[-4, 2], [4, 2]])
    fig = fig1.extrude_step(fig2, 1.0)  # TODO: this currently fails but should be fixed
    items.append(fig)

    # Extrusion to line (axis middle)
    fig1 = ddd.rect([-4, -2, 4, 2]) #.rotate(math.pi * 1.5)
    axis_major, axis_minor, axis_angle = ddd.geomops.oriented_axis(fig1)
    fig = fig1.extrude_step(axis_minor, 1.0)
    items.append(fig)

    # Extrusion to line (axis middle)
    fig1 = ddd.rect([-4, -2, 4, 2]) #.rotate(math.pi * 1.5)
    axis_major, axis_minor, axis_angle = ddd.geomops.oriented_axis(fig1)
    fig = fig1.extrude_step(axis_major, 1.0)
    items.append(fig)

    # Extrusion to line (buffered geometry) - currently fails (shapely does not return the reduced polygon linestring)
    fig1 = ddd.rect([-4, -2, 4, 2])
    fig = fig1.extrude_step(fig1.buffer(-2.5), 1.0)
    items.append(fig)

    # Extrusion to line (buffered geometry) and back (fails, extrusion from point to shape)
    fig1 = ddd.rect([-4, -2, 4, 2])
    fig = fig1.extrude_step(fig1.buffer(-2.5), 1.0)
    fig = fig.extrude_step(fig1, 1.0)
    items.append(fig)

    # Triangulation with hole
    fig1 = ddd.rect([-4, -2, 4, 2])
    fig2 = ddd.rect([-3, -1, -1, 1])
    fig = fig1.subtract(fig2).triangulate()
    items.append(fig)

    # Extrusion with hole
    fig1 = ddd.rect([-4, -2, 4, 2])
    fig2 = ddd.rect([-3, -1, -1, 1])
    fig = fig1.subtract(fig2).extrude(1.0)
    items.append(fig)

    # Extrusion with steps with hole
    fig1 = ddd.rect([-4, -2, 4, 2])
    fig2 = ddd.rect([-3, -1, -1, 1])
    figh = fig1.subtract(fig2)
    fig = figh.extrude_step(figh, 1.0, base=False)
    fig = fig.extrude_step(figh.buffer(-0.25), 1.0)
    items.append(fig)

    # Extrusion with steps with hole 2
    fig1 = ddd.rect([-4, -2, 4, 2])
    fig2 = ddd.rect([-3, -1, -1, 1])
    figh = fig1.subtract(fig2)
    fig = figh.extrude_step(figh, 1.0, base=False, method=ddd.EXTRUSION_METHOD_SUBTRACT)
    fig = fig.extrude_step(figh.buffer(-0.25), 1.0, method=ddd.EXTRUSION_METHOD_SUBTRACT)
    items.append(fig)


    # Simple extrusion
    fig = ddd.point([0, 0]).buffer(1.0, cap_style=ddd.CAP_ROUND).extrude(5.0)
    items.append(fig)

    # Simple extrusion
    fig = ddd.regularpolygon(5).extrude(5.0)
    items.append(fig)


    # Simple extrusion no caps
    fig = ddd.point([0, 0]).buffer(1.0, cap_style=ddd.CAP_ROUND)
    fig = fig.extrude_step(fig, 5.0, base=False, cap=False)
    items.append(fig)

    # Extrusion between shapes
    fig1 = ddd.point([0, 0]).buffer(1.0)
    fig2 = ddd.point([0, 0]).buffer(1.0, cap_style=ddd.CAP_ROUND)
    fig3 = ddd.point([0, 0]).buffer(1.0)
    fig = fig1.extrude_step(fig2, 3.0).extrude_step(fig3, 2.0)
    items.append(fig)

    # Extrusion
    fig = ddd.point([0, 0]).buffer(1.0)
    for i in range(10):
        fign = ddd.point([0, 0]).buffer(1.0).rotate(math.pi / 12 * i)
        fig = fig.extrude_step(fign, 0.5)
    items.append(fig)

    # Pointy end
    fig = ddd.point().buffer(2.0, cap_style=ddd.CAP_ROUND)
    fig = fig.extrude_step(ddd.point(), 5.0)
    items.append(fig)

    # Convex shapes (this fails)
    coords = [[10, 10], [5, 9], [3, 12], [1, 5], [-8, 0], [10, 0]]
    #coords.reverse()
    fig = ddd.polygon(coords).scale(0.25)
    fig = fig.extrude_step(fig.buffer(-0.5), 1)
    items.append(fig)

    # Convex shapes - subtract method (works)
    coords = [[10, 10], [5, 9], [3, 12], [1, 5], [-8, 0], [10, 0]]
    #coords.reverse()
    fig = ddd.polygon(coords).scale(0.25)
    fig = fig.extrude_step(fig.buffer(-0.5), 1, method=ddd.EXTRUSION_METHOD_SUBTRACT)
    items.append(fig)

    # Extrude-subtract to bigger
    fig = ddd.point([0, 0]).buffer(1.0, cap_style=ddd.CAP_ROUND)
    fig = fig.extrude_step(fig.buffer(1.0), 5.0, method=ddd.EXTRUSION_METHOD_SUBTRACT)
    items.append(fig)

    # Extrude-subtract downwards
    shape = ddd.disc().scale([3, 2])
    fig = shape.extrude_step(shape.buffer(-0.5), -1.0, base=False, method=ddd.EXTRUSION_METHOD_SUBTRACT)
    fig = fig.extrude_step(shape.buffer(-1.0), -0.5, method=ddd.EXTRUSION_METHOD_SUBTRACT)
    items.append(fig)

    # Extrude-subtract vertical case
    fig = ddd.point([0, 0]).buffer(1.0, cap_style=ddd.CAP_ROUND)
    fig = fig.extrude_step(fig, 5.0, method=ddd.EXTRUSION_METHOD_SUBTRACT)
    items.append(fig)

    # Convex shapes with holes - subtract method
    fig = ddd.group3()
    text = Text3D.quick_text("86A").scale(2.0)
    for f in text.children:
        #f.replace(f.subtract(f.buffer(-0.2)))
        fe = f.extrude_step(f.buffer(-0.05), 0.2, method=ddd.EXTRUSION_METHOD_SUBTRACT)
        fig.append(fe)
    items.append(fig)

    # Extrude to point
    fig = ddd.point([0, 0]).buffer(1.0, cap_style=ddd.CAP_ROUND)
    fig = fig.extrude_step(fig.centroid(), 2.0)
    items.append(fig)
    """
    fig = ddd.point([0, 0]).buffer(1.0, cap_style=ddd.CAP_ROUND)
    fig = fig.extrude_step(fig.centroid(), 2.0, method=ddd.EXTRUSION_METHOD_SUBTRACT)
    items.append(fig)
    """

    # Extrude to empty
    fig = ddd.point([0, 0]).buffer(1.0, cap_style=ddd.CAP_ROUND)
    fig = fig.extrude_step(fig.buffer(-2.0), 2.0)
    items.append(fig)
    fig = ddd.point([0, 0]).buffer(1.0, cap_style=ddd.CAP_ROUND)
    fig = fig.extrude_step(fig.buffer(-2.0), 2.0, base=False, method=ddd.EXTRUSION_METHOD_SUBTRACT)
    items.append(fig)


    # Extrude with division
    fig1 = ddd.disc().translate([1.5, 0]).union(ddd.disc())
    fig = fig1.extrude_step(fig1.buffer(-0.2), 0.5, method=ddd.EXTRUSION_METHOD_SUBTRACT)
    fig = fig.extrude_step(fig1.buffer(-0.5), 0.5, method=ddd.EXTRUSION_METHOD_SUBTRACT)
    items.append(fig)


    # Extrude multiple with empty geometry
    fig1 = ddd.point([0, 0]).buffer(2.0, cap_style=ddd.CAP_ROUND)
    fig = fig1.extrude_step(fig1.buffer(-0.5), 0.5, method=ddd.EXTRUSION_METHOD_SUBTRACT)
    fig = fig.extrude_step(fig1.buffer(-1.5), 0.5, method=ddd.EXTRUSION_METHOD_SUBTRACT)
    fig = fig.extrude_step(fig1.buffer(-2.5), 0.5, method=ddd.EXTRUSION_METHOD_SUBTRACT)
    fig = fig.extrude_step(fig1.buffer(-2.5), 0.5, method=ddd.EXTRUSION_METHOD_SUBTRACT)
    items.append(fig)

    # Triangulate/Extrude with colinear segments
    fig1 = ddd.polygon([[0, 0], [1, 0], [2, 0], [2, 1], [1, 1], [0, 1]])
    #fig = fig1.triangulate()
    fig = fig1.extrude(1.0)
    items.append(fig)


    # All items
    items = ddd.align.grid(items, space=10.0)
    #items.append(ddd.helper.all())
    items.show()

    root.append(items)
Esempio n. 12
0
 def trunk_callback(height):
     section = ddd.regularpolygon(sides=5, r=r).extrude(height)
     section = section.smooth(math.pi * 0.45)
     section = ddd.uv.map_cylindrical(section, scale=(2, 2), split=False)
     section = section.material(ddd.mats.bark)
     return section
Esempio n. 13
0
def traffic_sign_rect_rotated(r=0.5, thick=0.1, caps=True):
    item = ddd.regularpolygon(4, r, name="Sign square angled").material(ddd.mats.metal_paint_white)
    item = item.extrude(thick, cap=caps, base=caps)
    item = item.rotate(ddd.ROT_FLOOR_TO_FRONT).translate([0, thick / 2, r])
    item = ddd.uv.map_cubic(item)
    return item
Esempio n. 14
0
def traffic_sign_triangle_inverted(r=0.6, thick=0.1, caps=True):
    item = ddd.regularpolygon(3, r, name="Sign triangle inverted").material(ddd.mats.metal_paint_red)
    item = item.rotate(math.pi / 2 + math.pi).extrude(thick, cap=caps, base=caps)
    item = item.rotate(ddd.ROT_FLOOR_TO_FRONT).translate([0, thick / 2, r])
    item = ddd.uv.map_cubic(item)
    return item
Esempio n. 15
0
figh = fig1.subtract(fig2)
fig = figh.extrude_step(figh,
                        1.0,
                        base=False,
                        method=ddd.EXTRUSION_METHOD_SUBTRACT)
fig = fig.extrude_step(figh.buffer(-0.25),
                       1.0,
                       method=ddd.EXTRUSION_METHOD_SUBTRACT)
items.append(fig)

# Simple extrusion
fig = ddd.point([0, 0]).buffer(1.0, cap_style=ddd.CAP_ROUND).extrude(5.0)
items.append(fig)

# Simple extrusion
fig = ddd.regularpolygon(5).extrude(5.0)
items.append(fig)

# Simple extrusion no caps
fig = ddd.point([0, 0]).buffer(1.0, cap_style=ddd.CAP_ROUND)
fig = fig.extrude_step(fig, 5.0, base=False, cap=False)
items.append(fig)

# Extrusion between shapes
fig1 = ddd.point([0, 0]).buffer(1.0)
fig2 = ddd.point([0, 0]).buffer(1.0, cap_style=ddd.CAP_ROUND)
fig3 = ddd.point([0, 0]).buffer(1.0)
fig = fig1.extrude_step(fig2, 3.0).extrude_step(fig3, 2.0)
items.append(fig)

# Extrusion
Esempio n. 16
0
 def trunk_callback(height):
     section = ddd.regularpolygon(sides=5, r=r).extrude(height)
     section = ddd.uv.map_cylindrical(section)
     section = section.material(ddd.mats.bark)
     return section
Esempio n. 17
0
functions = (sports.handball_field_lines, sports.basketball_field_lines,
             sports.tennis_field_lines, sports.football_field_lines)

count = 3
for m in functions:
    items = ddd.group3()
    for i in range(count):
        area = ddd.polygon([[0, 0], [10, 0], [10, 5], [0, 5]]).scale(1 + i * 3).rotate(i * 2 * math.pi / count)
        lines = sports.field_lines_area(area, m).translate([0, 0, 0.05])
        area = area.triangulate().material(ddd.mats.pitch)
        item = ddd.group2([area, lines])
        items.append(item)
    items.show()

    area = ddd.regularpolygon(7, r=random.uniform(12, 20)).scale([random.uniform(0.5, 1.5), random.uniform(0.5, 1.5)]).rotate(random.uniform(0, math.pi * 2))
    lines = sports.field_lines_area(area, m).translate([0, 0, 0.05])
    area = area.triangulate().material(ddd.mats.pitch)
    item = ddd.group2([area, lines])
    item.show()




'''
area = ddd.polygon([[0, 0], [10, 0], [10, 5], [0, 5]])
lines = sports.tennis_field_lines(area).translate([0, 0, 0.05])
area = area.triangulate().material(ddd.mats.pitch)
item = ddd.group2([area, lines])
items.append(item)
item.show()
Esempio n. 18
0
# Jose Juan Montes 2019-2020

from ddd.pack.sketchy import urban, landscape, sports
from ddd.ddd import ddd
import math
import random
import webbrowser

row = ddd.group2()
for i in range(3, 12 + 1):
    area = ddd.regularpolygon(i, 1.0, name="%d-Polygon" % i)
    area.extra['sides'] = i
    area.extra['text'] = "Sample text to test SVG metadata export (áéíóúñç)"
    row.append(area)
row = ddd.align.grid(row, 2.5, 1)
row = row.rotate(math.pi / 2)

items = ddd.group2()

top_row = row
items.append(top_row)

mat_red = ddd.material(color="#ff0000", extra={'svg:fill-opacity': 1.0})
row_r = row.material(mat_red)
row_g = row.material(ddd.mats.green).translate([-0.2, -0.2])
row_b = row.material(ddd.mats.blue).translate([0.2, -0.2])
colors = ddd.group2([row_r, row_g, row_b], name="Mixed colors")
items.append(colors)

items = ddd.align.grid(items, 2.5, 1)
Esempio n. 19
0
def crane_vertical():
    """
    Large vertical crane (such as those seen in cargo ports).
    Inspired by: https://commons.wikimedia.org/wiki/File:Port_crane_of_Mammoet,_Schiedam-8054.jpg
    """

    base_width = 7
    base_length = 6

    # Piers
    pier_height = 2.0
    pier_width = 1.5
    pier_length = base_length + 2
    pier = ddd.rect(
        [-pier_width / 2, -pier_length / 2, pier_width / 2, pier_length / 2],
        name="Crane Pier")
    pier = pier.extrude(pier_height).material(ddd.mats.metal_paint_red)
    pier = ddd.uv.map_cubic(pier)

    pier_l = pier.translate([-base_width * (2 / 6), 0, 0])
    pier_r = pier.translate([base_width * (2 / 6), 0, 0])
    piers = ddd.group3([pier_l, pier_r], name="Crane Piers")

    # Base
    base_height = 1.5
    base = ddd.rect([0, 0, base_width, base_length],
                    name="Crane Base").recenter()
    base = base.extrude(base_height).translate([0, 0, pier_height])
    base = base.material(ddd.mats.cement)
    base = ddd.uv.map_cubic(base)

    # Base Tower
    column_height = 8
    column_radius_base = base_width * 0.85 * 0.5
    column_radius = column_radius_base * 0.5
    column_shape_base = ddd.regularpolygon(4, column_radius_base)
    column_shape_middle = ddd.regularpolygon(12, column_radius)
    column = column_shape_base.extrude_step(column_shape_middle, 1, base=False)
    column = column.extrude_step(column_shape_middle,
                                 column_height - 1,
                                 cap=False)
    column = column.translate([0, 0, pier_height + base_height
                               ]).material(ddd.mats.metal_paint_red)
    column = ddd.uv.map_cubic(column)
    column.name = "Crane column"

    # Platform and railing
    platform_radius = column_radius + 0.85
    platform_base_height = pier_height + base_height + column_height - 2.0
    platform_shape = ddd.point(name="Crane platform").buffer(
        platform_radius, cap_style=ddd.CAP_ROUND)
    platform = platform_shape.triangulate(twosided=True)
    platform = platform.material(ddd.mats.metallic_grid)
    platform_fence = platform_shape.outline().extrude(1.2).material(
        ddd.mats.fence)
    platform = ddd.group([platform, platform_fence], name="Crane platform")
    platform = ddd.uv.map_cylindrical(platform)
    platform = platform.translate([0, 0, platform_base_height])

    # WeightBlock
    block_width = base_width * 0.6
    block_length = base_length * 1.25
    block_base_height = pier_height + base_height + column_height
    block_height = 2.2
    block = ddd.rect([-block_width / 2, 0, block_width / 2, block_length],
                     name="Crane Weight")
    block = block.extrude(block_height).translate([0, -2.5, block_base_height
                                                   ]).material(ddd.mats.cement)
    block = ddd.uv.map_cubic(block)

    # Cabin
    cabin_width = block_width * 0.6
    cabin_length = 3
    cabin_height = block_height
    cabin_shape = ddd.rect(
        [-block_width * 0.5, 0, block_width * 0.5, cabin_length])
    cabin_shape_top = ddd.rect(
        [-block_width * 0.5, 1, block_width * 0.5, cabin_length])
    cabin = cabin_shape.extrude_step(cabin_shape, 1)
    cabin = cabin.extrude_step(cabin_shape_top, cabin_height - 1)
    cabin = cabin.extrude_step(cabin_shape_top.buffer(-0.4), 0.3)
    cabin = cabin.material(ddd.mats.metal_paint_yellow)
    cabin = cabin.translate([0, -2.5 - cabin_length, block_base_height])
    cabin = ddd.uv.map_cubic(cabin)

    mainsupport_width = 2
    mainsupport_skew = 2
    mainsupport_height = 10
    mainsupport_base_height = block_base_height + block_height
    mainsupport = ddd.rect([0, 0, mainsupport_width, mainsupport_width],
                           name="Main Support").recenter()
    mainsupport = mainsupport.extrude_step(mainsupport.translate(
        [0, -mainsupport_skew]),
                                           mainsupport_height,
                                           base=False)
    mainsupport = mainsupport.material(ddd.mats.metal_paint_red)
    mainsupport = mainsupport.translate([0, 0, mainsupport_base_height])
    mainsupport = ddd.uv.map_cubic(mainsupport)

    secsupport_width = 1.5
    secsupport_skew = 11
    secsupport_height = 18
    secsupport_base_height = block_base_height + block_height
    secsupport = ddd.rect([0, 0, secsupport_width, secsupport_width],
                          name="Sec Support").recenter()
    secsupport = secsupport.extrude_step(secsupport.scale(
        [0.8, 0.7]).translate([0, -secsupport_skew]),
                                         secsupport_height,
                                         base=False)
    secsupport = secsupport.material(ddd.mats.metal_paint_red)
    secsupport = secsupport.translate([0, -1.5, secsupport_base_height])
    secsupport = ddd.uv.map_cubic(secsupport)

    maincable1 = cable(
        [-block_width * 0.4, block_length - 3, mainsupport_base_height], [
            -mainsupport_width * 0.2, -mainsupport_skew,
            mainsupport_base_height + mainsupport_height - 0.2
        ])
    maincable1 = maincable1.material(ddd.mats.cable_metal)
    maincable2 = cable(
        [block_width * 0.4, block_length - 3, mainsupport_base_height], [
            mainsupport_width * 0.2, -mainsupport_skew,
            mainsupport_base_height + mainsupport_height - 0.2
        ])
    maincable2 = maincable2.material(ddd.mats.cable_metal)

    seccable1 = cable(
        [0, -mainsupport_skew, mainsupport_base_height + mainsupport_height], [
            0, -1.5 - secsupport_skew,
            mainsupport_base_height + secsupport_height - 0.2
        ])
    seccable1 = seccable1.material(ddd.mats.cable_metal)

    # Drag cable
    dragcable_length = 20
    dragcable_point = [
        0, -1.5 - secsupport_skew,
        mainsupport_base_height + secsupport_height - 0.2
    ]
    dragcable_endpoint = [
        0, -1.5 - secsupport_skew,
        mainsupport_base_height + secsupport_height - 0.2 - dragcable_length
    ]
    dragcable = cable(dragcable_endpoint, dragcable_point)
    dragcable = dragcable.material(ddd.mats.cable_metal)

    # Pulley block
    pulley_block_width = 0.5
    pulley_block_thick = 0.3
    pulley_block_height = 0.8
    pulley_block_profile = ddd.polygon(
        [[-pulley_block_width * 0.25, 0], [pulley_block_width * 0.25, 0],
         [pulley_block_width / 2, pulley_block_height],
         [-pulley_block_width / 2, pulley_block_height]],
        name="Pulley block")
    pulley_block_profile = pulley_block_profile.buffer(
        0.2, resolution=3, join_style=ddd.JOIN_ROUND)

    pulley_block = pulley_block_profile.extrude(pulley_block_thick).translate(
        [0, 0, -pulley_block_thick / 2])
    pulley_block = pulley_block.rotate(ddd.ROT_FLOOR_TO_FRONT).rotate(
        ddd.ROT_TOP_CW)
    pulley_block = pulley_block.material(ddd.mats.metal_paint_yellow)
    pulley_block = ddd.uv.map_cubic(pulley_block)
    pulley_block = pulley_block.translate(dragcable_endpoint)

    # Hook
    hook_radius = 0.6
    hook_radius_inner = 0.35
    hook = ddd.sphere(r=hook_radius, name="Hook")
    hook = hook.scale([0.2, 1.0, 1.0])

    hole = ddd.point().buffer(hook_radius_inner,
                              resolution=3,
                              cap_style=ddd.CAP_ROUND).extrude(4.0).translate(
                                  [0, 0, -2])
    hole = hole.rotate(ddd.ROT_FLOOR_TO_FRONT).rotate(ddd.ROT_TOP_CW)
    hook = hook.subtract(hole)
    hook = hook.material(ddd.mats.steel)
    #hook = ddd.uv.map_cubic(hook)
    hook = hook.translate(dragcable_endpoint)

    item = ddd.group3([
        piers, base, column, platform, block, cabin, mainsupport, maincable1,
        maincable2, secsupport, seccable1, dragcable, pulley_block, hook
    ],
                      name="Crane Vertical")
    return item