def concatenate():
    trans1 = [1, 2, 3]
    angle1 = [-2.142, 1.141, -0.142]
    T1 = Translation(trans1)
    R1 = Rotation.from_euler_angles(angle1)
    M1 = T1.concatenate(R1)
    assert np.allclose(M1, T1 * R1)
Example #2
0
ANGLES = [radians(1), radians(-1), radians(2), radians(-2)]

# load an assembly

assembly = Assembly.from_json(compas_assembly.get('stack.json'))

# shift and rotate in random directions
# use small increments ("imperfections")

for key in assembly.vertices():
    block = assembly.blocks[key]

    R = Rotation.from_axis_and_angle(choice(XYZ), choice(ANGLES), block.centroid())
    T = Translation(scale_vector(choice(XYZ), choice([0.01, -0.01])))

    mesh_transform(block, T.concatenate(R))

# serialise

assembly.to_json(compas_assembly.get('assembly.json'))

# visualise

R = Rotation.from_axis_and_angle([1.0, 0, 0], -pi / 2)
assembly_transform(assembly, R)

plotter = AssemblyPlotter(assembly, tight=True)

plotter.draw_vertices(text={key: str(key) for key, attr in assembly.vertices(True)})
plotter.draw_blocks(
    facecolor={key: '#ff0000' for key in assembly.vertices_where({'is_support': True})}