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