示例#1
0
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
示例#2
0
    def get_char_bbox_used(self, string):
        bbox = BoundingBox()

        for char in string:
            bbox.extend(self[ord(char)])

        return bbox
示例#3
0
文件: font.py 项目: jieter/f-engrave
    def get_char_bbox_used(self, string):
        bbox = BoundingBox()

        for char in string:
            bbox.extend(self[ord(char)])

        return bbox
示例#4
0
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
示例#5
0
文件: font.py 项目: jieter/f-engrave
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)))
示例#7
0
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))