示例#1
0
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)
示例#4
0
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()})
示例#5
0
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()
示例#6
0
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)