Ejemplo n.º 1
0
def move_network(network):
    """Move the entire network.

    Parameters:
        network (compas.datastructures.network.Network): A network object.

    """
    color  = Rhino.ApplicationSettings.AppearanceSettings.FeedbackColor
    origin = {key: network.vertex_coordinates(key) for key in network.vertices()}
    vertex = {key: network.vertex_coordinates(key) for key in network.vertices()}
    edges  = network.edges()
    start  = compas_rhino.pick_point('Point to move from?')

    if not start:
        return

    def OnDynamicDraw(sender, e):
        current = list(e.CurrentPoint)
        vec = [current[i] - start[i] for i in range(3)]
        for key in vertex:
            vertex[key] = [origin[key][i] + vec[i] for i in range(3)]
        for u, v in iter(edges):
            sp = vertex[u]
            ep = vertex[v]
            sp = Point3d(*sp)
            ep = Point3d(*ep)
            e.Display.DrawDottedLine(sp, ep, color)

    guids = compas_rhino.get_objects(name='{0}.*'.format(network.attributes['name']))
    compas_rhino.delete_objects(guids, False)

    gp = Rhino.Input.Custom.GetPoint()
    gp.SetCommandPrompt('Point to move to?')
    gp.DynamicDraw += OnDynamicDraw
    gp.Get()

    if gp.CommandResult() == Rhino.Commands.Result.Success:
        end = list(gp.Point())
        vec = [end[i] - start[i] for i in range(3)]
        for key, attr in network.vertices(True):
            attr['x'] += vec[0]
            attr['y'] += vec[1]
            attr['z'] += vec[2]

    try:
        network.draw()
    except AttributeError:
        # this may result in the network being drawn in a different layer then before
        draw_network(network)
Ejemplo n.º 2
0
    def move(diagram):
        color = Rhino.ApplicationSettings.AppearanceSettings.FeedbackColor
        origin = {
            key: diagram.vertex_coordinates(key)
            for key in diagram.vertices()
        }
        vertex = {
            key: diagram.vertex_coordinates(key)
            for key in diagram.vertices()
        }
        edges = list(diagram.edges())
        start = compas_rhino.pick_point('Point to move from?')

        if not start:
            return False

        def OnDynamicDraw(sender, e):
            current = list(e.CurrentPoint)
            vec = [current[i] - start[i] for i in range(3)]

            for key in vertex:
                vertex[key] = [origin[key][i] + vec[i] for i in range(3)]

            for u, v in iter(edges):
                sp = vertex[u]
                ep = vertex[v]
                sp = Point3d(*sp)
                ep = Point3d(*ep)
                e.Display.DrawDottedLine(sp, ep, color)

        gp = Rhino.Input.Custom.GetPoint()
        gp.SetCommandPrompt('Point to move to?')
        gp.DynamicDraw += OnDynamicDraw

        gp.Get()

        if gp.CommandResult() == Rhino.Commands.Result.Success:
            end = list(gp.Point())
            vec = [end[i] - start[i] for i in range(3)]

            for key, attr in diagram.vertices(True):
                attr['x'] += vec[0]
                attr['y'] += vec[1]
                attr['z'] += vec[2]

            return True
        return False
Ejemplo n.º 3
0
    def move(self):
        """Move the entire diagram.

        Returns
        -------
        bool
            True if the operation is successful.
            False otherwise.
        """
        def OnDynamicDraw(sender, e):
            translation = subtract_vectors(list(e.CurrentPoint), start)
            for vertex in vertex_xyz:
                vertex_xyz[vertex] = add_vectors(vertex_xyz0[vertex],
                                                 translation)
            for u, v in iter(edges):
                e.Display.DrawDottedLine(Point3d(*vertex_xyz[u]),
                                         Point3d(*vertex_xyz[v]), color)

        color = Rhino.ApplicationSettings.AppearanceSettings.FeedbackColor
        vertex_xyz = self.artist.vertex_xyz
        vertex_xyz0 = {vertex: xyz[:] for vertex, xyz in vertex_xyz.items()}
        edges = list(self.diagram.edges())
        start = compas_rhino.pick_point('Point to move from?')
        if not start:
            return False
        start = list(start)

        gp = Rhino.Input.Custom.GetPoint()
        gp.SetCommandPrompt('Point to move to?')
        gp.DynamicDraw += OnDynamicDraw
        gp.Get()
        if gp.CommandResult() != Rhino.Commands.Result.Success:
            return False

        end = list(gp.Point())
        translation = subtract_vectors(end, start)
        self.location = add_vectors(self.location, translation)
        return True