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)
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})}