def load(self, p):

        cp = CanvasParser(p)
        if cp.get_root() is None:
            return

        nodes = dict()

        #=======================================================================
        # load nodes
        #=======================================================================
        # load roots
        for t, klass in (('stage', RootNode),
                         ('spectrometer', SpectrometerNode),
                         ('valve', ValveNode),
                         ('rough_valve', ValveNode),
                         ('turbo', PumpNode),
                         ('ionpump', PumpNode),
                         ('laser', LaserNode),
                         ('tank', TankNode),
                         ('pipette', PipetteNode),
                         ('gauge', GaugeNode)):
            for si in cp.get_elements(t):
                n = si.text.strip()
                if t in ('valve', 'rough_valve'):
                    o_vol = get_volume(si, tag='open_volume', default=10)
                    c_vol = get_volume(si, tag='closed_volume', default=5)
                    vol = (o_vol, c_vol)
                else:
                    vol = get_volume(si)

                node = klass(name=n, volume=vol)
                nodes[n] = node

        #=======================================================================
        # load edges
        #=======================================================================
        for ei in cp.get_elements('connection'):
            sa = ei.find('start')
            ea = ei.find('end')
            vol = get_volume(ei)
            edge = Edge(volume=vol)
            s_name = ''
            if sa.text in nodes:
                s_name = sa.text
                sa = nodes[s_name]
                edge.a_node = sa
                sa.add_edge(edge)

            e_name = ''
            if ea.text in nodes:
                e_name = ea.text
                ea = nodes[e_name]
                edge.b_node = ea
                ea.add_edge(edge)

            edge.name = '{}_{}'.format(s_name, e_name)

        self.nodes = nodes
Esempio n. 2
0
    def _new_rectangle(self,
                       elem,
                       c,
                       bw=3,
                       layer=1,
                       origin=None,
                       klass=None,
                       type_tag=''):
        if klass is None:
            klass = RoundedRectangle
        if origin is None:
            ox, oy = 0, 0
        else:
            ox, oy = origin

        key = elem.text.strip()
        display_name = elem.get('display_name', key)
        # print key, display_name
        fill = to_bool(elem.get('fill', 'T'))

        x, y = self._get_floats(elem, 'translation')
        w, h = self._get_floats(elem, 'dimension')

        color = elem.find('color')
        if color is not None:
            c = color.text.strip()
            cobj = self.get_item(c)
            if cobj is not None:
                c = cobj.default_color
        else:
            c = self._make_color(c)
        # if type_tag == 'turbo':
        # klass = Turbo
        # elif
        # else:
        # klass = RoundedRectangle

        rect = klass(x + ox,
                     y + oy,
                     width=w,
                     height=h,
                     name=key,
                     border_width=bw,
                     display_name=display_name,
                     volume=get_volume(elem),
                     default_color=c,
                     type_tag=type_tag,
                     fill=fill)
        font = elem.find('font')
        if font is not None:
            rect.font = font.text.strip()

        if type_tag in ('turbo', 'laser'):
            self.overlays.append(rect)
            rect.scene_visible = False

        self.add_item(rect, layer=layer)

        return rect
Esempio n. 3
0
    def _new_rectangle(self, cp, elem, c, bw=3,
                       layer=1,
                       origin=None, klass=None, type_tag=''):
        if klass is None:
            klass = RoundedRectangle
        if origin is None:
            ox, oy = 0, 0
        else:
            ox, oy = origin

        key = elem.text.strip()
        display_name = elem.get('display_name', key)
        # print key, display_name
        fill = to_bool(elem.get('fill', 'T'))

        # x, y = self._get_floats(elem, 'translation')
        x, y = self._get_translation(cp, elem)
        w, h = self._get_floats(elem, 'dimension')

        color = elem.find('color')
        if color is not None:
            c = color.text.strip()
            cobj = self.get_item(c)
            if cobj is not None:
                c = cobj.default_color
        else:
            c = self._make_color(c)
        # if type_tag == 'turbo':
        # klass = Turbo
        # elif
        # else:
        # klass = RoundedRectangle

        rect = klass(x + ox, y + oy, width=w, height=h,
                     name=key,
                     border_width=bw,
                     display_name=display_name,
                     volume=get_volume(elem),
                     default_color=c,
                     type_tag=type_tag,
                     fill=fill)
        font = elem.find('font')
        if font is not None:
            rect.font = font.text.strip()

        if type_tag in ('turbo', 'laser'):
            self.overlays.append(rect)
            rect.scene_visible = False

        self.add_item(rect, layer=layer)

        return rect
    def _new_rectangle(self, elem, c, bw=3,
                       layer=1,
                       origin=None, type_tag=''):
        if origin is None:
            ox, oy = 0, 0
        else:
            ox, oy = origin

        key = elem.text.strip()
        display_name = elem.get('display_name', key)
        fill = to_bool(elem.get('fill', 'T'))

        x, y = self._get_floats(elem, 'translation')
        w, h = self._get_floats(elem, 'dimension')

        color = elem.find('color')
        if color is not None:
            c = color.text.strip()
            cobj = self.get_item(c)
            if cobj is not None:
                c = cobj.default_color
        else:
            c = self._make_color(c)

        rect = RoundedRectangle(x + ox, y + oy, width=w, height=h,
                                name=key,
                                border_width=bw,
                                display_name=display_name,
                                volume=get_volume(elem),
                                default_color=c,
                                type_tag=type_tag,
                                fill=fill)
        font = elem.find('font')
        if font is not None:
            rect.font = font.text.strip()

        self.add_item(rect, layer=layer)
        return rect
