コード例 #1
0
        leg.add(parts[name],
                name=name,
                color=C(links[name]["col"]),
                loc=L(0, 0, i * 10 - 50))
    return leg


leg = create_leg(x, y)

# Mates

for name in link_list:
    leg.mate(f"{name}?mate", name=name, origin=True)

# Relocate
relocate(leg)

# Assemble the parts
alpha = 0
joints = linkage(alpha, x, y, links)

for name in link_list:
    v, a = link_loc(name, joints, links)
    abs_loc = cq.Location(
        cq.Workplane("YZ").plane.rotated((0, 0, a)),
        cq.Vector(*v))  # calculate the absolute location ...
    loc = abs_loc * leg.mates[
        name].mate.loc.inverse  # ... and center the mate of the link first
    leg.assemble(name, loc)

cv = show(leg)
コード例 #2
0
                                                  name="arm",
                                                  color=C("orange"),
                                                  loc=L(0, 10 * nr, 0)))


disk_arm = create_disk_arm()

disk_arm.mate("base?mate",
              name="disk_pivot",
              origin=True,
              transforms=odict(rz=180))
disk_arm.mate("base@faces@>Z", name="arm_pivot")
disk_arm.mate("disk@faces@>Z[-2]", name="disk", origin=True)
disk_arm.mate("arm?mate", name="arm", origin=True)

relocate(disk_arm)

# show(disk_arm)

disk_arm.assemble("arm", "arm_pivot")
disk_arm.assemble("disk", "disk_pivot")

show(disk_arm, reset_camera=True)

r_disk = 100
dist_pivot = 200


def angle_arm(angle_disk):
    ra = np.deg2rad(angle_disk)
    v = np.array((dist_pivot, 0)) - r_disk * np.array((cos(ra), sin(ra)))
コード例 #3
0
for name in leg_names:
    lower, upper, angle = ("top", "bottom",
                           -75) if "left" in name else ("bottom", "top", -75)
    hexapod.mate(f"{name}?{upper}",
                 name=f"leg_{name}_hole",
                 transforms=odict(rz=angle))
    hexapod.mate(f"{name}@faces@<Y",
                 name=f"leg_{name}_hinge",
                 origin=True,
                 transforms=odict(rx=180, rz=-90))
    hexapod.mate(f"{name}/lower?{lower}",
                 name=f"leg_{name}_lower_hole",
                 origin=True)

# show(hexapod, reset_camera=False)
relocate(hexapod)

# Assemble the parts
for leg in leg_names:
    hexapod.assemble(f"leg_{leg}_lower_hole", f"leg_{leg}_hole")
    hexapod.assemble(f"leg_{leg}_hinge", f"{leg}_hole")

hexapod.assemble("top", "bottom")

for stand_name in stand_names:
    hexapod.assemble(f"{stand_name}", f"{stand_name}_bottom")

show(hexapod)

# Animation
コード例 #4
0
    ("c/b", "cyl2"),
    ("c/b/a", "cyl3"),
):
    assy.mate(
        f"{obj}?{name}_m0",
        name=f"{name}_m0",
        transforms=odict(rx=180 if "c" in name else 0),
        origin=True,
    )
    assy.mate(
        f"{obj}?{name}_m1",
        name=f"{name}_m1",
        transforms=odict(rx=0 if "b" in name else 180),
    )

relocate(assy)

check_mates = False
if check_mates:
    show(assy, render_mates=True)
else:
    # Assemble the parts
    assy.assemble("cyl1_m0", "box0_m0")
    assy.assemble("box1_m1", "cyl1_m1")
    assy.assemble("cyl2_m0", "box1_m0")
    assy.assemble("box2_m1", "cyl2_m1")
    assy.assemble("cyl3_m0", "box2_m0")
    assy.assemble("box3_m1", "cyl3_m1")

    show(assy)