Exemplo n.º 1
0
 def draw(self):
     d = self._path()
     self.arrow = svg.path(d=d)
     self.arrow.bind('click', self.switch)
     self.arrow.classList.add('switch')
     self.arrow.classList.add('switch-' + dirtext(self))
     return self.arrow
Exemplo n.º 2
0
 def draw(self):
     self.path = svg.path(
         d=rail_segment_d(self.left_node, self.right_node)
     )
     self.path.classList.add('rail')
     if self.crossings:
         self.path.classList.add('crossed')
     self.left_node.redraw()
     self.right_node.redraw()
     return self.path
Exemplo n.º 3
0
 def drag_started(self, event):
     if self.drag_origin:
         return
     print('drag started')
     self.drag_origin = self.grid.closest_node_screen(event.x, event.y)
     self.drag_origin.show_build_endpoint()
     if self.drag_path:
         self.drag_path.remove()
     self.drag_path = svg.path()
     self.drag_path.classList.add('build-path')
     self.layer <= self.drag_path
     self.drag_nodes = []
     self.drag_current = None
Exemplo n.º 4
0
 def draw(self, svg_interface):
     self.svg_interface = svg_interface
     self.builder_layer = self.builder.draw()
     self.grid_layer = self.draw_grid()
     self.rail_layer = svg.g(id='raillayer')
     self.node_layer = self.draw_nodes()
     self.exit_layer = svg.g(id='exitlayer')
     Exit.highlighter = svg.path(id='routehighlighter')
     Exit.highlighter.classList.add('highlighted')
     self.exit_layer <= Exit.highlighter
     self.aux_pt = self.svg_interface.createSVGPoint()
     return [
         self.builder_layer,
         self.grid_layer,
         self.rail_layer,
         self.node_layer,
         self.exit_layer,
     ]
Exemplo n.º 5
0
class Switch:
    MARKER = svg.marker(
        id='switcharrow',
        markerWidth=3, markerHeight=2,
        refX=2, refY=1,
        orient='auto',
        markerUnits='strokeWidth',
    )
    MARKER <= svg.path(d='M0,0 L0,2 L3,1 L0,0')
    enabled = False
    LENGTH_FRACTION = 0.4

    def __init__(self, node, left):
        self.node = node
        self.left = left
        self.arrow = None

    def draw(self):
        d = self._path()
        self.arrow = svg.path(d=d)
        self.arrow.bind('click', self.switch)
        self.arrow.classList.add('switch')
        self.arrow.classList.add('switch-' + dirtext(self))
        return self.arrow

    def _path(self):
        target = self.node.get_link(self.left)
        part = self.LENGTH_FRACTION / (abs(target.col - self.node.col) ** .75)
        return rail_segment_d(self.node, target, part, relative=True)

    def redraw(self):
        if self.arrow is None:
            return self.draw()

    def switch(self, event=None):
        if self.enabled:
            self.node.flip_switch(self.left)
            self.arrow.attrs['d'] = self._path()

    def __repr__(self):
        return '<{}Switch{}({})>'.format(
            dirtext(self).capitalize(), self.node, self.position
        )
Exemplo n.º 6
0
 def pathCreation(pos_from, pos_to):
     x1, y1 = map(int, pos_from)
     x2, y2 = map(int, pos_to)
     dx = abs(int((x1 - x2)))
     dy = abs(int((y1 - y2)))
     if dx > dy:
         mx1, my1 = int((x1 + x2) / 2), y1
         mx2, my2 = int((x1 + x2) / 2), y2
     else:
         mx1, my1 = x1, int((y1 + y2) / 2)
         mx2, my2 = x2, int((y1 + y2) / 2)
     if x1 == x2:
         mx1 += 1
         mx2 += 1
     if y1 == y2:
         my1 += 1
         my2 += 1
     d = f'M {x1} {y1} C {mx1} {my1} {mx2} {my2} {x2} {y2}'
     line = svg.path(d=d)
     return line