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)
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))
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)
def from_data(cls, data): cone = Cone.from_data(data) vcone = cls(cone) return vcone
def data(self, data): self.cone = Cone.from_data(data)
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()
# 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)