def parse(self, loader, chunk=None): chunk = FIGModelObject.parse(self, loader, chunk) s = figlib.unpack(self._frm32, chunk) data = dict(zip(self._names32, s)) self.__dict__.update(data) if self.forward_arrow: fa = FIGFArrow() fa.parse(loader) self.childs.append(fa) if self.backward_arrow: fb = FIGBArrow() fb.parse(loader) self.childs.append(fb) if self.sub_type == fig_const.T_PIC_BOX: picture = FIGPicture() picture.parse(loader) self.childs.append(picture) self.points = [] while len(self.points) < self.npoints: line = loader.readln() if line is None: raise Exception('Line is corrupted') data = line.split() items = ([int(x), int(y)] for x, y in figlib.list_chunks(data, 2)) self.points.extend(items)
def parse(self, loader, chunk=None): chunk = FIGModelObject.parse(self, loader, chunk) s = figlib.unpack(self._frm32, chunk) data = dict(zip(self._names32, s)) self.__dict__.update(data) self.sub_type = figlib.spline_sub_type(self.sub_type, loader.version) if self.forward_arrow: fa = FIGFArrow() fa.parse(loader) self.childs.append(fa) if self.backward_arrow: fb = FIGBArrow() fb.parse(loader) self.childs.append(fb) self.points = [] while len(self.points) < self.npoints: line = loader.readln() if line is None: raise Exception('Line is corrupted') data = line.split() items = ([int(x), int(y)] for x, y in figlib.list_chunks(data, 2)) self.points.extend(items) if self.sub_type in fig_const.T_INTERPOLATED: self.control_points = [] ncontrols = self.npoints * 2 while len(self.control_points) < ncontrols: line = loader.readln() if line is None: raise Exception('Line is corrupted') data = line.split() items = ([float(x), float(y)] for x, y in figlib.list_chunks(data, 2)) self.control_points.extend(items) elif self.sub_type in fig_const.T_XSPLINE: self.control_points = [] while len(self.control_points) < self.npoints: line = loader.readln() if line is None: raise Exception('Line is corrupted') items = map(float, line.split()) self.control_points.extend(items)
def save(self, saver): FIGModelObject.save(self, saver) data = [getattr(self, name) for name in self._names32] line = figlib.pack(data, self._frm32) saver.write('%s\n' % line) for item in self.childs: item.save(saver) for chunk in figlib.list_chunks(self.points, 6): flat_list = [str(int(item)) for items in chunk for item in items] line = ' '.join(flat_list) saver.write('\t %s\n' % line)
def save(self, saver): FIGModelObject.save(self, saver) data = [getattr(self, name) for name in self._names32] line = figlib.pack(data, self._frm32) saver.write('%s\n' % line) for item in self.childs: item.save(saver) for chunk in figlib.list_chunks(self.points, 6): flat_list = [str(int(item)) for items in chunk for item in items] line = ' '.join(flat_list) saver.write('\t %s\n' % line) if self.sub_type in fig_const.T_INTERPOLATED: for chunk in figlib.list_chunks(self.control_points, 4): flat_list = ['{:1.2f} {:1.2f}'.format(*item) for item in chunk] line = ' '.join(flat_list) saver.write('\t %s\n' % line) elif self.sub_type in fig_const.T_XSPLINE: for chunk in figlib.list_chunks(self.control_points, 8): flat_list = ['%1.3f' % item for item in chunk] line = ' '.join(flat_list) saver.write('\t %s\n' % line)