import compas_rhino from compas.rpc import Proxy from compas_tna.diagrams import FormDiagram from compas_tna.diagrams import ForceDiagram from compas_tna.rhino import DiagramHelper tna = Proxy('compas_tna.equilibrium') def horizontal(form, force, alpha=100, kmax=500): """Compute horizontal equilibrium by parallelising the form and force diagram. Parameters ---------- form : compas_tna.diagrams.FormDiagram The form diagram. force : compas_tna.diagrams.ForceDiagram The force diagram. alpha : int (100) Weighting factor for the calculation of the target vectors. ``alpha = 100`` means target vectors parallel to the edges of the form diagram. ``alpha = 0`` means target vectors parallel to the edges of the force diagram. kmax : int (500) Maximum number of iterations. Notes ----- This is a wrapper around the proxy for the function ``compas_tna.equilibrium.horizontal_nodal``.
from math import radians import compas_rhino from compas.geometry import pointcloud from compas.geometry import bounding_box from compas.geometry import Rotation from compas.geometry import Translation from compas.geometry import Frame from compas.geometry import Transformation from compas.geometry import transform_points from compas.utilities import pairwise # from compas.numerical import pca_numpy from compas.rpc import Proxy numerical = Proxy('compas.numerical') # ============================================================================== # Helpers # ============================================================================== def draw_cloud(cloud, bbox, color, layer): points = [{'pos': xyz, 'color': color} for xyz in cloud] lines = [] for a, b in pairwise(bbox[:4] + bbox[:1]): lines.append({'start': a, 'end': b, 'color': color}) for a, b in pairwise(bbox[4:] + bbox[4:5]): lines.append({'start': a, 'end': b, 'color': color}) for a, b in zip(bbox[:4], bbox[4:]): lines.append({'start': a, 'end': b, 'color': color}) compas_rhino.draw_points(points, layer=layer, clear=True)
import os from compas_ags.diagrams import FormGraph from compas_ags.diagrams import ForceDiagram from compas_ags.diagrams import FormDiagram from compas.rpc import Proxy HERE = os.path.dirname(__file__) FILE = os.path.join(HERE, '../data/paper/gs_form_force.obj') graph = FormGraph.from_obj(FILE) form = FormDiagram.from_graph(graph) force = ForceDiagram.from_formdiagram(form) loadpath = Proxy('compas_ags.ags.loadpath') lp = loadpath.compute_loadpath(form, force) print(lp)
import compas from compas.datastructures import Mesh from compas.datastructures import mesh_flatness from compas.utilities import i_to_rgb from compas_rhino.artists import MeshArtist from compas.rpc import Proxy TOL = 0.02 MAXDEV = 0.005 KMAX = 500 igl = Proxy('compas_libigl') mesh = Mesh.from_off(compas.get('tubemesh.off')) V, F = mesh.to_vertices_and_faces() V2 = igl.quadmesh_planarize((V, F), KMAX, MAXDEV) mesh = Mesh.from_vertices_and_faces(V2, F) dev = mesh_flatness(mesh, maxdev=TOL) artist = MeshArtist(mesh, layer="ITA20::Tubemesh") artist.clear_layer() artist.draw_faces(color={face: i_to_rgb(dev[face]) for face in mesh.faces()})
import os import compas from compas.rpc import Proxy from compas_assembly.rhino import AssemblyArtist proxy = Proxy('compas_assembly.datastructures') FILE_I = os.path.join(os.path.dirname(__file__), 'arch_assembly.json') FILE_O = os.path.join(os.path.dirname(__file__), 'arch_interfaces.json') assembly = compas.json_load(FILE_I) assembly = proxy.assembly_interfaces_numpy(assembly, tmax=0.02) compas.json_dump(assembly, FILE_O) artist = AssemblyArtist(assembly, layer="Arch::Interfaces") artist.clear_layer() artist.draw_nodes(color={ key: (255, 0, 0) for key in assembly.nodes_where({'is_support': True}) }) artist.draw_edges() artist.draw_blocks() artist.draw_interfaces()
import math import compas from compas.geometry import scale_vector from compas.geometry import Vector from compas.geometry import Rotation from compas.geometry import Translation from compas.geometry import Scale from compas.datastructures import Mesh from compas_rhino.artists import MeshArtist from compas.rpc import Proxy meshing = Proxy('compas_cgal.meshing') # ============================================================================== # Get the bunny and construct a mesh # ============================================================================== bunny = Mesh.from_ply(compas.get('bunny.ply')) bunny.cull_vertices() # ============================================================================== # Move the bunny to the origin and rotate it upright. # ============================================================================== vector = scale_vector(bunny.centroid(), -1) T = Translation.from_vector(vector) S = Scale.from_factors([100, 100, 100])
assembly.to_json(FILE_OUT) # ============================================================================== # Proxy zone # ============================================================================== """ assembly = Assembly.from_json(FILE_IN) data = {} assembly_data = assembly.to_data() blocks_data = {key: block.to_data() for key, block in assembly.blocks.items()} data['assembly'] = assembly_data data['blocks'] = blocks_data with Proxy('compas_assembly.datastructures') as dt: data = dt.assembly_interfaces_xfunc(data) with Proxy('compas_rbe.equilibrium') as eq: data = eq.compute_interface_forces_xfunc(data) assembly = Assembly.from_data(data['assembly']) assembly.blocks = {int(key): Block.from_data(data['blocks'][key]) for key in data['blocks']} # ============================================================================== # Visualize # ============================================================================== assembly.to_json(FILE_OUT)