Changeset 628 for mds-and-trees


Ignore:
Timestamp:
10/27/16 16:38:57 (7 years ago)
Author:
konrad
Message:

Fixed printing texts in svg and added support for additional porperties of creatures kept in [DIED] lines of the logs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • mds-and-trees/tree-genealogy.py

    r627 r628  
    3737            'dots': {
    3838                'color': {
    39                     'meaning': 'depth',
    40                     'start': 'purple',
     39                    'meaning': 'Lifespan',
     40                    'start': 'red',
    4141                    'end': 'green',
    4242                    'bias': 1
    4343                    },
    4444                'size': {
    45                     'meaning': 'children',
     45                    'meaning': 'EnergyEaten',
    4646                    'start': 1,
    47                     'end': 5,
     47                    'end': 6,
    4848                    'bias': 0.5
    4949                    },
    5050                'opacity': {
    51                     'meaning': 'children',
    52                     'start': 0.3,
    53                     'end': 0.8,
     51                    'meaning': 'EnergyEaten',
     52                    'start': 0.2,
     53                    'end': 1,
    5454                    'bias': 1
    5555                    }
     
    292292    def add_text(self, file, text, pos, anchor, style=''):
    293293        style = (style if style != '' else 'style="font-family: Arial; font-size: 12; fill: #000000;"')
    294         file.write('<text ' + style + ' text-anchor="' + anchor + '" x="' + str(pos[0]) + '" y="' + str(pos[1]) + '" >' + text + '</text>')
     294        # assuming font size 12, it should be taken from the style string!
     295        file.write('<text ' + style + ' text-anchor="' + anchor + '" x="' + str(pos[0]) + '" y="' + str(pos[1]+12) + '" >' + text + '</text>')
    295296
    296297    def add_dot(self, file, pos, style):
     
    562563            for i in range(len(self.props[prop])):
    563564                if self.props[prop][i] is not None:
    564                     self.props[prop][i] = (self.props[prop][i] - min_val) / max_val
     565                    self.props[prop][i] = 0 if max_val == 0 else (self.props[prop][i] - min_val) / max_val
    565566
    566567
     
    584585
    585586        ids = {}
    586         def get_id(id):
    587             if id not in ids:
    588                 ids[id] = len(ids)
     587        def get_id(id, createOnError = True):
     588            if createOnError:
     589                if id not in ids:
     590                    ids[id] = len(ids)
     591            else:
     592                if id not in ids:
     593                    return None
    589594            return ids[id]
    590595
     
    606611        self.time = [0] * nodes
    607612        self.kind = [0] * nodes
     613        self.life_lenght = [0] * nodes
    608614        self.props = {}
    609615
     
    652658                            if prop not in default_props:
    653659                                if prop not in self.props:
    654                                     self.props[prop] = [None for i in range(nodes)]
     660                                    self.props[prop] = [0 for i in range(nodes)]
    655661                                self.props[prop][creature_id] = creature[prop]
    656662
     
    658664                    else:
    659665                        raise LoadingError("[OFFSPRING] misses the 'FromIDs' field!")
     666                if line_arr[0] == "[DIED]":
     667                    creature = json.loads(line_arr[1])
     668                    creature_id = get_id(creature["ID"], False)
     669                    if creature_id is not None:
     670                        for prop in creature:
     671                            if prop not in default_props:
     672                                if prop not in self.props:
     673                                    self.props[prop] = [0 for i in range(nodes)]
     674                                self.props[prop][creature_id] = creature[prop]
     675
    660676
    661677            if loaded_so_far >= max_nodes and max_nodes != 0:
Note: See TracChangeset for help on using the changeset viewer.