Esempio n. 5
0
    def load(self, p):

        cp = CanvasParser(p)
        if cp.get_root() is None:
            return

        nodes = dict()

        # =======================================================================
        # load nodes
        # =======================================================================
        # load roots
        for t, klass in (('stage', RootNode),
                         ('spectrometer', SpectrometerNode),
                         ('valve', ValveNode),
                         ('rough_valve', ValveNode),
                         ('manual_valve', ValveNode),
                         ('turbo', PumpNode),
                         ('ionpump', PumpNode),
                         ('laser', LaserNode),
                         ('tank', TankNode),
                         ('pipette', PipetteNode),
                         ('gauge', GaugeNode),
                         ('getter', GetterNode)):
            for si in cp.get_elements(t):
                n = si.text.strip()
                if t in ('valve', 'rough_valve', 'manual_valve'):
                    o_vol = get_volume(si, tag='open_volume', default=10)
                    c_vol = get_volume(si, tag='closed_volume', default=5)
                    vol = (o_vol, c_vol)
                else:
                    vol = get_volume(si)

                node = klass(name=n, volume=vol)
                nodes[n] = node

        # =======================================================================
        # load edges
        # =======================================================================
        for tag in ('connection','elbow'):
            for ei in cp.get_elements(tag):
                sa = ei.find('start')
                ea = ei.find('end')
                vol = get_volume(ei)
                edge = Edge(volume=vol)
                s_name = ''
                if sa.text in nodes:
                    s_name = sa.text
                    sa = nodes[s_name]
                    edge.nodes.append(sa)
                    sa.add_edge(edge)

                e_name = ''
                if ea.text in nodes:
                    e_name = ea.text
                    ea = nodes[e_name]
                    # edge.b_node = ea
                    edge.nodes.append(ea)
                    ea.add_edge(edge)

                edge.name = '{}_{}'.format(s_name, e_name)

        for c in ('tee_connection', 'fork_connection'):
            for conn in cp.get_elements(c):
                left = conn.find('left')
                right = conn.find('right')
                mid = conn.find('mid')

                edge = Edge(vol=get_volume(conn))
                lt = left.text.strip()
                rt = right.text.strip()
                mt = mid.text.strip()

                ns = []
                for x in (lt, mt, rt):
                    if x in nodes:
                        ln = nodes[x]
                        edge.nodes.append(ln)
                        ln.add_edge(edge)
                        ns.append(x)

                edge.name = '-'.join(ns)

        self.nodes = nodes
Esempio n. 6
0
    def load(self, p):

        cp = CanvasParser(p)
        if cp.get_root() is None:
            return

        nodes = dict()

        # =======================================================================
        # load nodes
        # =======================================================================
        # load roots
        for t, klass in (('stage', RootNode), ('spectrometer',
                                               SpectrometerNode),
                         ('valve', ValveNode), ('rough_valve', ValveNode),
                         ('manual_valve', ValveNode), ('turbo', PumpNode),
                         ('ionpump', PumpNode), ('laser', LaserNode),
                         ('tank', TankNode), ('pipette', PipetteNode),
                         ('gauge', GaugeNode), ('getter', GetterNode)):
            for si in cp.get_elements(t):
                n = si.text.strip()
                if t in ('valve', 'rough_valve', 'manual_valve'):
                    o_vol = get_volume(si, tag='open_volume', default=10)
                    c_vol = get_volume(si, tag='closed_volume', default=5)
                    vol = (o_vol, c_vol)
                else:
                    vol = get_volume(si)

                node = klass(name=n, volume=vol)
                nodes[n] = node

        # =======================================================================
        # load edges
        # =======================================================================
        for tag in ('connection', 'elbow'):
            for ei in cp.get_elements(tag):
                sa = ei.find('start')
                ea = ei.find('end')
                vol = get_volume(ei)
                edge = Edge(volume=vol)
                s_name = ''
                if sa.text in nodes:
                    s_name = sa.text
                    sa = nodes[s_name]
                    edge.nodes.append(sa)
                    sa.add_edge(edge)

                e_name = ''
                if ea.text in nodes:
                    e_name = ea.text
                    ea = nodes[e_name]
                    # edge.b_node = ea
                    edge.nodes.append(ea)
                    ea.add_edge(edge)

                edge.name = '{}_{}'.format(s_name, e_name)

        for c in ('tee_connection', 'fork_connection'):
            for conn in cp.get_elements(c):
                left = conn.find('left')
                right = conn.find('right')
                mid = conn.find('mid')

                edge = Edge(vol=get_volume(conn))
                lt = left.text.strip()
                rt = right.text.strip()
                mt = mid.text.strip()

                ns = []
                for x in (lt, mt, rt):
                    if x in nodes:
                        ln = nodes[x]
                        edge.nodes.append(ln)
                        ln.add_edge(edge)
                        ns.append(x)

                edge.name = '-'.join(ns)

        self.nodes = nodes