Exemple #1
0
def cone_to_compas(cone):
    """Convert a Rhino cone to a COMPAS cone.

    Parameters
    ----------
    cone: :class:`Rhino.Geometry.Cone`

    Returns
    -------
    :class:`compas.geometry.Cone`
    """
    plane = Plane(cone.BasePoint,
                  vector_to_compas(cone.Plane.Normal).inverted())
    return Cone(Circle(plane, cone.Radius), cone.Height)
Exemple #2
0
    def __init__(self, scene, arrow, **kwargs):
        super(ArrowObject, self).__init__(scene, arrow, **kwargs)

        length = np.linalg.norm(arrow.direction)

        plane = Plane(arrow.point + arrow.direction * 0.7, arrow.direction)
        circle = Circle(plane, length * 0.15)
        cone = Cone(circle, length * 0.3)

        line = Line(Point(*arrow.point),
                    Point(*(arrow.point + arrow.direction * 0.7)))

        self.view = ArrowView(arrow, ConeObject(None, cone, 3),
                              LineObject(None, line))
Exemple #3
0
node_color = {node: (255, 0, 0) for node in network.nodes_where({'is_anchor': True})}

artist.draw_nodes(color=node_color)
artist.draw_edges()

# visualize the forces

height = 1.0
world = Frame.worldXY()

circle = [[0, 0, 0.5 * 0.7 * height], [0, 0, 1]], 0.05
cylinder = Cylinder(circle, 0.7 * height)

circle = [[0, 0, 0.7 * height], [0, 0, 1]], 0.1
cone = Cone(circle, 0.3 * height)

for node in network.nodes():
    a = network.node_attributes(node, 'xyz')

    for nbr in network.neighbors(node):
        edge = node, nbr
        if not network.has_edge(*edge):
            edge = nbr, node

        b = network.node_attributes(nbr, 'xyz')
        force = network.edge_attribute(edge, 'f')
        direction = normalize_vector(subtract_vectors(b, a))

        frame = Frame.from_plane([a, direction])
        X = Transformation.from_frame_to_frame(world, frame)
Exemple #4
0
 def from_data(cls, data):
     cone = Cone.from_data(data)
     vcone = cls(cone)
     return vcone
Exemple #5
0
 def data(self, data):
     self.cone = Cone.from_data(data)
Exemple #6
0
import random

from compas.geometry import Plane
from compas.geometry import Circle
from compas.geometry import Cone
from compas.geometry import Polyhedron
from compas_viewers.objectviewer import Arrow

from compas_viewers.objectviewer import ObjectViewer

viewer = ObjectViewer()

plane = Plane([2, 0, 0], [0, 0, 1])
circle = Circle(plane, 0.5)
cone = Cone(circle, 1)
viewer.add(cone)

polyhedron = Polyhedron(4)
viewer.add(polyhedron)

arrow = Arrow([-2, 0, 0], [0, 1, 1])
viewer.add(arrow)

viewer.show()
Exemple #7
0
        # dot product
        d = sum(
            [i * j for (i, j) in zip(c, [dxy, point.z - self.cone.height])])
        return d

        # IQ : https://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm
        # float sdCone( in vec3 p, in vec2 c )
        # {
        #     // c is the sin/cos of the angle
        #     float q = length(p.xy);
        #     return dot(c,vec2(q,p.z));
        # }

    def get_distance_numpy(self, x, y, z):
        raise NotImplementedError


if __name__ == "__main__":

    c = Cone(Circle(Plane((0, 0, -1), (0, 1, 1)), 12.), 20.)
    vc = VolCone(c)

    for y in range(-15, 15):
        s = ''
        for x in range(-30, 30):
            d = vc.get_distance(Point(x * 0.5, -y, 0))
            if d < 0:
                s += 'x'
            else:
                s += '.'
        print(s)