for i in range(N): block = brick.copy() block.transform(Translation.from_vector([0, 0, 0.5 * H + i * H])) shift(block) assembly.add_block(block) # mark the bottom block as support assembly.node_attribute(0, 'is_support', True) # ============================================================================== # Export # ============================================================================== assembly.to_json(FILE) # ============================================================================== # Visualize # ============================================================================== R = Rotation.from_axis_and_angle([1.0, 0, 0], -pi / 2) assembly.transform(R) plotter = AssemblyPlotter(assembly, figsize=(16, 10), tight=True) plotter.draw_nodes(radius=0.05) plotter.draw_edges() plotter.draw_blocks(facecolor={ key: '#ff0000' for key in assembly.nodes_where({'is_support': True}) })
import os import compas_rhino from compas_assembly.datastructures import Assembly from compas_assembly.rhino import AssemblyHelper HERE = os.path.abspath(os.path.dirname(__file__)) drawsettings = { 'show.vertices': True, 'layer': 'Assembly', } wall = Assembly() guids = compas_rhino.select_surfaces() wall.add_blocks_from_polysurfaces(guids) wall.draw(drawsettings) while True: keys = AssemblyHelper.select_vertices(wall) if not keys: break if AssemblyHelper.update_vertex_attributes(wall, keys): wall.draw(drawsettings) wall.to_json(os.path.join(HERE, '../data/frompolysurfaces.json'))
# add (number_of_even_bricks) full bricks for j in range(number_of_even_bricks): block = brick.copy() mesh_transform(block, Translation([j * (width + gap), 0, dy])) assembly.add_block(block) else: # in the uneven rows # add a half brick # add (number_of_even_bricks - 1) full bricks # add a half brick block = halfbrick.copy() mesh_transform(block, Translation([0, 0, dy])) assembly.add_block(block) for j in range(number_of_even_bricks - 1): block = brick.copy() mesh_transform(block, Translation([(0.5 + j) * (width + gap), 0, dy])) assembly.add_block(block) block = halfbrick.copy() mesh_transform(block, Translation([(0.5 + j + 1) * (width + gap), 0, dy])) assembly.add_block(block) # export to json assembly.to_json(compas_assembly.get('wall.json'))
if i % 2 == 0: # in the even rows # add (number_of_even_bricks) full bricks for j in range(number_of_even_bricks): block = brick.copy() mesh_transform(block, Translation([j * (width + gap), 0, dy])) assembly.add_block(block) else: # in the uneven rows # add a half brick # add (number_of_even_bricks - 1) full bricks # add a half brick block = halfbrick.copy() mesh_transform(block, Translation([0, 0, dy])) assembly.add_block(block) for j in range(number_of_even_bricks - 1): block = brick.copy() mesh_transform(block, Translation([(0.5 + j) * (width + gap), 0, dy])) assembly.add_block(block) block = halfbrick.copy() mesh_transform(block, Translation([(0.5 + j + 1) * (width + gap), 0, dy])) assembly.add_block(block) # export to json assembly.to_json(PATH)
block = brick.copy() factor = choice([+0.01, -0.01, +0.05, -0.05, +0.1, -0.1]) axis = choice([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]) vector = add_vectors(scale_vector(axis, factor), [0.0, 0.0, i * H]) mesh_transform(block, Translation(vector)) if i == 0: assembly.add_block(block, is_support=True) else: assembly.add_block(block) # export to json assembly.to_json(compas_assembly.get('stack.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}) })
from compas_rhino.utilities import get_meshes # get support meshes and block meshes from Rhino rhino_supports = get_meshes("Supports") rhino_blocks = get_meshes("Blocks") # create and weld compas meshes supports = [] for i in rhino_supports: support = Block.from_rhinomesh(i) support = mesh_weld(support) supports.append(support) blocks = [] for i in rhino_blocks: block = Block.from_rhinomesh(i) block = mesh_weld(block) blocks.append(block) # create an assembly assembly = Assembly() for i in supports: assembly.add_block(i, is_support=True) for i in blocks: assembly.add_block(i, is_support=False) # export the assembly in a .json file assembly.to_json('assembly_taubman.json')