def parse(dxf_file, segarc, new_origin=True): font = Font() DXF_source = " " dxf_import = DXF_CLASS() dxf_import.GET_DXF_DATA(dxf_file, tol_deg=segarc) dxfcoords = dxf_import.DXF_COORDS_GET(new_origin) if "POTRACE" in dxf_import.comment.upper(): DXF_source = "POTRACE" if "INKSCAPE" in dxf_import.comment.upper(): DXF_source = "INKSCAPE" # save the character to our dictionary key = ord("F") stroke_list = [] bbox = BoundingBox() for line in dxfcoords: line = Line(line[0:4]) stroke_list.append(line) bbox.extend(line) font.add_character(Character(key, stroke_list)) return font, DXF_source
def get_char_bbox_used(self, string): bbox = BoundingBox() for char in string: bbox.extend(self[ord(char)]) return bbox
def get_char_bbox_used(self, string): bbox = BoundingBox() for char in string: bbox.extend(self[ord(char)]) return bbox
def parse(dxf_file, segarc, new_origin=True): font = Font() DXF_source = " " dxf_import = DXF_CLASS() dxf_import.GET_DXF_DATA(dxf_file, tol_deg=segarc) dxfcoords = dxf_import.DXF_COORDS_GET(new_origin) if "POTRACE" in dxf_import.comment.upper(): DXF_source = "POTRACE" if "INKSCAPE" in dxf_import.comment.upper(): DXF_source = "INKSCAPE" # save the character to our dictionary key = ord("F") stroke_list = [] bbox = BoundingBox() for line in dxfcoords: line = Line(line[0:4]) stroke_list.append(line) bbox.extend(line) font.add_character(Character(key, stroke_list)) return font, DXF_source
class Font(object): """ The complete characterset of a font """ def __init__(self): self.characters = {} self.bbox = BoundingBox() def __len__(self): return len(self.characters) def __getitem__(self, key): # Space or Linefeed if key in (32, 10): return Character(' ', []) try: return self.characters[key] except: # return a question mark for chars missing in this characterset return self.characters[63] def __iter__(self): for char in self.characters: yield char def add_character(self, char): self.characters[char.key] = char self.bbox.extend(char.bounds()) def get_char_bbox_used(self, string): bbox = BoundingBox() for char in string: bbox.extend(self[ord(char)]) return bbox def get_character_width(self): return max(self.characters[key].get_xmax() for key in self.characters) def line_height(self): return self.bbox.ymax def line_depth(self): return self.bbox.ymin
def test_extend_with_lines(self): bbox = BoundingBox() with open('tests/files/lines.csv', 'r') as csvfile: lines = [map(float, line) for line in csv.reader(csvfile, delimiter=',')] minx, maxx, miny, maxy = (INFINITY, -INFINITY, INFINITY, -INFINITY) for line in lines: bbox.extend(Line(map(float, line))) minx = min(minx, line[0], line[2]) maxx = max(maxx, line[0], line[2]) miny = min(miny, line[1], line[3]) maxy = max(maxy, line[1], line[3]) self.assertEquals(str(bbox), str(BoundingBox(minx, maxx, miny, maxy)))
class Font(object): """ The complete characterset of a font """ def __init__(self): self.characters = {} self.bbox = BoundingBox() def __len__(self): return len(self.characters) def __getitem__(self, key): # Space or Linefeed if key in (32, 10): return Character(' ', []) try: return self.characters[key] except: # return a question mark for chars missing in this characterset return self.characters[63] def __iter__(self): for char in self.characters: yield char def add_character(self, char): self.characters[char.key] = char self.bbox.extend(char.bounds()) def get_char_bbox_used(self, string): bbox = BoundingBox() for char in string: bbox.extend(self[ord(char)]) return bbox def get_character_width(self): return max(self.characters[key].get_xmax() for key in self.characters) def line_height(self): return self.bbox.ymax def line_depth(self): return self.bbox.ymin
def test_extend_with_lines(self): bbox = BoundingBox() with open('tests/files/lines.csv', 'r') as csvfile: csv_file = csv.reader(csvfile, delimiter=',') lines = [list(map(float, line)) for line in csv_file] minx, maxx, miny, maxy = (INFINITY, -INFINITY, INFINITY, -INFINITY) for line in lines: bbox.extend(Line(map(float, line))) minx = min(minx, line[0], line[2]) maxx = max(maxx, line[0], line[2]) miny = min(miny, line[1], line[3]) maxy = max(maxy, line[1], line[3]) self.assertEquals(str(bbox), str(BoundingBox(minx, maxx, miny, maxy)))
def test_extend_with_line(self): bbox = BoundingBox(0, 0, 0, 0) bbox.extend(Line((0, 0, 100, 100))) self.assertEquals(bbox, BoundingBox(0, 100, 0, 100))
def test_extend_with_bbox(self): bbox = BoundingBox() bbox.extend(BoundingBox(0, 1.0, 2, 4)) bbox.extend(BoundingBox(1, 4, 8, 100)) self.assertEquals(bbox, BoundingBox(0.0, 4, 2, 100))
def test_extend_with_line(self): bbox = BoundingBox(0, 0, 0, 0) bbox.extend(Line((0, 0, 100, 100))) self.assertEquals(bbox, BoundingBox(0, 100, 0, 100))
def test_extend_with_bbox(self): bbox = BoundingBox() bbox.extend(BoundingBox(0, 1.0, 2, 4)) bbox.extend(BoundingBox(1, 4, 8, 100)) self.assertEquals(bbox, BoundingBox(0.0, 4, 2, 100))