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)
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
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