# HG changeset patch
# User cpt
# Date 1685932873 0
# Node ID afce956686a1e69c0082c77f44f9cc6526a1246c
# Parent 2139c39b727e6e879e881a9a5d3bb43939276a92
planemo upload commit 94b0cd1fff0826c6db3e7dc0c91c0c5a8be8bb0c
diff -r 2139c39b727e -r afce956686a1 Easyfig.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Easyfig.py Mon Jun 05 02:41:13 2023 +0000
@@ -0,0 +1,20339 @@
+#!/usr/bin/env python
+# easyFig.py Written by: Mitchell Sullivan mjsull@gmail.com
+# Supervisor: Dr. Scott Beatson and Dr. Nico Petty University of Queensland
+# Version 2.2.3 08.11.2016
+# License: GPLv3
+
+import os
+import subprocess
+from math import ceil, hypot
+import threading
+import time
+import struct
+import base64
+import string
+from ftplib import FTP
+import tarfile
+import platform
+import shutil
+import webbrowser
+import operator
+import sys
+
+
+def colorstr(rgb):
+ return "#%x%x%x" % (int(rgb[0] / 16), int(rgb[1] / 16), int(rgb[2] / 16))
+
+
+def binar(s):
+ transdict = {
+ "0": "0000",
+ "1": "0001",
+ "2": "0010",
+ "3": "0011",
+ "4": "0100",
+ "5": "0101",
+ "6": "0110",
+ "7": "0111",
+ "8": "1000",
+ "9": "1001",
+ "a": "1010",
+ "b": "1011",
+ "c": "1100",
+ "d": "1101",
+ "e": "1110",
+ "f": "1111",
+ }
+ outstring = ""
+ for i in s:
+ outstring += transdict[i]
+ return outstring
+
+
+class scalableVectorGraphics:
+ def __init__(self, height, width):
+ self.height = height
+ self.width = width
+ self.out = """
+")
+ outfile.close()
+
+ def drawRightArrow(self, x, y, wid, ht, fc, oc=(0, 0, 0), lt=1):
+ if lt > ht / 2:
+ lt = ht / 2
+ x1 = x + wid
+ y1 = y + ht / 2
+ x2 = x + wid - ht / 2
+ ht -= 1
+ if wid > ht / 2:
+ self.out += ' \n'
+ % (
+ x,
+ y + ht / 4,
+ x2,
+ y + ht / 4,
+ x2,
+ y,
+ x1,
+ y1,
+ x2,
+ y + ht,
+ x2,
+ y + 3 * ht / 4,
+ x,
+ y + 3 * ht / 4,
+ )
+ )
+ else:
+ self.out += ' \n' % (
+ x,
+ y,
+ x,
+ y + ht,
+ x + wid,
+ y1,
+ )
+
+ def drawLeftArrow(self, x, y, wid, ht, fc, oc=(0, 0, 0), lt=1):
+ if lt > ht / 2:
+ lt = ht / 2
+ x1 = x + wid
+ y1 = y + ht / 2
+ x2 = x + ht / 2
+ ht -= 1
+ if wid > ht / 2:
+ self.out += ' \n'
+ % (
+ x1,
+ y + ht / 4,
+ x2,
+ y + ht / 4,
+ x2,
+ y,
+ x,
+ y1,
+ x2,
+ y + ht,
+ x2,
+ y + 3 * ht / 4,
+ x1,
+ y + 3 * ht / 4,
+ )
+ )
+ else:
+ self.out += ' \n' % (
+ x,
+ y1,
+ x1,
+ y + ht,
+ x1,
+ y,
+ )
+
+ def drawBlastHit(self, x1, y1, x2, y2, x3, y3, x4, y4, fill=(0, 0, 255), lt=0):
+ self.out += ' \n' % (
+ x1,
+ y1,
+ x2,
+ y2,
+ x3,
+ y3,
+ x4,
+ y4,
+ )
+
+ def drawGradient(self, x1, y1, wid, hei, minc, maxc):
+ self.out += ' \n \n'
+ self.out += ' \n' % colorstr(maxc)
+ self.out += ' \n' % colorstr(minc)
+ self.out += " \n \n"
+ self.out += ' \n' % (
+ x1,
+ y1,
+ wid,
+ hei,
+ )
+
+ def drawGradient2(self, x1, y1, wid, hei, minc, maxc):
+ self.out += ' \n \n'
+ self.out += ' \n' % colorstr(maxc)
+ self.out += ' \n' % colorstr(minc)
+ self.out += " \n\n"
+ self.out += ' \n' % (
+ x1,
+ y1,
+ wid,
+ hei,
+ )
+
+ def drawOutRect(self, x1, y1, wid, hei, fill, lt=1):
+ self.out += ' \n' % (
+ x1,
+ y1,
+ wid,
+ hei,
+ )
+
+ def drawRightFrame(self, x, y, wid, ht, lt, frame, fill):
+ if lt > ht / 2:
+ lt = ht / 2
+ if frame == 1:
+ y1 = y + ht / 2
+ y2 = y + ht * 3 / 8
+ y3 = y + ht * 1 / 4
+ elif frame == 2:
+ y1 = y + ht * 3 / 8
+ y2 = y + ht * 1 / 4
+ y3 = y + ht * 1 / 8
+ elif frame == 0:
+ y1 = y + ht * 1 / 4
+ y2 = y + ht * 1 / 8
+ y3 = y + 1
+ x1 = x
+ x2 = x + wid - ht / 8
+ x3 = x + wid
+ if wid > ht / 8:
+ self.out += ' \n' % (
+ x1,
+ y1,
+ x2,
+ y1,
+ x3,
+ y2,
+ x2,
+ y3,
+ x1,
+ y3,
+ )
+ else:
+ self.out += ' \n' % (
+ x1,
+ y1,
+ x3,
+ y2,
+ x1,
+ y3,
+ )
+
+ def drawRightFrameRect(self, x, y, wid, ht, lt, frame, fill):
+ if lt > ht / 2:
+ lt = ht / 2
+ if frame == 1:
+ y1 = y + ht / 4
+ elif frame == 2:
+ y1 = y + ht / 8
+ elif frame == 0:
+ y1 = y + 1
+ hei = ht / 4
+ x1 = x
+ self.out += ' \n' % (
+ x1,
+ y1,
+ wid,
+ hei,
+ )
+
+ def drawLeftFrame(self, x, y, wid, ht, lt, frame, fill):
+ if lt > ht / 2:
+ lt = ht / 2
+ if frame == 1:
+ y1 = y + ht
+ y2 = y + ht * 7 / 8
+ y3 = y + ht * 3 / 4
+ elif frame == 2:
+ y1 = y + ht * 7 / 8
+ y2 = y + ht * 3 / 4
+ y3 = y + ht * 5 / 8
+ elif frame == 0:
+ y1 = y + ht * 3 / 4
+ y2 = y + ht * 5 / 8
+ y3 = y + ht / 2
+ x1 = x + wid
+ x2 = x + ht / 8
+ x3 = x
+ if wid > ht / 8:
+ self.out += ' \n' % (
+ x1,
+ y1,
+ x2,
+ y1,
+ x3,
+ y2,
+ x2,
+ y3,
+ x1,
+ y3,
+ )
+ else:
+ self.out += ' \n' % (
+ x1,
+ y1,
+ x3,
+ y2,
+ x1,
+ y3,
+ )
+
+ def drawLeftFrameRect(self, x, y, wid, ht, lt, frame, fill):
+ if lt > ht / 2:
+ lt = ht / 2
+ if frame == 1:
+ y1 = y + ht * 3 / 4
+ elif frame == 2:
+ y1 = y + ht * 5 / 8
+ elif frame == 0:
+ y1 = y + ht / 2
+ hei = ht / 4
+ x1 = x
+ self.out += ' \n' % (
+ x1,
+ y1,
+ wid,
+ hei,
+ )
+
+ def drawPointer(self, x, y, ht, lt, fill):
+ x1 = x - int(round(0.577350269 * ht / 2))
+ x2 = x + int(round(0.577350269 * ht / 2))
+ y1 = y + ht / 2
+ y2 = y + 1
+ self.out += ' \n' % (
+ x1,
+ y2,
+ x2,
+ y2,
+ x,
+ y1,
+ )
+
+ def drawDash(self, x1, y1, x2, y2, exont):
+ self.out += ' \n' % exont
+
+ def writeString(
+ self, thestring, x, y, size, ital=False, bold=False, rotate=0, justify="left"
+ ):
+ if rotate != 0:
+ x, y = y, x
+ self.out += " " + thestring + "\n"
+
+
+# class of blast hit data
+class BlastHit:
+ def __init__(
+ self,
+ query,
+ ref,
+ ident,
+ length,
+ mismatch,
+ gaps,
+ qStart,
+ qEnd,
+ rStart,
+ rEnd,
+ eValue,
+ bitscore,
+ ):
+ self.query = query
+ self.ref = ref
+ self.ident = float(ident)
+ self.length = int(length)
+ self.mismatch = int(mismatch)
+ self.gaps = int(gaps)
+ self.qStart = int(qStart)
+ self.qEnd = int(qEnd)
+ self.rStart = int(rStart)
+ self.rEnd = int(rEnd)
+ self.eValue = float(eValue)
+ self.bitscore = float(bitscore)
+
+
+# class for feature data
+class feature:
+ def __init__(self, start, stop, type, strand, colour, name):
+ self.start = start
+ self.stop = stop
+ self.type = type
+ self.strand = strand
+ self.colour = colour
+ self.name = name
+
+ def length(self):
+ if type(self.start) == int:
+ return self.stop - self.start
+ else:
+ return self.stop[-1] - self.start[0]
+
+
+# method for converting base pair position into pixel position
+def convertPos(length, maxlength, width, pos, aln):
+ if aln == "centre":
+ return int(((((maxlength - length) * 1.0 / 2) + pos) * 1.0 / maxlength) * width)
+ elif aln == "left":
+ return int(((pos * 1.0 / maxlength) * width))
+ elif aln == "right":
+ return int(((((maxlength - length) * 1.0) + pos) * 1.0 / maxlength) * width)
+ elif aln == "best blast":
+ return int((((pos + shifter) * 1.0 / maxlength) * width))
+
+
+# method for converting base pair position into pixel position if the genome has been reversed
+def convertPosR(length, maxlength, width, pos, aln):
+ if aln == "centre":
+ return int(
+ width
+ - (((((maxlength - length) * 1.0 / 2) + pos) * 1.0 / maxlength) * width)
+ )
+ elif aln == "left":
+ return int(
+ width - (((((maxlength - length) * 1.0) + pos) * 1.0 / maxlength) * width)
+ )
+ elif aln == "right":
+ return int(width - ((pos * 1.0 / maxlength) * width))
+ elif aln == "best blast":
+ return int(
+ width
+ - (
+ ((((maxlength - length) * 1.0) + pos - shifter) * 1.0 / maxlength)
+ * width
+ )
+ )
+
+
+""" Functions and classes for the bmp module.
+This section of the code uses a modified version of Paul McGuire's
+(http://www.geocities.com/ptmcg/) (RIP geocities/under constuction gifs)
+bmp.py - module for constructing simple BMP graphics files
+It is freely avaiable under the following license
+
+
+license for all code contained:
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+"""
+
+
+def shortToString(i):
+ hi = (i & 0xFF00) >> 8
+ lo = i & 0x00FF
+ return chr(lo) + chr(hi)
+
+
+def longToString(i):
+ hi = (int(i) & 0x7FFF0000) >> 16
+ lo = int(i) & 0x0000FFFF
+ return shortToString(lo) + shortToString(hi)
+
+
+# class
+class Color(object):
+ """class for specifying s while drawing BitMap elements"""
+
+ __slots__ = ["red", "grn", "blu"]
+ __shade = 32
+
+ def __init__(self, r=0, g=0, b=0):
+ self.red = r
+ self.grn = g
+ self.blu = b
+
+ def __setattr__(self, name, value):
+ if hasattr(self, name):
+ raise AttributeError("Color is immutable")
+ else:
+ object.__setattr__(self, name, value)
+
+ def __str__(self):
+ return "R:%d G:%d B:%d" % (self.red, self.grn, self.blu)
+
+ def __hash__(self):
+ return (int(self.blu)) + (int(self.grn) << 8) + (int(self.red) << 16)
+
+ def __eq__(self, other):
+ return (self is other) or (self.toLong == other.toLong)
+
+ def lighten(self):
+ return Color(
+ min(self.red + Color.__shade, 255),
+ min(self.grn + Color.__shade, 255),
+ min(self.blu + Color.__shade, 255),
+ )
+
+ def darken(self):
+ return Color(
+ max(self.red - Color.__shade, 0),
+ max(self.grn - Color.__shade, 0),
+ max(self.blu - Color.__shade, 0),
+ )
+
+ def toLong(self):
+ return self.__hash__()
+
+ def fromLong(l):
+ b = l & 0xFF
+ l = l >> 8
+ g = l & 0xFF
+ l = l >> 8
+ r = l & 0xFF
+ return Color(r, g, b)
+
+ fromLong = staticmethod(fromLong)
+
+
+# define class constants for common s
+Color.BLACK = Color(0, 0, 0)
+Color.RED = Color(255, 0, 0)
+Color.GREEN = Color(0, 255, 0)
+Color.BLUE = Color(0, 0, 255)
+Color.CYAN = Color(0, 255, 255)
+Color.MAGENTA = Color(255, 0, 255)
+Color.YELLOW = Color(255, 255, 0)
+Color.WHITE = Color(255, 255, 255)
+Color.DKRED = Color(128, 0, 0)
+Color.DKGREEN = Color(0, 128, 0)
+Color.DKBLUE = Color(0, 0, 128)
+Color.TEAL = Color(0, 128, 128)
+Color.PURPLE = Color(128, 0, 128)
+Color.BROWN = Color(128, 128, 0)
+Color.GRAY = Color(128, 128, 128)
+
+
+class BitMap(object):
+ """class for drawing and saving simple Windows bitmap files"""
+
+ LINE_SOLID = 0
+ LINE_DASHED = 1
+ LINE_DOTTED = 2
+ LINE_DOT_DASH = 3
+ _DASH_LEN = 12.0
+ _DOT_LEN = 6.0
+ _DOT_DASH_LEN = _DOT_LEN + _DASH_LEN
+
+ def __init__(self, width, height, bkgd=Color.WHITE, frgd=Color.BLACK):
+ self.wd = int(ceil(width))
+ self.ht = int(ceil(height))
+ self.bg = 0
+ self.fg = 1
+ self.palette = []
+ self.palette.append(bkgd.toLong())
+ self.palette.append(frgd.toLong())
+ self.setDefaultPenColor()
+
+ tmparray = [self.bg] * self.wd
+ self.bitarray = [tmparray[:] for i in range(self.ht)]
+ self.currentPen = 1
+ self.fontName = "%s-%d-%s" % ("none", 0, "none")
+ self.defsize = 64
+ self.amatrixwid = 41
+ self.amatrixhei = 48
+ self.amatrixori = 16
+ self.amatrix = "3ff8000001ffffc00003fffff80003fffffe0003ffffff8003ffffffe003\
+fffffff801ff801ffc01ff0001fe00ff00007f80ff00003fc07f80000fe0\
+3fc00007f01fc00003f80fe00001fc00000000fe000000007f000000007f\
+800000003fc0000000ffe000000ffff00003fffff8001ffffffc003fffff\
+fe007fffff7f00fffff83f807fff001fc07ff8000fe07fe00007f03fc000\
+03f81fe00001fc1fe00000fe0fe000007f07f000003f83f800001fc1fc00\
+001fe0fe00000ff07f00000ff83fc0000ffc0ff0001ffe07fc001fff01ff\
+807fffc0ffffffcffe3fffffc7ff0fffffc3ff83ffff80ffc07fff007fe0\
+07f8000fe"
+ self.bmatrixwid = 40
+ self.bmatrixhei = 64
+ self.bmatrixori = 0
+ self.bmatrix = "7f000000007f000000007f000000007f000000007f000000007f00000000\
+7f000000007f000000007f000000007f000000007f000000007f00000000\
+7f000000007f000000007f000000007f000000007f007fc0007f03fff800\
+7f07fffe007f1fffff007f3fffff807f7fffffc07f7fffffe07fff00fff0\
+7ffc003ff07ff8000ff87ff00007f87fe00003fc7fe00003fc7fc00001fe\
+7fc00001fe7f800000fe7f800000fe7f800000fe7f000000ff7f0000007f\
+7f0000007f7f0000007fff0000007fff0000007fff0000007fff0000007f\
+ff0000007fff0000007fff0000007fff800000feff800000feff800000fe\
+ff800000feffc00001feffc00001fcffe00003fcffe00007f8fff00007f8\
+fff8000ff8fffe003ff0ffff80ffe0feffffffe0fe7fffffc0fe3fffff80\
+fe1ffffe00fe0ffffc000003fff00000003f0000"
+ self.cmatrixwid = 37
+ self.cmatrixhei = 48
+ self.cmatrixori = 16
+ self.cmatrix = "1ff0000007fff00000ffffe0001fffff8001ffffff001ffffff801ffffff\
+e00ffc01ff80ff8007fc0ff8001ff07f80007f87f80001fe3fc0000ff1fc\
+00003f9fe00001fcfe00000fe7f00000003f80000001f80000001fc00000\
+00fe00000007f00000003f80000001fc0000000fe00000007f00000003f8\
+0000001fc0000000fe00000007f00000001fc0000000fe000007f7f00000\
+3fbfc00003f8fe00001fc7f80000fe3fc0000ff0ff0000ff07fc000ff81f\
+f000ff807fe01ffc03ffffffc00ffffffc003fffffc000fffffc0001ffff\
+c00003fff8000001fc000"
+ self.dmatrixwid = 40
+ self.dmatrixhei = 64
+ self.dmatrixori = 0
+ self.dmatrix = "7f000000007f000000007f000000007f000000007f000000007f00000000\
+7f000000007f000000007f000000007f000000007f000000007f00000000\
+7f000000007f000000007f000000007f0003ff007f001fffc07f003ffff0\
+7f00fffffc7f01fffffe7f03ffffff7f07ffffffff0fff00ffff0ffc003f\
+ff1ff0000fff1fe00007ff3fe00003ff3fc00003ff7f800001ff7f800001\
+ff7f000000ff7f000000ff7f000000ffff000000fffe0000007ffe000000\
+7ffe0000007ffe0000007ffe0000007ffe0000007ffe0000007ffe000000\
+7ffe0000007ffe0000007f7f000000ff7f000000ff7f000000ff7f000000\
+ff7f800001ff3f800001ff3fc00003ff3fe00003ff1ff00007ff1ff8000f\
+ff0ffc003fff07ff00ffff07ffffff7f03fffffe7f01fffffc7f00fffff8\
+7f003ffff07f000fffc0000000fc0000"
+ self.ematrixwid = 39
+ self.ematrixhei = 48
+ self.ematrixori = 16
+ self.ematrix = "1ff0000001fffe00000fffff00003fffff0001ffffff0007ffffff001fff\
+ffff003ff007ff00ff8003ff03fe0003fe07f80001fe0fe00003fc3f8000\
+03fc7f000003f9fc000007f3f800000fe7f000000fcfc000001fff800000\
+3fff0000007fffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffff800000007f00000000fe00000001fc00000001f800000003\
+f800000007f000001fcfe000003f8fe00000ff1fc00001fc3fc00007f83f\
+c0001fe07fc0003fc07fe001ff007ff00ffe00fffffff800ffffffe000ff\
+ffff80007ffffe00007ffff000003fff80000007f8000"
+ self.fmatrixwid = 20
+ self.fmatrixhei = 62
+ self.fmatrixori = 0
+ self.fmatrix = "7f003ff007ff00fff01fff01fff01fe003fc003f8003f8003f8003f8003f\
+8003f8003f8003f8003f80ffffffffffffffffffffffffffffff03f8003f\
+8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f\
+8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f\
+8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f\
+8003f80"
+ self.gmatrixwid = 39
+ self.gmatrixhei = 65
+ self.gmatrixori = 16
+ self.gmatrix = "1ff0000000fff80fe007fffc1fc03ffffc3f80fffffc7f03fffffcfe0fff\
+fffdfc1ff807fff87fc003fff1ff0003ffe3fc0003ffcff00003ff9fe000\
+03ff3f800007feff000007fdfc00000ffbf800001ff7f000003fefc00000\
+3fff8000007fff000000fffe000001fffc000003fff8000007fff000000f\
+ffe000001fffc000003fff8000007fff000000fffe000001fefe000007fd\
+fc00000ffbf800001ff7f800007fe7f00000ffcff00001ff9fe00007ff1f\
+e0001ffe3fe0007ffc3fe001fff83ff00feff07fffffdfe07fffff3fc07f\
+fffc7f807ffff0ff003fff81fe001ffe03f80007c007f00000000fe00000\
+003fc00000007f9fc00000ff3f800001fc7f800007f87f00000ff0ff0000\
+3fc1ff0000ff81ff0007fe01ff803ff803fffffff003ffffffc003fffffe\
+0001fffff80000ffff8000001ff8000"
+ self.hmatrixwid = 35
+ self.hmatrixhei = 62
+ self.hmatrixori = 0
+ self.hmatrix = "3f80000007f0000000fe0000001fc0000003f80000007f0000000fe00000\
+01fc0000003f80000007f0000000fe0000001fc0000003f80000007f0000\
+000fe0000001fc0000003f803fe007f03fffc0fe0ffffc1fc7ffffe3f9ff\
+fffe7f7fffffcfffe01ffdfff000ffbffc000ff7ff0000ffffc0001ffff0\
+0001fffe00003fff800007fff00000fffe00001fff800003fff000007ffe\
+00000fffc00001fff800003fff000007ffe00000fffc00001fff800003ff\
+f000007ffe00000fffc00001fff800003fff000007ffe00000fffc00001f\
+ff800003fff000007ffe00000fffc00001fff800003fff000007ffe00000\
+fffc00001fff800003fff000007ffe00000fffc00001fff800003fff0000\
+07f"
+ self.imatrixwid = 7
+ self.imatrixhei = 63
+ self.imatrixori = 0
+ self.imatrix = "1fffffffffffffffc0000000000000007fffffffffffffffffffffffffff\
+fffffffffffffffffffffffffffffffffffffffffffffffffff"
+ self.jmatrixwid = 14
+ self.jmatrixhei = 80
+ self.jmatrixori = 0
+ self.jmatrix = "1fc07f01fc07f01fc07f01fc07f01fc00000000000000000000000000000\
+7f01fc07f01fc07f01fc07f01fc07f01fc07f01fc07f01fc07f01fc07f01\
+fc07f01fc07f01fc07f01fc07f01fc07f01fc07f01fc07f01fc07f01fc07\
+f01fc07f01fc07f01fc07f01fc07f01fc07f01fc07f01fc07f01fc07f01f\
+c07f01fc0ff03fc1fffffbffefff3ff8ffc3f00"
+ self.kmatrixwid = 38
+ self.kmatrixhei = 62
+ self.kmatrixori = 0
+ self.kmatrix = "fe00000003f80000000fe00000003f80000000fe00000003f80000000fe0\
+0000003f80000000fe00000003f80000000fe00000003f80000000fe0000\
+0003f80000000fe00000003f80000000fe00000003f80001ff8fe0000ff8\
+3f80007fc0fe0003fe03f8001ff00fe000ff803f8007fc00fe003fe003f8\
+01ff000fe00ff8003f807fc000fe03fe0003f81ff0000fe0ff80003f87fc\
+0000fe3fe00003f9ffc0000fe7ff80003fbffe0000fffffc0003fffff000\
+0fffbfe0003ffc7fc000ffe0ff0003ff03fe000ff807fc003fc01ff000fe\
+003fe003f8007f800fe001ff003f8003fe00fe0007f803f8001ff00fe000\
+3fe03f8000ff80fe0001ff03f80003fc0fe0000ff83f80001ff0fe00003f\
+c3f80000ff8fe00001fe3f800007fcfe00000ffbf800001ff"
+ self.lmatrixwid = 7
+ self.lmatrixhei = 62
+ self.lmatrixori = 0
+ self.lmatrix = "3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+fffffffffffffffffffffffffffffffffffffffffffffffff"
+ self.mmatrixwid = 59
+ self.mmatrixhei = 46
+ self.mmatrixori = 16
+ self.mmatrix = "3fe0001ff007f03fff001fffc0fe0ffff807fffe1fc7ffff83ffffe3f9ff\
+fff8fffffe7f7fffffbfffffcfffc07ffff01ffdffe003fff800ffbff800\
+3ffe000ffffe0003ff8000ffff80007fe0001ffff00007fc0001fffc0000\
+ff00003fff80001fe00007ffe00003f80000fffc00007f00001fff80000f\
+e00003fff00001fc00007ffe00003f80000fffc00007f00001fff80000fe\
+00003fff00001fc00007ffe00003f80000fffc00007f00001fff80000fe0\
+0003fff00001fc00007ffe00003f80000fffc00007f00001fff80000fe00\
+003fff00001fc00007ffe00003f80000fffc00007f00001fff80000fe000\
+03fff00001fc00007ffe00003f80000fffc00007f00001fff80000fe0000\
+3fff00001fc00007ffe00003f80000fffc00007f00001fff80000fe00003\
+fff00001fc00007ffe00003f80000fffc00007f00001fff80000fe00003f\
+ff00001fc00007f"
+ self.nmatrixwid = 35
+ self.nmatrixhei = 46
+ self.nmatrixori = 16
+ self.nmatrix = "1fe007f01fff80fe0ffffc1fc3ffffc3f8fffffc7f3fffffcfefe01ffdff\
+f001ffbffc000ff7ff0001ffffc0001ffff00001fffe00003fff800007ff\
+f00000fffe00001fff800003fff000007ffe00000fffc00001fff800003f\
+ff000007ffe00000fffc00001fff800003fff000007ffe00000fffc00001\
+fff800003fff000007ffe00000fffc00001fff800003fff000007ffe0000\
+0fffc00001fff800003fff000007ffe00000fffc00001fff800003fff000\
+007ffe00000fffc00001fff800003fff000007f"
+ self.omatrixwid = 40
+ self.omatrixhei = 48
+ self.omatrixori = 16
+ self.omatrix = "1ff8000000ffff000003ffffc0000ffffff0001ffffff8003ffffffc007f\
+fffffe00fff00fff00ffc003ff01ff0000ff81fe00007f83fc00003fc3fc\
+00003fc3f800001fc7f800001fe7f000000fe7f000000fe7f000000fefe0\
+00000fffe0000007ffe0000007ffe0000007ffe0000007ffe0000007ffe0\
+000007ffe0000007ffe0000007ffe0000007ffe0000007fff000000ff7f0\
+00000fe7f000000fe7f000000fe7f800001fe3f800001fc3fc00003fc3fc\
+00003fc1fe00007f81ff0000ff80ffc003ff007ff00ffe007ffffffe003f\
+fffffc001ffffff8000fffffe00003ffffc00000ffff0000000ff0000"
+ self.pmatrixwid = 40
+ self.pmatrixhei = 64
+ self.pmatrixori = 16
+ self.pmatrix = "7fc000fe03fff800fe0ffffe00fe1fffff00fe3fffff80fe7fffffc0feff\
+ffffe0ffff00fff0fffc003ff0fff8000ff8fff00007f8ffe00003fcffe0\
+0003fcffc00001fcffc00001feff800000feff800000feff800000feff00\
+0000ffff0000007fff0000007fff0000007fff0000007fff0000007fff00\
+00007f7f0000007f7f0000007f7f0000007f7f0000007f7f800000ff7f80\
+0000fe7f800000fe7f800000fe7fc00001fe7fc00001fc7fe00003fc7fe0\
+0007fc7ff0000ff87ff8001ff87ffc003ff07fff80fff07fffffffe07f7f\
+ffffc07f3fffff807f1fffff007f07fffc007f01fff0007f003f80007f00\
+0000007f000000007f000000007f000000007f000000007f000000007f00\
+0000007f000000007f000000007f000000007f000000007f000000007f00\
+0000007f000000007f000000007f00000000"
+ self.qmatrixwid = 40
+ self.qmatrixhei = 64
+ self.qmatrixori = 16
+ self.qmatrix = "1fe0000000fffc07f003ffff07f00fffff87f01fffffe7f03ffffff7f07f\
+fffff7f07ff007fff0ffc003fff1ff0000fff1fe00007ff3fe00003ff3fc\
+00003ff3f800001ff7f800001ff7f000000ff7f000000ff7f000000ff7f0\
+00000fffe0000007ffe0000007ffe0000007ffe0000007ffe0000007ffe0\
+000007ffe0000007ffe0000007ffe0000007ffe0000007fff000000ff7f0\
+00000ff7f000000ff7f000000ff7f800001ff7f800001ff3fc00003ff3fe\
+00003ff1ff00007ff1ff8000fff0ffc003fff0fff00ffff07ffffff7f03f\
+fffff7f01fffffe7f00fffff87f003ffff07f000fffc07f0001fc007f000\
+000007f000000007f000000007f000000007f000000007f000000007f000\
+000007f000000007f000000007f000000007f000000007f000000007f000\
+000007f000000007f000000007f000000007f"
+ self.rmatrixwid = 22
+ self.rmatrixhei = 46
+ self.rmatrixori = 16
+ self.rmatrix = "3bf80fffe07fff87fffe3ffff9ffffe7ffffbfe0fffc03ffc00ffe003ff0\
+00ff8003fe000ff0003fc000ff0003f8000fe0003f8000fe0003f8000fe0\
+003f8000fe0003f8000fe0003f8000fe0003f8000fe0003f8000fe0003f8\
+000fe0003f8000fe0003f8000fe0003f8000fe0003f8000fe0003f8000fe\
+0003f8000"
+ self.smatrixwid = 36
+ self.smatrixhei = 48
+ self.smatrixori = 16
+ self.smatrix = "7fe000003fffc0001fffff0003fffffc007fffffe00fffffff01fffffff0\
+1ff803ff83fe0007f83f80007f87f80003fc7f00001fc7f00001fc7f0000\
+1fc7f00000007f00000007f80000003fc0000003ff8000003fff000001ff\
+ff00000fffff00007fffff0001fffffc0007fffff0001fffff80001ffffc\
+00001fffc000001ffe0000003fe0000001ff0000000ff00000007ffe0000\
+07ffe000007fff000007f7f000007f7f80000fe7f80001fe7fe0007fe3ff\
+801ffc3fffffff81fffffff80fffffff007fffffc001fffff80007fffc00\
+0007fc000"
+ self.tmatrixwid = 20
+ self.tmatrixhei = 59
+ self.tmatrixori = 5
+ self.tmatrix = "3f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f80f\
+fffffffffffffffffffffffffffff03f8003f8003f8003f8003f8003f800\
+3f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f800\
+3f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f800\
+3f8003f8003f8003f8003fc003fff03fff01fff00fff007ff001fe"
+ self.umatrixwid = 35
+ self.umatrixhei = 47
+ self.umatrixori = 17
+ self.umatrix = "1fc00001fff800003fff000007ffe00000fffc00001fff800003fff00000\
+7ffe00000fffc00001fff800003fff000007ffe00000fffc00001fff8000\
+03fff000007ffe00000fffc00001fff800003fff000007ffe00000fffc00\
+001fff800003fff000007ffe00000fffc00001fff800003fff000007ffe0\
+0000fffc00001fff800003fff000007ffe00001fffc00003fff800007fff\
+00001fffe00003fffe0000ffffe0003ffbfc000fff7fe003ffeffe03fdfc\
+ffffff3f8fffffc7f0fffff0fe0ffffc1fc07ffe000001fe0000"
+ self.vmatrixwid = 40
+ self.vmatrixhei = 45
+ self.vmatrixori = 17
+ self.vmatrix = "ff000000ffff000000ff7f800001fe7f800001fe7f800001fe3fc00003fc\
+3fc00003fc3fc00003f81fe00007f81fe00007f81fe00007f00ff0000ff0\
+0ff0000ff007f0000fe007f8001fe007f8001fc003f8001fc003fc003fc0\
+03fc003f8001fc003f8001fe007f8001fe007f0000fe007f0000ff00fe00\
+00ff00fe00007f00fe00007f01fc00007f81fc00003f83f800003f83f800\
+003fc3f800001fc7f000001fc7f000000fe7f000000fefe000000fefe000\
+0007ffc0000007ffc0000007ffc0000003ff80000003ff80000003ff8000\
+0001ff00000001ff00000001fe0000"
+ self.wmatrixwid = 60
+ self.wmatrixhei = 45
+ self.wmatrixori = 17
+ self.wmatrix = "ff00003fc0000ff7f00007fe0000ff7f80007fe0001fe7f80007fe0001fe\
+7f80007fe0001fe3f8000fff0001fc3fc000fff0003fc3fc000fff0003fc\
+1fc000fff0003f81fc001fff8003f81fe001fff8007f81fe001fbf8007f8\
+0fe001fbf8007f00fe003f9fc007f00ff003f9fc00ff007f003f1fc00fe0\
+07f003f1fc00fe007f007f0fe00fe007f807f0fe01fe003f807e0fe01fc0\
+03f807e07f01fc003fc0fe07f01fc001fc0fe07f03f8001fc0fc07f03f80\
+01fc0fc03f83f8001fe1fc03f83f8000fe1fc03f87f0000fe1f803f87f00\
+00fe1f801fc7f00007f3f801fc7e00007f3f801fcfe00007f3f001fcfe00\
+007f3f000fefe00003fff000fefc00003fff000fffc00003ffe000fffc00\
+001ffe0007ff800001ffe0007ff800001ffe0007ff800001ffc0007ff800\
+000ffc0003ff000000ffc0003ff000000ffc0003ff0000007f80003fe000\
+0007f80001fe000"
+ self.xmatrixwid = 39
+ self.xmatrixhei = 45
+ self.xmatrixori = 17
+ self.xmatrix = "3fe00000ff3fc00003fc3fc0000ff03fc0001fc07f80007f807f8001fe00\
+7f8003f800ff000ff000ff003fc000ff007f0001fe01fe0001fe07f80001\
+fe0fe00003fc3fc00003fcff000003fdfc000007fff0000007ffe0000007\
+ff8000000ffe0000000ffc0000000ff00000001fe00000007fe0000000ff\
+e0000003ffc000000fffc000003fffc000007f7f800001fe7f800007f87f\
+80000fe0ff00003fc0ff0000ff00ff0001fc01fe0007f801fe001fe001fe\
+003f8003fc00ff0003fc03fc0007fc0ff00007f81fe00007f87f80000ff9\
+fe00000ff7fc00000ff"
+ self.ymatrixwid = 39
+ self.ymatrixhei = 64
+ self.ymatrixori = 17
+ self.ymatrix = "fe000001fffe000007f9fc00000ff3f800001fc7f800007f8ff00000ff0f\
+e00001fc1fe00007f83fc0000ff03f80001fc07f80007f80ff0000ff00fe\
+0001fc01fe0007f803fc000fe003f8001fc007f8007f800ff000fe000fe0\
+01fc001fe007f8003fc00fe0003f803fc0007f807f8000ff00fe0000fe03\
+fc0001fc07f00003fc0fe00003f83fc00007f07f00000ff0fe00000fe3fc\
+00001fc7f000003fcfe000003fbfc000007f7f000000fffe000000fff800\
+0001fff0000003ffe0000003ff80000007ff0000000ffe0000000ff80000\
+001ff00000003fe00000003f80000000ff00000001fe00000003f8000000\
+0ff00000001fc00000007f80000000ff00000001fc00000007f80000001f\
+f00000007fc000003fff8000007ffe000000fff8000001ffe0000003ff80\
+000007fe00000003e0000000"
+ self.zmatrixwid = 36
+ self.zmatrixhei = 45
+ self.zmatrixori = 17
+ self.zmatrix = "7fffffffe7fffffffe7fffffffe7fffffffe7fffffffe7fffffffe000000\
+3fc0000007f8000000ff8000001ff0000001fe0000003fc0000007f80000\
+00ff8000001ff0000003fe0000003fc0000007f8000000ff8000001ff000\
+0003fe0000003fc0000007f8000000ff8000001ff0000003fe0000003fc0\
+000007f8000000ff8000001ff0000003fe0000003fc0000007fc000000ff\
+8000001ff0000003fe0000003fc0000007fc000000ff8000000fffffffff\
+fffffffffffffffffffffffffffffffffffffffffffff"
+ self.Amatrixwid = 55
+ self.Amatrixhei = 62
+ self.Amatrixori = 0
+ self.Amatrix = "ffe00000000001ffc00000000003ffc0000000000fff80000000001fff00\
+000000003fff0000000000fffe0000000001fffc0000000003fffc000000\
+000ff7f8000000001feff0000000007fcff000000000ff1fe000000001fe\
+3fc000000007f83fc00000000ff07f800000001fe0ff800000007f80ff00\
+000000ff01fe00000001fe03fe00000007f803fc0000000ff007f8000000\
+1fe00ff80000007f800ff0000000ff001fe0000003fe003fe0000007f800\
+3fc000000ff0007f8000003fc000ff8000007f8000ff000000ff0001fe00\
+0003fc0003fe000007f80003fc00000ff00007fc00003fc0000ff800007f\
+80000ff00000ff00001ff00003ffffffffe00007ffffffffc0001fffffff\
+ffc0003fffffffff80007fffffffff0001ffffffffff0003fffffffffe00\
+07f8000003fc001ff0000007fc003fc000000ff8007f8000000ff001ff00\
+00001ff003fc0000003fe007f80000003fc01ff00000007fc03fc0000000\
+ff80ff80000000ff81ff00000001ff03fc00000003fe0ff800000003fe1f\
+e000000007fc3fc00000000ff8ff800000000ff9fe000000001ff7fc0000\
+00001ff"
+ self.Bmatrixwid = 46
+ self.Bmatrixhei = 62
+ self.Bmatrixori = 0
+ self.Bmatrix = "fffffffc0003ffffffff000fffffffff003ffffffffe00fffffffffc03ff\
+fffffff80ffffffffff03fc00001ffe0ff000001ff83fc000003ff0ff000\
+0007fc3fc000000ff0ff0000003fe3fc0000007f8ff0000001fe3fc00000\
+07f8ff0000001fe3fc0000007f8ff0000001fe3fc0000007f0ff0000001f\
+c3fc000000ff0ff0000003f83fc000001fe0ff000000ff83fc000007fc0f\
+f00000ffe03fffffffff00fffffffff003ffffffff800fffffffff803fff\
+ffffff80ffffffffff03ffffffffff0ff000001ffc3fc000001ff8ff0000\
+001ff3fc0000003feff0000000ffbfc0000001feff00000007fbfc000000\
+0ffff00000003fffc0000000ffff00000003fffc0000000ffff00000003f\
+bfc0000000feff00000007fbfc0000001feff00000007fbfc0000003fcff\
+0000001ff3fc000000ff8ff000000ffe3ffffffffff0ffffffffff83ffff\
+fffffc0fffffffffe03fffffffff00fffffffff003fffffffc000"
+ self.Cmatrixwid = 53
+ self.Cmatrixhei = 65
+ self.Cmatrixori = -1
+ self.Cmatrix = "3ff8000000001ffffc00000007fffffc000000fffffff000001fffffffe0\
+0001ffffffff80001ffffffffe0001fff000fff8001ffc0001ffc001ffc0\
+0003ff001ff800000ffc00ff8000003fe00ff8000000ff807f80000003fc\
+07fc0000001fe03fc00000007f83fc00000003fc1fe00000001fe1fe0000\
+00007f8ff000000003fc7f800000000007f800000000003fc00000000001\
+fe00000000000ff000000000007f800000000003f800000000003fc00000\
+000001fe00000000000ff000000000007f800000000003fc00000000001f\
+e00000000000ff000000000007f800000000003fc00000000001fe000000\
+00000ff000000000007f800000000001fe00000000000ff000000000ff7f\
+8000000007fbfc000000003fdfe000000003fc7f800000001fe3fc000000\
+00ff1ff000000007f87f800000007fc3fe00000003fc0ff00000003fe07f\
+c0000001ff01ff0000001ff00ffc000000ff803ff000000ff801ffc00000\
+ffc007ff00000ffc001ffe0001ffc0007ffe007ffc0001ffffffffe00007\
+fffffffc00001fffffffc000003ffffffc0000007fffff800000007fffe0\
+000000003ff00000"
+ self.Dmatrixwid = 49
+ self.Dmatrixhei = 62
+ self.Dmatrixori = 0
+ self.Dmatrix = "3ffffffe00001ffffffff0000ffffffffe0007ffffffffc003fffffffff0\
+01fffffffffe00ffffffffff807f800007ffe03fc000007ff01fe000000f\
+fc0ff0000003ff07f8000000ff83fc0000003fe1fe0000000ff0ff000000\
+07fc7f80000001fe3fc0000000ff9fe00000003fcff00000001fe7f80000\
+0007fbfc00000003fdfe00000001feff00000000ff7f800000007fbfc000\
+00001fffe00000000ffff000000007fff800000003fffc00000001fffe00\
+000000ffff000000007fff800000003fffc00000001fffe00000000ffff0\
+00000007fff800000003fffc00000001fffe00000000ffff00000000ff7f\
+800000007fbfc00000003fdfe00000001feff00000000ff7f80000000ff3\
+fc00000007f9fe00000007fcff00000003fc7f80000003fe3fc0000001fe\
+1fe0000001ff0ff0000001ff07f8000001ff83fc000001ff81fe000003ff\
+80ff00000fffc07fffffffffc03fffffffff801fffffffff800fffffffff\
+8007ffffffff0003fffffffe0001fffffff00000"
+ self.Ematrixwid = 44
+ self.Ematrixhei = 62
+ self.Ematrixori = 0
+ self.Ematrix = "ffffffffffeffffffffffeffffffffffeffffffffffeffffffffffefffff\
+fffffeffffffffffeff000000000ff000000000ff000000000ff00000000\
+0ff000000000ff000000000ff000000000ff000000000ff000000000ff00\
+0000000ff000000000ff000000000ff000000000ff000000000ff0000000\
+00ff000000000ff000000000ff000000000ff000000000ff000000000fff\
+fffffffcffffffffffcffffffffffcffffffffffcffffffffffcffffffff\
+ffcffffffffffcff000000000ff000000000ff000000000ff000000000ff\
+000000000ff000000000ff000000000ff000000000ff000000000ff00000\
+0000ff000000000ff000000000ff000000000ff000000000ff000000000f\
+f000000000ff000000000ff000000000ff000000000ff000000000ff0000\
+00000fffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffff"
+ self.Fmatrixwid = 42
+ self.Fmatrixhei = 62
+ self.Fmatrixori = 0
+ self.Fmatrix = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+fffffffffffffffc00000000ff000000003fc00000000ff000000003fc00\
+000000ff000000003fc00000000ff000000003fc00000000ff000000003f\
+c00000000ff000000003fc00000000ff000000003fc00000000ff0000000\
+03fc00000000ff000000003fc00000000ff000000003fffffffff0ffffff\
+fffc3fffffffff0fffffffffc3fffffffff0fffffffffc3fffffffff0ff0\
+00000003fc00000000ff000000003fc00000000ff000000003fc00000000\
+ff000000003fc00000000ff000000003fc00000000ff000000003fc00000\
+000ff000000003fc00000000ff000000003fc00000000ff000000003fc00\
+000000ff000000003fc00000000ff000000003fc00000000ff000000003f\
+c00000000ff000000003fc00000000ff000000003fc00000000"
+ self.Gmatrixwid = 56
+ self.Gmatrixhei = 65
+ self.Gmatrixori = -1
+ self.Gmatrix = "ffe0000000001fffff000000007fffffc0000001fffffff0000007ffffff\
+fc00000ffffffffe00003fffffffff00007fff000fff8000fff80003ffc0\
+00ffe00000ffe001ff8000003ff003ff0000001ff007fe0000000ff807fc\
+0000000ff80ff800000007fc0ff800000003fc1ff000000003fc1fe00000\
+0003fc1fe000000001fe3fc000000001fe3fc000000000003fc000000000\
+007f8000000000007f8000000000007f8000000000007f8000000000007f\
+000000000000ff000000000000ff000000000000ff000000000000ff0000\
+03ffffffff000003ffffffff000003ffffffff000003ffffffff000003ff\
+ffffff000003ffffffff000003ffffffff00000000007f7f80000000007f\
+7f80000000007f7f80000000007f7f80000000007f7fc0000000007f3fc0\
+000000007f3fc000000000ff3fe000000000ff1fe000000000ff1ff00000\
+0001ff1ff000000001ff0ff800000003ff0ffc00000007ff07fc00000007\
+ff03fe0000000fff03ff0000001fff01ffc000007fff00ffe00000ffff00\
+7ffc0003ff7f003fff001ffe3f001ffffffffc3f000ffffffff83f0007ff\
+ffffe03f0001ffffff801f00007fffff001f00000ffff80000000000ff00\
+0000"
+ self.Hmatrixwid = 48
+ self.Hmatrixhei = 62
+ self.Hmatrixori = 0
+ self.Hmatrix = "ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
+ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
+ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
+ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
+ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
+ff00000000ffff00000000ffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff\
+ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
+ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
+ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
+ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
+ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
+ff00000000ffff00000000ff"
+ self.Imatrixwid = 8
+ self.Imatrixhei = 62
+ self.Imatrixori = 0
+ self.Imatrix = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffff"
+ self.Jmatrixwid = 35
+ self.Jmatrixhei = 64
+ self.Jmatrixori = 0
+ self.Jmatrix = "1fe0000003fc0000007f8000000ff0000001fe0000003fc0000007f80000\
+00ff0000001fe0000003fc0000007f8000000ff0000001fe0000003fc000\
+0007f8000000ff0000001fe0000003fc0000007f8000000ff0000001fe00\
+00003fc0000007f8000000ff0000001fe0000003fc0000007f8000000ff0\
+000001fe0000003fc0000007f8000000ff0000001fe0000003fc0000007f\
+8000000ff0000001fe0000003fc0000007f8000000ff0000001fe0000003\
+fffc00007fff80000ffff00001fffe00003fffc00007fff80000ffff0000\
+1fffe00003fffc0000ffffc0001fe7f80003fcff8000ff9ff8003fe1ff80\
+0ffc3ffc07ff03ffffffe03ffffff803fffffe003fffff0001ffffc0000f\
+ffe000003fc000"
+ self.Kmatrixwid = 49
+ self.Kmatrixhei = 62
+ self.Kmatrixori = 0
+ self.Kmatrix = "3fc0000000ffffe0000000ffeff0000000ffe7f8000000ffe3fc000000ff\
+e1fe000000ffe0ff000000ffe07f800000ffe03fc00000ffe01fe00000ff\
+e00ff000007fe007f800007fe003fc00007fe001fe00007fe000ff00007f\
+e0007f80007fe0003fc0007fe0001fe0007fe0000ff0007fe00007f8007f\
+e00003fc007fe00001fe007fe00000ff007fe000007f807fe000003fc07f\
+e000001fe07fe000000ff07ff8000007f87ffc000003fc7fff000001fe7f\
+ffc00000ff7fffe000007fffcff800003fffc3fe00001fffc1ff00000fff\
+c07fc00007ffc01ff00003ffc00ffc0001ffc003fe0000ffc000ff80007f\
+c0007fe0003fc0001ff0001fe00007fc000ff00001ff0007f80000ff8003\
+fc00003fe001fe00000ff800ff000007fe007f800001ff003fc000007fc0\
+1fe000003ff00ff000000ff807f8000003fe03fc000001ff81fe0000007f\
+c0ff0000001ff07f8000000ffc3fc0000003fe1fe0000000ff8ff0000000\
+3fe7f80000001ffbfc00000007fdfe00000001ff"
+ self.Lmatrixwid = 39
+ self.Lmatrixhei = 62
+ self.Lmatrixori = 0
+ self.Lmatrix = "3fc00000007f80000000ff00000001fe00000003fc00000007f80000000f\
+f00000001fe00000003fc00000007f80000000ff00000001fe00000003fc\
+00000007f80000000ff00000001fe00000003fc00000007f80000000ff00\
+000001fe00000003fc00000007f80000000ff00000001fe00000003fc000\
+00007f80000000ff00000001fe00000003fc00000007f80000000ff00000\
+001fe00000003fc00000007f80000000ff00000001fe00000003fc000000\
+07f80000000ff00000001fe00000003fc00000007f80000000ff00000001\
+fe00000003fc00000007f80000000ff00000001fe00000003fc00000007f\
+80000000ff00000001fe00000003fc00000007f80000000ff00000001fff\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+fffff"
+ self.Mmatrixwid = 57
+ self.Mmatrixhei = 62
+ self.Mmatrixori = 0
+ self.Mmatrix = "3ff800000000fffffc000000007ffffe000000003fffff800000003fffff\
+c00000001fffffe00000000ffffff80000000ffffffc00000007fffffe00\
+000003ffffff80000003ffffffc0000001ffffffe0000000fffffbf80000\
+00fefffdfc0000007f7ffefe0000003fbfff3f8000003f9fff9fc000001f\
+cfffcfe000000fe7ffe3f800000fe3fff1fc000007f1fff8fe000003f8ff\
+fc3f800003f87ffe1fc00001fc3fff0fe00000fe1fff83f80000fe0fffc1\
+fc00007f07ffe0fe00003f83fff03f80003f81fff81fc0001fc0fffc0fe0\
+000fe07ffe03f8000fe03fff01fc0007f01fff807e0003f80fffc03f8003\
+f807ffe01fc001fc03fff007e000fe01fff803f800fe00fffc01fc007f00\
+7ffe007e003f803fff003f803f801fff801fc01fc00fffc007e00fe007ff\
+e003f80fe003fff001fc07f001fff8007e03f800fffc003f83f8007ffe00\
+1fc1fc003fff0007e0fe001fff8003f8fe000fffc001fc7f0007ffe0007e\
+3f8003fff0003fbf8001fff8001fdfc000fffc0007ffe0007ffe0003ffe0\
+003fff0001fff0001fff80007ff8000fffc0003ff80007ffe0001ffc0003\
+fff00007fe0001fff80003fe0000fffc0001ff00007f"
+ self.Nmatrixwid = 48
+ self.Nmatrixhei = 62
+ self.Nmatrixori = 0
+ self.Nmatrix = "ff000000007fff800000007fffc00000007fffc00000007fffe00000007f\
+fff00000007ffff00000007ffff80000007ffffc0000007ffffc0000007f\
+fffe0000007fffff0000007fffff0000007ffeff8000007ffe7f8000007f\
+fe7fc000007ffe3fe000007ffe1fe000007ffe1ff000007ffe0ff800007f\
+fe07f800007ffe07fc00007ffe03fe00007ffe01fe00007ffe01ff00007f\
+fe00ff80007ffe007f80007ffe007fc0007ffe003fe0007ffe003fe0007f\
+fe001ff0007ffe000ff8007ffe000ff8007ffe0007fc007ffe0003fe007f\
+fe0003fe007ffe0001ff007ffe0000ff007ffe0000ff807ffe00007fc07f\
+fe00003fc07ffe00003fe07ffe00001ff07ffe00000ff07ffe00000ff87f\
+fe000007fc7ffe000003fc7ffe000003fe7ffe000001ff7ffe000001ff7f\
+fe000000fffffe0000007ffffe0000007ffffe0000003ffffe0000001fff\
+fe0000001ffffe0000000ffffe00000007fffe00000007fffe00000003ff\
+fe00000001fffe00000001ff"
+ self.Omatrixwid = 60
+ self.Omatrixhei = 65
+ self.Omatrixori = -1
+ self.Omatrix = "fff00000000000fffff0000000007fffffe00000000fffffff80000003ff\
+fffffc000000fffffffff000001fffffffff800003fff000fffc00007ff8\
+0001ffe0000ffe000007ff0001ffc000003ff8003ff0000000ffc003fe00\
+000007fc007fc00000003fe00ff800000001ff00ff800000001ff01ff000\
+000000ff81fe0000000007f83fe0000000007f83fe0000000007fc3fc000\
+0000003fc3fc0000000003fc7f80000000001fe7f80000000001fe7f8000\
+0000001fe7f80000000001fe7f00000000000feff00000000000ffff0000\
+0000000ffff00000000000ffff00000000000ffff00000000000ffff0000\
+0000000ffff00000000000ffff00000000000ffff00000000000ffff0000\
+0000000ffff00000000000ff7f00000000000fe7f80000000001fe7f8000\
+0000001fe7f80000000001fe7f80000000001fe3fc0000000003fc3fc000\
+0000003fc3fe0000000007fc1fe0000000007f81ff000000000ff80ff000\
+000000ff00ff800000001ff00ffc00000003ff007fc00000003fe003ff00\
+00000ffc003ff8000001ff8001ffc000003ff8000fff00000fff00007ffc\
+0003ffe00003fff801fffc00001fffffffff800000fffffffff0000003ff\
+fffffc0000000fffffff000000003fffffc0000000007fffe00000000000\
+3fe000000"
+ self.Pmatrixwid = 44
+ self.Pmatrixhei = 62
+ self.Pmatrixori = 0
+ self.Pmatrix = "fffffffe000ffffffffc00fffffffff00fffffffffc0fffffffffe0fffff\
+fffff0ffffffffff8ff000007ff8ff000001ffcff0000007fcff0000003f\
+eff0000003feff0000001feff0000001feff0000000ffff0000000ffff00\
+00000ffff0000000ffff0000000ffff0000000ffff0000000ffff0000000\
+ffff0000001ffff0000001feff0000003feff0000007feff000000ffcff0\
+00001ffcff000007ff8ffffffffff8ffffffffff0fffffffffe0ffffffff\
+fc0fffffffff00ffffffffc00fffffffe000ff000000000ff000000000ff\
+000000000ff000000000ff000000000ff000000000ff000000000ff00000\
+0000ff000000000ff000000000ff000000000ff000000000ff000000000f\
+f000000000ff000000000ff000000000ff000000000ff000000000ff0000\
+00000ff000000000ff000000000ff000000000ff000000000ff000000000\
+ff000000000ff000000000"
+ self.Qmatrixwid = 60
+ self.Qmatrixhei = 68
+ self.Qmatrixori = -1
+ self.Qmatrix = "fff00000000000fffff0000000007fffffe00000000fffffff00000003ff\
+fffffc000000fffffffff000001fffffffff800003fff000fffc00007ff8\
+0001ffe0000ffe000007ff0001ffc000003ff8003ff0000000ffc003fe00\
+000007fc007fc00000003fe00ff800000001ff00ff800000001ff01ff000\
+000000ff81fe0000000007f83fe0000000007fc3fe0000000007fc3fc000\
+0000003fc3fc0000000003fc7f80000000001fe7f80000000001fe7f8000\
+0000001fe7f80000000001fe7f00000000000feff00000000000ffff0000\
+0000000ffff00000000000ffff00000000000ffff00000000000ffff0000\
+0000000ffff00000000000ffff00000000000ffff00000000000ffff0000\
+0000000ffff00000000000ff7f00000000000fe7f80000000001fe7f8000\
+0000001fe7f80000000001fe7f80000000001fe3fc0000000003fc3fc000\
+0000003fc3fe0000000007fc1fe0000006007f81ff000000f00ff80ff000\
+001f80ff00ff800001fc1ff00ffc00003ff3ff007fc00001ffbfe003fe00\
+000ffffc003ff800007fffc001ffc00001fff8000fff00000fff00007ff8\
+0003ffe00003fff801ffff00001ffffffffff80000ffffffffffe00003ff\
+ffffffff00000fffffff9ff800003fffffe07fc000007ffff003fe000000\
+3fe0001fc0000000000000f8000000000000070000000000000010"
+ self.Rmatrixwid = 50
+ self.Rmatrixhei = 62
+ self.Rmatrixori = 0
+ self.Rmatrix = "ffffffffc0003fffffffff000ffffffffff003fffffffffe00ffffffffff\
+e03ffffffffff80fffffffffff03fc000001ffe0ff0000001ff83fc00000\
+03ff0ff00000007fc3fc0000000ff0ff00000003fe3fc00000007f8ff000\
+00001fe3fc00000007f8ff00000001fe3fc00000007f8ff00000001fe3fc\
+00000007f8ff00000001fc3fc00000007f0ff00000003fc3fc0000000ff0\
+ff00000007f83fc0000003fc0ff0000001ff03fc000003ff80ffffffffff\
+c03fffffffffc00fffffffffe003fffffffff800ffffffffff803fffffff\
+fff00ffffffffffe03fc000001ffc0ff0000001ff03fc0000003fe0ff000\
+00007f83fc0000000fe0ff00000003fc3fc00000007f0ff00000001fc3fc\
+00000007f0ff00000001fc3fc00000007f0ff00000001fc3fc00000007f0\
+ff00000001fc3fc00000007f0ff00000001fc3fc00000007f0ff00000001\
+fc3fc00000007f0ff00000001fc3fc00000007f8ff00000001fe3fc00000\
+007f8ff00000000ff3fc00000003feff00000000ffffc00000003ff"
+ self.Smatrixwid = 49
+ self.Smatrixhei = 65
+ self.Smatrixori = -1
+ self.Smatrix = "7ff800000003ffffc0000007fffff800000fffffff00000fffffffc0001f\
+fffffff8001ffffffffe001fff000fff000ffc0000ffc00ffc00003ff007\
+fc000007f807fc000001fe03fc000000ff01fe0000003f81fe0000001fc0\
+ff0000000ff07f80000003f83fc0000001fc1fe0000000fe0ff000000000\
+07fc0000000003fe0000000000ff80000000007fe0000000003ffc000000\
+000fff8000000007fff800000001ffffc00000007ffffe0000001ffffff0\
+000003ffffff8000007ffffff800000fffffff0000007fffffc0000003ff\
+fff80000003ffffe00000001ffff800000000fffc000000001fff0000000\
+003ff80000000007fe0000000001ff00000000007fbf800000003fffc000\
+00000fffe000000007fff000000003fff800000001fefe00000000ff7f00\
+0000007fbfc00000007f9fe00000003fc7f80000003fe3fe0000001fe0ff\
+8000001ff07fe000003ff01ffc00007ff007ffe001fff801fffffffff800\
+7ffffffff8001ffffffff00003fffffff000007fffffe000000fffff8000\
+00003ff80000"
+ self.Tmatrixwid = 48
+ self.Tmatrixhei = 62
+ self.Tmatrixori = 0
+ self.Tmatrix = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffff00000ff0000000000ff0000000000ff00000\
+00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
+00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
+00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
+00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
+00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
+00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
+00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
+00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
+00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
+00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
+00000ff0000000000ff00000"
+ self.Umatrixwid = 48
+ self.Umatrixhei = 64
+ self.Umatrixori = 0
+ self.Umatrix = "ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
+ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
+ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
+ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
+ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
+ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
+ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
+ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
+ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
+ff00000000ffff00000000ffff00000000ff7f80000001fe7f80000001fe\
+7fc0000003fe7fc0000003fc3fe0000007fc3ff000000ff81ff800003ff8\
+0ffe0000fff007ffc007ffe007ffffffffc003ffffffff8000ffffffff00\
+007ffffffc00000ffffff0000003ffffc00000001ff80000"
+ self.Vmatrixwid = 52
+ self.Vmatrixhei = 62
+ self.Vmatrixori = 0
+ self.Vmatrix = "ff800000000ff7f800000000fe7fc00000001fe7fc00000001fe3fc00000\
+001fc3fe00000003fc1fe00000003fc1fe00000003f81ff00000007f80ff\
+00000007f80ff00000007f00ff8000000ff007f8000000ff007f8000000f\
+e007fc000001fe003fc000001fe003fc000001fc003fe000003fc001fe00\
+0003fc001fe000003f8000ff000007f8000ff000007f8000ff000007f000\
+07f80000ff00007f80000ff00007fc0000fe00003fc0001fe00003fc0001\
+fe00003fe0001fc00001fe0003fc00001fe0003fc00000ff0003f800000f\
+f0007f800000ff0007f8000007f8007f0000007f800ff0000007f800ff00\
+00003fc00fe0000003fc01fe0000003fc01fe0000001fe01fc0000001fe0\
+3fc0000001fe03fc0000000ff03f80000000ff07f800000007f07f800000\
+007f87f000000007f87f000000003fcff000000003fcfe000000003fcfe0\
+00000001fffe000000001fffc000000001fffc000000000fff8000000000\
+fff80000000007ff80000000007ff00000000007ff00000000003ff00000\
+000003fe00000000003fe00000"
+ self.Wmatrixwid = 77
+ self.Wmatrixhei = 62
+ self.Wmatrixori = 0
+ self.Wmatrix = "3fe000000ff8000003ffff0000007fc000001ff7f8000003fe000000ff3f\
+e000003ff800000ff9ff000001ffc000007fcff800000ffe000003fe3fc0\
+0000fff000001fe1ff000007ffc00001ff0ff800003ffe00000ff87fc000\
+01fff000007fc1fe00001fffc00003fc0ff80000fffe00003fe07fc00007\
+f7f00001ff01fe00003fbf80000ff80ff00003f9fe00007f807f80001fc7\
+f00003fc03fe0000fe3f80003fe00ff0000ff1fe0001fe007f80007f0ff0\
+000ff003fc0003f83f80007f801ff0001fc1fc0007fc007f8001fe0ff000\
+3fc003fc000fe03f8001fe001fe0007f01fc000ff000ff8003f80ff0007f\
+8003fc003f807f8007f8001fe001fc01fc003fc000ff000fe00fe001fe00\
+07f800ff007f800ff0001fe007f001fc00ff0000ff003f800fe007f80007\
+f801fc007f003fc0003fc01fe003fc01fe0000ff00fe000fe00fe00007f8\
+07f0007f00ff00003fc03f8003fc07f80001fe03f8001fe03fc00007f81f\
+c0007f01fc00003fc0fe0003f81fe00001fe0ff0001fe0ff00000ff07f00\
+007f07f800003f83f80003f83f800001fe1fc0001fe1fc00000ff1fe0000\
+ff1fe000007f8fe00003f8ff000001fc7f00001fc7f000000ff3f80000ff\
+3f8000007fbf800003fbfc000001fdfc00001fdfe000000fefe00000fffe\
+0000007fff000007fff0000003fff000001fff8000000fff800000fffc00\
+00007ffc000007ffc0000003ffe000001ffe0000001ffe000000fff00000\
+007ff0000007ff80000003ff8000003ff80000001ffc000000ffc0000000\
+ffc0000007fe00000003fe0000003ff00000001ff0000001ff0000"
+ self.Xmatrixwid = 53
+ self.Xmatrixhei = 62
+ self.Xmatrixori = 0
+ self.Xmatrix = "1ff80000000ffc7fe00000007fc1ff00000007fc07fc0000007fe03ff000\
+0003fe00ff8000003fe003fe000003ff001ff800001ff0007fc00001ff00\
+01ff00000ff8000ffc0000ff80003fe0000ff80000ff80007fc00007fe00\
+07fc00001ff0007fc000007fc003fc000003ff003fe000000ff803fe0000\
+003fe01fe0000001ff81ff00000007fc1ff00000001ff0ff000000007fcf\
+f800000003feff800000000ffff8000000003fff8000000001fffc000000\
+0007ffc0000000001ffc0000000000ffe00000000003fe00000000003ff8\
+0000000003ffe0000000001fff8000000001fffc000000001ffff0000000\
+01ff7fc00000000ffbfe00000000ff8ff80000000ff83fe00000007fc1ff\
+00000007fc07fc0000007fc01ff0000003fe00ff8000003fe003fe000003\
+fe000ff800001ff0007fe00001ff0001ff00001ff00007fc0001ff80003f\
+f0000ff80000ff8000ff800003fe000ffc00001ff8007fc000007fc007fc\
+000001ff007fe000000ffc03fe0000003fe03fe0000001ff83ff00000007\
+fe1ff00000001ff1ff00000000ffdff800000003ff"
+ self.Ymatrixwid = 55
+ self.Ymatrixhei = 62
+ self.Ymatrixori = 0
+ self.Ymatrix = "3ff000000000ffbff000000003fe3fe00000000ffc7fe00000001ff07fe0\
+0000007fc07fc0000000ff80ffc0000003fe00ff8000000ffc00ff800000\
+1ff001ff8000007fc001ff000000ff8003ff000003fe0003fe000007fc00\
+03fe00001ff00007fe00007fc00007fc0000ff800007fc0003fe00000ff8\
+0007f800000ff8001ff000000ff8007fc000001ff000ff8000001ff003fe\
+0000003fe007f80000003fe01ff00000003fe07fc00000007fc0ff000000\
+007fc3fe000000007fc7f800000000ff9ff000000000ffbfc000000000ff\
+ff0000000001fffe0000000001fff80000000003fff00000000003ffc000\
+00000003ff000000000007fe000000000007f800000000000ff000000000\
+001fe000000000003fc000000000007f800000000000ff000000000001fe\
+000000000003fc000000000007f800000000000ff000000000001fe00000\
+0000003fc000000000007f800000000000ff000000000001fe0000000000\
+03fc000000000007f800000000000ff000000000001fe000000000003fc0\
+00000000007f800000000000ff000000000001fe000000000003fc000000\
+000007f800000"
+ self.Zmatrixwid = 48
+ self.Zmatrixhei = 62
+ self.Zmatrixori = 0
+ self.Zmatrix = "1ffffffffffe1ffffffffffe1ffffffffffe1ffffffffffe1ffffffffffe\
+1ffffffffffe1ffffffffffe0000000007fe000000000ffc000000001ff8\
+000000001ff8000000003ff0000000007fe000000000ffc000000000ffc0\
+00000001ff8000000003ff0000000007fe0000000007fc000000000ffc00\
+0000001ff8000000003ff0000000007fe0000000007fe000000000ffc000\
+000001ff8000000003ff0000000003ff0000000007fe000000000ffc0000\
+00001ff8000000001ff8000000003ff0000000007fe000000000ffc00000\
+0000ff8000000001ff8000000003ff0000000007fe000000000ffc000000\
+000ffc000000001ff8000000003ff0000000007fe0000000007fe0000000\
+00ffc000000001ff8000000003ff0000000003ff0000000007fe00000000\
+0ffc000000001ff8000000001ff0000000003ff0000000007fe000000000\
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffff"
+ self.onematrixwid = 21
+ self.onematrixhei = 60
+ self.onematrixori = 2
+ self.onematrix = "f80007c0007e0003f0001f8001fc000fe000ff000ff800ffc03ffe1fffff\
+fffffffffffffffffffffffff8003fc001fe000ff0007f8003fc001fe000\
+ff0007f8003fc001fc000fe0007f0003f8001fc000fe0007f0003f8001fc\
+000fe0007f0003f8001fc000fe0007f0003f8001fc000fe0007f0003f800\
+1fc000fe0007f0003f8001fc000fe0007f0003f8001fc000fe0007f0003f\
+8001fc000fe"
+ self.twomatrixwid = 40
+ self.twomatrixhei = 60
+ self.twomatrixori = 2
+ self.twomatrix = "1ffc000000ffff800003ffffe0000ffffff8001ffffffc003ffffffe007f\
+ffffff007ff007ff80ffc000ffc1ff00007fc1fe00003fe1fe00001fe3fc\
+00000fe3f800000fe3f800000ff3f8000007f7f8000007f7f0000007f7f0\
+000007f7f0000007f7f0000007f00000000ff00000000fe00000001fe000\
+00001fe00000003fc00000007fc0000000ff80000003ff00000007ff0000\
+001ffe0000007ffc000000fff8000003ffe000000fffc000003fff000000\
+7ffe000001fff8000003ffe000000fff8000001ffe0000003ff80000007f\
+e00000007fc0000000ff80000001fe00000001fc00000003fc00000003f8\
+00000007f000000007f000000007f000000007f00000000fffffffffffff\
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+ self.threematrixwid = 40
+ self.threematrixhei = 62
+ self.threematrixori = 2
+ self.threematrix = "1ff8000001ffff800007ffffe0000ffffff0003ffffff8007ffffffc007f\
+fffffe00ffe007ff01ff8001ff01fe0000ff81fc00007f83fc00003f83f8\
+00003fc3f800001fc3f800001fc7f000001fc7f000001fc7f000001fc7f0\
+00001fc00000001fc00000003f800000003f800000007f80000000ff0000\
+0001ff0000001ffe00000ffffc00000ffff000000fffe000000ffff80000\
+0ffffc00000fffff00000003ff80000000ffc00000003fc00000001fe000\
+00001fe00000000fe00000000ff000000007f000000007f000000007ffe0\
+000007ffe0000007ffe0000007ffe0000007f7f0000007f7f000000fe7f0\
+00000fe7f800001fe3f800001fe3fc00003fc3fe00007fc1ff8001ff81ff\
+e007ff80ffffffff007ffffffe003ffffffc001ffffff00007ffffe00001\
+ffff0000001ff0000"
+ self.fourmatrixwid = 41
+ self.fourmatrixhei = 60
+ self.fourmatrixori = 2
+ self.fourmatrix = "1f000000001f800000001fc00000001fe00000000ff00000000ff8000000\
+0ffc00000007fe00000007ff00000007ff80000007ffc0000003ffe00000\
+03fff0000003fff8000003fdfc000001fcfe000001fc7f000001fe3f8000\
+00fe1fc00000fe0fe00000ff07f00000ff03f800007f01fc00007f00fe00\
+007f807f00003f803f80003f801fc0003fc00fe0003fc007f0001fc003f8\
+001fc001fc001fe000fe000fe0007f000fe0003f800ff0001fc00ff0000f\
+e007f00007f007f00003f803f80001fc01ffffffffffffffffffffffffff\
+fffffffffffffffffffffffffffffffffffffffffffffc000001fc000000\
+00fe000000007f000000003f800000001fc00000000fe000000007f00000\
+0003f800000001fc00000000fe000000007f000000003f800000001fc000\
+00000fe00"
+ self.fivematrixwid = 40
+ self.fivematrixhei = 62
+ self.fivematrixori = 2
+ self.fivematrix = "3fffffff803fffffff803fffffff803fffffff807fffffff807fffffff80\
+7fffffff807f000000007f000000007f000000007e00000000fe00000000\
+fe00000000fe00000000fe00000000fe00000000fe00000000fc00000000\
+fc00000001fc00000001fc07f80001fc3fff0001fcffffe001fffffff001\
+fffffff801fffffffe01fffffffe03ffe00fff03ff8003ff83fe0000ff83\
+fc00007fc3f800003fc00000001fe00000001fe00000000fe00000000fe0\
+0000000ff000000007f000000007f000000007f000000007f000000007f0\
+00000007f000000007f000000007ffe0000007efe000000fe7f000000fe7\
+f000001fe7f800001fc3f800003fc3fc00007f83fe0000ff81ff8001ff00\
+ffe00ffe00fffffffe007ffffffc003ffffff8000fffffe00007ffffc000\
+00fffe0000001ff0000"
+ self.sixmatrixwid = 39
+ self.sixmatrixhei = 62
+ self.sixmatrixori = 2
+ self.sixmatrix = "1ff0000001fffc00000ffffe00007ffffe0001fffffe0007fffffe001fff\
+fffe007ff00ffc01ff8007fc03fc0007f80ff00007f81fe00007f07f8000\
+0fe0fe00000fe1fc00001fc7f00000000fe00000001fc00000007f800000\
+00fe00000001fc00000003f800000007f003f8000fe07ffe003fc3ffff00\
+7f8fffff80ff3fffff81feffffff83ffffffff87fff807ff8fffc001ff1f\
+fe0001ff3ff80001fe7ff00001feffc00003fdff000003fbfe000007f7fc\
+00000ffff000000fffe000001fdfc000003fbf8000007f7f000000fefe00\
+0001fdfc000003fbf8000007f3f800001fc7f000003f8ff000007f0fe000\
+01fe1fe00007f81fe0000ff03fe0007fc07fe001ff807ff00ffe007fffff\
+f8007fffffe0007fffff80007ffffe00007ffff000001fff80000003f800\
+0"
+ self.sevenmatrixwid = 40
+ self.sevenmatrixhei = 60
+ self.sevenmatrixori = 2
+ self.sevenmatrix = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffff00000000fe00000000fe00000001fc00000003f800000003f8\
+00000007f00000000fe00000000fc00000001fc00000003f800000003f80\
+0000007f00000000fe00000000fe00000001fc00000001fc00000003f800\
+000003f000000007f00000000fe00000000fe00000001fc00000001fc000\
+00003f800000003f800000007f000000007f00000000ff00000000fe0000\
+0001fe00000001fc00000001fc00000003f800000003f800000007f80000\
+0007f000000007f00000000ff00000000fe00000000fe00000001fe00000\
+001fe00000001fc00000003fc00000003fc00000003f800000003f800000\
+007f800000007f800000007f800000007f00000000ff00000000ff000000"
+ self.eightmatrixwid = 40
+ self.eightmatrixhei = 62
+ self.eightmatrixori = 2
+ self.eightmatrix = "ff80000007fff000003ffffe00007fffff0000ffffff8001ffffffc003ff\
+ffffe007ff007ff007fc001ff00ff8000ff80ff00007f80fe00003f81fe0\
+0003fc1fc00001fc1fc00001fc1fc00001fc1fc00001fc1fc00001fc1fc0\
+0001fc1fe00003fc0fe00003f80ff00007f807f8000ff007fe003ff003ff\
+80ffe001ffffffc0007fffff00003ffffe00007ffffe0001ffffff8003ff\
+ffffc007ff00fff00ff8001ff01ff0000ff83fc00003fc3f800001fc7f80\
+0001fe7f000000fe7f000000fefe0000007ffe0000007ffe0000007ffe00\
+00007ffe0000007ffe0000007ffe0000007ffe0000007f7f000000fe7f00\
+0000fe7f800001fe7f800001fe3fc00003fc3fe0000ffc1ff8001ff80ffe\
+00fff007ffffffe007ffffffe001ffffff8000ffffff00003ffffc00000f\
+fff0000000ff0000"
+ self.ninematrixwid = 39
+ self.ninematrixhei = 62
+ self.ninematrixori = 2
+ self.ninematrix = "ffc000000ffff000007ffff80001fffff80007fffff8003ffffff8007fff\
+fff801ff803ff807fe001ff80ff0000ff03fc0000ff07f00001fe1fe0000\
+1fe3f800001fc7f000003f8fe000007f3f8000007f7f000000fefe000001\
+fdfc000003fbf8000007f7f000000fefe000001fffc000003fdfc00000ff\
+bf800001ff7f800007feff00000ffcff00003ff9ff0000fff1ff0007ffe3\
+ff803fffc3ffffffff83fffffeff03fffff9fe03ffffe3fc01ffff07f800\
+fffc0fe0003f801fc00000003f800000007f00000000fe00000003fc0000\
+0007f00000000fe00000001fc7f000007f8fe00000fe0fe00003fc1fc000\
+07f03fc0001fe07fc0007fc07f8001ff00ffc007fc00ffc03ff800ffffff\
+e001ffffff8001fffffe0001fffff80000ffffc000007ffe0000001fc000\
+0"
+ self.tenmatrixwid = 39
+ self.tenmatrixhei = 62
+ self.tenmatrixori = 2
+ self.tenmatrix = "7fc0000007fff000003ffff80000fffff80003fffff8000ffffff8003fff\
+fff800ffe03ff801ff001ff007f8001ff00ff0001fe03fc0001fe07f0000\
+1fc1fe00003fc3f800003f87f000007f0fe00000fe3f800000fe7f000001\
+fcfe000003f9fc000007f3f800000fe7e000000fdfc000001fff8000003f\
+ff0000007ffe000000fffc000001fff8000003fff0000007ffe000000fff\
+c000001fff8000003fff0000007ffe000000fffc000001fff8000003fff0\
+000007ffe000000fefc000001fdfc000007f3f800000fe7f000001fcfe00\
+0003f9fc000007f3f800000fe3f800003f87f000007f0ff00000fe0fe000\
+03f81fc00007f03fc0001fc03fc0007f807fc001ff007fc007fc007fe03f\
+f0007fffffc000ffffff00007ffffc00007ffff000003fff8000000ff800\
+0"
+ self._matrixwid = 51
+ self._matrixhei = 4
+ self._matrixori = 73
+ self._matrix = "fffffffffffffffffffffffffffffffffffffffffffffffffff"
+ self.minusmatrixwid = 20
+ self.minusmatrixhei = 6
+ self.minusmatrixori = 36
+ self.minusmatrix = "ffffffffffffffffffffffffffffff"
+ self.plusmatrixwid = 42
+ self.plusmatrixhei = 42
+ self.plusmatrixori = 21
+ self.plusmatrix = "3f000000000fc000000003f000000000fc000000003f000000000fc00000\
+0003f000000000fc000000003f000000000fc000000003f000000000fc00\
+0000003f000000000fc000000003f000000000fc000000003f000000000f\
+c0000fffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffff00003f000000000fc000000003f000000000fc000000003f0000\
+00000fc000000003f000000000fc000000003f000000000fc000000003f0\
+00000000fc000000003f000000000fc000000003f000000000fc00000000\
+3f000000000fc0000"
+ self.equalmatrixwid = 41
+ self.equalmatrixhei = 21
+ self.equalmatrixori = 32
+ self.equalmatrix = "1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ff8000000000000000000000000000000000000000000000000000000000\
+00000000000000000000000000000000003fffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffff"
+ self.exclmatrixwid = 7
+ self.exclmatrixhei = 62
+ self.exclmatrixori = 0
+ self.exclmatrix = "3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe\
+7cf9f3e7cf9f3e3870e1c3870000000007fffffffffffffff"
+ self.atmatrixwid = 78
+ self.atmatrixhei = 75
+ self.atmatrixori = -1
+ self.atmatrix = "3ffc000000000000001fffff80000000000003ffffffc000000000003fff\
+ffffc00000000007ffffffffc0000000003fffffffffc000000003ffffff\
+ffff800000003fffc000ffff80000001fff000007fff0000000fff000000\
+3ffe000000fff00000003ffc000007ff000000003ff800003ff000000000\
+7ff00001ff80000000007fe0000ffc0000000000ffc0007fc00000000001\
+ff8001fe000000000003fe000ff0000000000007fc007fc000000000000f\
+f801fe000003f800003fe00ff00000fff800007f807f80000ffff03f80ff\
+01fc00007ffff1fc03fc0ff00007ffffc7f007f83f80003ff03fbfc01fe1\
+fe0001ff003ffe003f87f0000ff0007ff800fe1fc0007f8000ffe003fcfe\
+0001fc0003ff0007f3f8000fe00007fc001fcfc0007f80001ff0007f7f00\
+01fc00007fc001fdfc000fe00001fe0007f7f0003f800007f8001fdf8001\
+fe00001fe0007f7e0007f000007f0001fff8001fc00003fc0007ffe0007f\
+00000ff0001fbf8003f800003f8000fefe000fe00000fe0003fbf8003f80\
+0007f8000fefe000fe00001fc0007f3f8003f800007f0001fcfe000fe000\
+03fc000ff3f8003f80000fe0003f8fe000fe00007f8001fe1fc003fc0001\
+fe0007f07f0007f0000ff0003fc1fc001fe0007fc001fe07f8007f8003ff\
+000ff00fe000ff001ffe007fc03fc003fe00fff807fe00ff0007fe0feff8\
+7ff001fe000fffff3fffff8007f8001ffff8fffffc000ff0003fffc1ffff\
+c0003fe0007ffc03fffc00007fc0003f8003ff800001ff80000000000000\
+0003ff000000000000000007fe00000000000000000ffc00000000000000\
+001ffc00000000000000003ff800000000000000007ff800000000000000\
+00fff80000000000000001fffc000003c000000001ffff0001ff80000000\
+03fffffffffe0000000003fffffffff80000000003fffffffff000000000\
+03ffffffff800000000001fffffff0000000000000fffffc000000000000\
+001ffc00000000"
+ self.hashmatrixwid = 45
+ self.hashmatrixhei = 60
+ self.hashmatrixori = 3
+ self.hashmatrix = "7e003f000007f003f800003f801fc00001f800fe00000fc007e000007e00\
+3f000007f003f800003f801fc00001fc00fe00000fc007e000007e003f00\
+0003f001f800003f801fc00001fc00fe00000fc007e000007e003f001fff\
+fffffff8ffffffffffc7fffffffffe3ffffffffff1ffffffffff8fffffff\
+fffc003f801fc00001fc00fe00000fe007f000007e003f000003f001f800\
+001f800fc00001fc00fe00000fe007f000007f003f800003f001f800001f\
+800fc00000fc007e00000fe007f000007f003f800003f001fc007fffffff\
+ffe3ffffffffff1ffffffffff8ffffffffffc7fffffffffe3ffffffffff0\
+00fc007e00000fe003f000007f003f800003f801fc00001f800fe00000fc\
+007e000007e003f000007f003f800003f801fc00001f800fe00000fc007e\
+000007e003f000007f003f800003f801fc00001f800fe00000fc007e0000\
+07e003f0000"
+ self.dollarmatrixwid = 41
+ self.dollarmatrixhei = 77
+ self.dollarmatrixori = -4
+ self.dollarmatrix = "7c000000003e000000001f000000000f8000000007c00000000ffc000000\
+7fffc00000fffff80001ffffff0003ffffffc003fffffff003ffcf8ffc01\
+ff07c1fe01fe03e07f80fe01f01fc0fe00f80ff07f007c03f83f003e01fc\
+3f801f007f1fc00f803f8fe007c01fc7f003e00fe3f801f00001fc00f800\
+00fe007c00007f803e00001fc01f00000ff00f800007fc07c00001ff83e0\
+00007ff1f000003ffff800000ffffe000003fffff00000ffffff00001fff\
+ffe00003fffff800003fffff000003ffffc00000fffff000007c7ff80000\
+3e0ffe00001f01ff00000f807fc00007c01fe00003e007f00001f001f800\
+00f800fffc007c007ffe003e003fff001f001fff800f800fffc007c007ff\
+f003e003f3f801f001f9fc00f801fcff007c00fe3f803e00fe1fe01f00ff\
+0ff80f80ff03ff07c1ff80ffe3e3ff803fffffff800fffffff8003ffffff\
+80007fffff00000ffffe0000007ff000000007c000000003e000000001f0\
+00000000f8000000007c000000003e000000001f000000000f8000000007\
+c0000"
+ self.percentmatrixwid = 71
+ self.percentmatrixhei = 61
+ self.percentmatrixori = 2
+ self.percentmatrix = "1f00000000000000007e0000003fc0000001f8000003fff0000003e00000\
+0ffff800000fc000007ffff800001f000001fffff800007e000007fffff8\
+0000f800000ff81ff80003f000003fc00ff00007c00000ff000ff0001f80\
+0001fc000fe0003e000003f0000fc000fc00000fe0001fc003f000001f80\
+001f8007e000003f00003f001f8000007e00007e003e000000fc0000fc00\
+fc000001f80001f801f0000003f80007f007e0000003f0000fc00f800000\
+07f0003f803f0000000ff000ff00fc0000000ff003fc01f80000000ff81f\
+f007e00000001fffffe00fc00000001fffff803f000000001ffffe007c00\
+0000000ffff001f80000000007ff8003e00000000001fc000fc000000000\
+0000001f00000000000000007e0000000000000001f80007f00000000003\
+f0007ffc000000000fc003fffe000000001f800ffffe000000007e003fff\
+fe00000000f800fffffe00000003f003fe03fe00000007c007f803fc0000\
+001f801fc001fc0000007e003f8003f8000000fc007e0003f0000003f001\
+f80003f0000007e003f00007e000001f8007e0000fc000003f000fc0001f\
+800000fc001f80003f000001f0003f00007e000007e0003f0001f800000f\
+80007f0007f000003f0000fe000fe00000fc0000ff007f800001f80001ff\
+01ff000007e00001fffffc00000fc00001fffff000003f000001ffffc000\
+007e000001ffff000001f8000000fff8000007f00000003f800"
+ self.hatmatrixwid = 32
+ self.hatmatrixhei = 32
+ self.hatmatrixori = 2
+ self.hatmatrix = "7e000000ff000000ff000001ff000001ff800001ff800003ffc00003ffc0\
+0007e7c00007e7e00007c7e0000fc3f0000fc3f0001f81f0001f81f8001f\
+01f8003f00fc003f00fc007e007c007e007e007c007e00fc003f00fc003f\
+01f8001f81f8001f81f0001f83f0000fc3f0000fc7e00007e7e00007efc0\
+0003efc00003f"
+ self.ampmatrixwid = 50
+ self.ampmatrixhei = 62
+ self.ampmatrixori = 2
+ self.ampmatrix = "3fc0000000007ffe000000007fffc00000003ffffc0000001fffff800000\
+0fffffe0000007fc07fc000001fe00ff800000fe001fe000003f8003f800\
+001fc0007f000007f0001fc00001fc0007f000007f0001fc00001fc0007f\
+000007f0001fc00000fe000fe000003f8003f800000ff001fe000001fe00\
+ff0000007f80ffc000000ff07fe0000001fe3ff00000007ffff80000000f\
+fff800000001fffc000000007ffc000000001ffe000000001fff00000000\
+0fffe00000000ffffc00000007feff80000003ff1ff003f801ff07fe00fe\
+00ff80ff803f807fc01ff00fe03fe003fe07f00ff0007fc1fc07f8000ff8\
+7f01fc0003ff3fc07f00007fcfe03f80000ffff80fe00001fffc03f80000\
+3fff00fe000007ff803f800001ffe00fe000003ff003f8000007fc00ff00\
+0001ff801fc00000fff007f800007ffe01ff00003fffc03fe0001ffff00f\
+fc001ffbfe01ffe03ffc7fc07ffffffe0ff80fffffff03ff01ffffff807f\
+c03fffff800ff803ffffc001ff003fff8000000000ff0000000"
+ self.strixmatrixwid = 25
+ self.strixmatrixhei = 24
+ self.strixmatrixori = 0
+ self.strixmatrix = "3e00001f00000f800007c00003e00001f00100f804e07c0efe3e3fffffff\
+fffffffffffff0ffff8007fc0003fe0003ff8001ffc001fbf001f8fc01f8\
+3f01fc1fc0fc07e01c01c00600c0"
+ self.opencparmatrixwid = 18
+ self.opencparmatrixhei = 80
+ self.opencparmatrixori = 0
+ self.opencparmatrix = "3c001f000f8007e001f000f8003e001f000fc003f001f8007e001f000fc0\
+03e001f8007e003f800fc003f001fc007e001f8007e003f800fc003f000f\
+c007f001fc007f001f8007e001f800fe003f800fe003f800fe003f800fe0\
+03f800fe003f800fe003f8007e001f8007e001fc007f001fc003f000fc00\
+3f000fe003f8007e001f8007f000fc003f000fc001f8007e000f8003f000\
+fc001f8007e000f8003f0007c000f8003e0007c001f0003e0007c001f"
+ self.closecparmatrixwid = 18
+ self.closecparmatrixhei = 80
+ self.closecparmatrixori = 0
+ self.closecparmatrix = "f0003e0007c001f8003e0007c001f0007e000fc003f0007e001f8003e000\
+fc003f0007e001f8007f000fc003f000fe001f8007e001f8007f000fc003\
+f000fc003f800fe003f8007e001f8007e001fc007f001fc007f001fc007f\
+001fc007f001fc007f001fc007f001f8007e001f800fe003f800fe003f00\
+0fc003f001fc007f001f8007e003f800fc003f000fc007e001f8007c003f\
+000fc007e001f8007c003f000f8007c001f000f8003e001f000f8003e000"
+ self.opensparmatrixwid = 16
+ self.opensparmatrixhei = 80
+ self.opensparmatrixori = 0
+ self.opensparmatrix = "fffffffffffffffffffffffffe00fe00fe00fe00fe00fe00fe00fe00fe00\
+fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00\
+fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00\
+fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00\
+fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00ffff\
+ffffffffffffffffffff"
+ self.closesparmatrixwid = 16
+ self.closesparmatrixhei = 80
+ self.closesparmatrixori = 0
+ self.closesparmatrix = "ffffffffffffffffffffffff007f007f007f007f007f007f007f007f007f\
+007f007f007f007f007f007f007f007f007f007f007f007f007f007f007f\
+007f007f007f007f007f007f007f007f007f007f007f007f007f007f007f\
+007f007f007f007f007f007f007f007f007f007f007f007f007f007f007f\
+007f007f007f007f007f007f007f007f007f007f007f007f007f007fffff\
+ffffffffffffffffffff"
+ self.backslashmatrixwid = 25
+ self.backslashmatrixhei = 63
+ self.backslashmatrixori = 0
+ self.backslashmatrix = "7c00001e00000f800007c00001e00000f800007c00003e00000f000007c0\
+0003e00000f000007c00003e00000f000007c00003e00000f000007c0000\
+3e00000f000007c00003e00000f000007c00003e00000f000007c00003e0\
+0000f000007c00003e00001f000007800003e00001f000007800003e0000\
+1f000007800003e00001f000007800003e00001f000007800003e00001f0\
+00007800003e00001f000007800003e00001f000007800003e00001f0000\
+0f800003c00001f00000f800003c00001f"
+ self.semicolmatrixwid = 9
+ self.semicolmatrixhei = 57
+ self.semicolmatrixori = 17
+ self.semicolmatrix = "1ffffffffffffffffffff000000000000000000000000000000000000000\
+0000000000000000000001ffffffffffffffffffff0783c1e0f078383c1e\
+1e7e3e1c0"
+ self.postmatrixwid = 8
+ self.postmatrixhei = 21
+ self.postmatrixori = 2
+ self.postmatrix = "ffffffffffffffffffffffff7e7e7e7e7e3c3c3c3c"
+ self.commamatrixwid = 9
+ self.commamatrixhei = 21
+ self.commamatrixori = 53
+ self.commamatrix = "1ffffffffffffffffffff0783c1e0f078383c1e1e7e3e1c0"
+ self.fullstopmatrixwid = 9
+ self.fullstopmatrixhei = 9
+ self.fullstopmatrixori = 53
+ self.fullstopmatrix = "1ffffffffffffffffffff"
+ self.forslashmatrixwid = 25
+ self.forslashmatrixhei = 63
+ self.forslashmatrixori = 0
+ self.forslashmatrix = "7c00003c00003e00001f00000f00000f800007c00003e00001e00001f000\
+00f800007800007c00003e00001e00001f00000f800007800007c00003e0\
+0001e00001f00000f800007800007c00003e00001e00001f00000f800007\
+800007c00003e00001f00000f00000f800007c00003c00003e00001f0000\
+0f00000f800007c00003c00003e00001f00000f00000f800007c00003c00\
+003e00001f00000f00000f800007c00003c00003e00001f00000f8000078\
+00007c00003e00001e00001f00000"
+ self.lesthanmatrixwid = 41
+ self.lesthanmatrixhei = 41
+ self.lesthanmatrixori = 22
+ self.lesthanmatrix = "10000000003800000000fc00000001fe00000007ff0000000fff8000001f\
+ffc000007fff800000ffff000001fffc000007fff800000fffe000001fff\
+c000007fff000000fffe000003fffc000007fff000000fffe0000007ff80\
+000003ff00000001fe00000000ffe00000007ffc0000003fffc0000003ff\
+f80000007fff0000000ffff0000000fffe0000001fffe0000003fffc0000\
+003fff80000007fff8000000ffff0000000ffff0000001fffc0000001ffe\
+00000003ff000000007f8000000007c000000000e0000000001"
+ self.greatthanmatrixwid = 42
+ self.greatthanmatrixhei = 41
+ self.greatthanmatrixori = 22
+ self.greatthanmatrix = "30000000000f0000000003f000000000ff800000003ff80000000fffc000\
+0003fffc0000003fffc0000001fffe0000001fffe0000000fffe0000000f\
+fff0000000ffff00000007fff00000007fff80000003fff80000003fffc0\
+000003fffc0000001fff00000001ffc00000000ff00000001ffc0000001f\
+ff0000003fff8000003fff8000003fff8000007fff0000007fff000000ff\
+ff000000fffe000001fffe000001fffe000003fffc000003fffc000003ff\
+f8000000fff80000003ff80000000ff000000003f000000000f000000000\
+20000000000"
+ self.questionmatrixwid = 36
+ self.questionmatrixhei = 63
+ self.questionmatrixori = -1
+ self.questionmatrix = "7fe000003fffe0000fffff8003fffffc007fffffe00fffffff00fffffff8\
+1ff801ffc3fe0007fc3fc0003fe3f80001fe7f80000fe7f00000ff7f0000\
+07f7e000007ffe000007ffe000007ffe000007ffe000007ffe000007f000\
+0000fe0000000fe0000001fe0000003fc0000003fc0000007f8000000ff0\
+000001ff0000003fe0000007fc000000ff8000001ff0000003fc0000007f\
+8000000ff0000000ff0000001fe0000001fc0000003fc0000003f8000000\
+3f80000003f80000003f80000003f80000003f80000003f8000000000000\
+000000000000000000000000000000000000000000000000000000000000\
+0000003f80000003f80000003f80000003f80000003f80000003f8000000\
+3f80000003f80000003f8000"
+ self.colonmatrixwid = 9
+ self.colonmatrixhei = 45
+ self.colonmatrixori = 17
+ self.colonmatrix = "1ffffffffffffffffffff000000000000000000000000000000000000000\
+0000000000000000000001ffffffffffffffffffff"
+ self.quotematrixwid = 22
+ self.quotematrixhei = 21
+ self.quotematrixori = 2
+ self.quotematrix = "3fc0ffff03fffc0ffff03fffc0ffff03fffc0ffff03fffc0ffff03fffc0f\
+ffffffdf807e7e01f9f807e7e01f9f807e3c00f0f003c3c00f0f003c"
+ self.opensquigmatrixwid = 19
+ self.opensquigmatrixhei = 80
+ self.opensquigmatrixori = 0
+ self.opensquigmatrix = "7e007fc01ff807ff00ffe03ffc07f800fe003f8007f000fe001fc003f800\
+7f000fe001fc003f8007f000fe001fc003f8007f000fe001fc003f8007f0\
+00fe001fc003f8007f000fe001fc007f000fe003fc00ff007fc01ff803fc\
+007f000fe001fe003fe001fe001fe001fc001fc003f8003f0007e000fe00\
+1fc003f8007f000fe001fc003f8007f000fe001fc003f8007f000fe001fc\
+003f8007f000fe001fc003f8007f000fe001fc001fc003fc007ff807ff00\
+ffe00ffc00ff8003f"
+ self.closesquigmatrixwid = 20
+ self.closesquigmatrixhei = 80
+ self.closesquigmatrixori = 0
+ self.closesquigmatrix = "fe000ffc00ffe00fff00fff00fff8007f8003f8001fc001fc001fc001fc0\
+01fc001fc001fc001fc001fc001fc001fc001fc001fc001fc001fc001fc0\
+01fc001fc001fc001fc001fc001fc001fc000fc000fe000fe0007f0007f8\
+003fe001ff000ff0007f0007f000ff001ff003fe007f8007f000fe000fe0\
+00fc001fc001fc001fc001fc001fc001fc001fc001fc001fc001fc001fc0\
+01fc001fc001fc001fc001fc001fc001fc001fc001fc001fc001fc001fc0\
+03f8007f80fff80fff00fff00ffe00ff800fe000"
+ self.barmatrixwid = 5
+ self.barmatrixhei = 80
+ self.barmatrixori = 0
+ self.barmatrix = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffffffffffffffffffffffff"
+ self.miscmatrixwid = 46
+ self.miscmatrixhei = 80
+ self.miscmatrixori = 0
+ self.miscmatrix = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffff8000000007fe000000001ff8000000007fe000000001ff8000\
+000007fe000000001ff8000000007fe000000001ff8000000007fe000000\
+001ff8000000007fe000000001ff8000000007fe000000001ff800000000\
+7fe000000001ff8000000007fe000000001ff8000000007fe000000001ff\
+8000000007fe000000001ff8000000007fe000000001ff8000000007fe00\
+0000001ff8000000007fe000000001ff8000000007fe000000001ff80000\
+00007fe000000001ff8000000007fe000000001ff8000000007fe0000000\
+01ff8000000007fe000000001ff8000000007fe000000001ff8000000007\
+fe000000001ff8000000007fe000000001ff8000000007fe000000001ff8\
+000000007fe000000001ff8000000007fe000000001ff8000000007fe000\
+000001ff8000000007fe000000001ff8000000007fe000000001ff800000\
+0007fe000000001ff8000000007fe000000001ff8000000007fe00000000\
+1ff8000000007fe000000001ff8000000007fe000000001ff8000000007f\
+e000000001ffffffffffffffffffffffffffffffffffffffffffffffffff\
+ffffffffffffffffffff"
+
+ def writea(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.amatrix)
+ charstring = (
+ self.amatrixwid * self.amatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.amatrixwid * self.amatrixhei:
+ charstring = charstring[0 - self.amatrixwid * self.amatrixhei :]
+ for i in range(0, len(charstring), self.amatrixwid):
+ for j in range(i, i + self.amatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.amatrixori
+ - self.amatrixwid
+ + j / self.amatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.amatrixori
+ + j / self.amatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.amatrixori + j / self.amatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.amatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.amatrixori + j / self.amatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.amatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.amatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.amatrixori + j / self.amatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeb(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.bmatrix)
+ charstring = (
+ self.bmatrixwid * self.bmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.bmatrixwid * self.bmatrixhei:
+ charstring = charstring[0 - self.bmatrixwid * self.bmatrixhei :]
+ for i in range(0, len(charstring), self.bmatrixwid):
+ for j in range(i, i + self.bmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.bmatrixori
+ - self.bmatrixwid
+ + j / self.bmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.bmatrixori
+ + j / self.bmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.bmatrixori + j / self.bmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.bmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.bmatrixori + j / self.bmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.bmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.bmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.bmatrixori + j / self.bmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writec(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.cmatrix)
+ charstring = (
+ self.cmatrixwid * self.cmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.cmatrixwid * self.cmatrixhei:
+ charstring = charstring[0 - self.cmatrixwid * self.cmatrixhei :]
+ for i in range(0, len(charstring), self.cmatrixwid):
+ for j in range(i, i + self.cmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.cmatrixori
+ - self.cmatrixwid
+ + j / self.cmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.cmatrixori
+ + j / self.cmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.cmatrixori + j / self.cmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.cmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.cmatrixori + j / self.cmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.cmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.cmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.cmatrixori + j / self.cmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writed(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.dmatrix)
+ charstring = (
+ self.dmatrixwid * self.dmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.dmatrixwid * self.dmatrixhei:
+ charstring = charstring[0 - self.dmatrixwid * self.dmatrixhei :]
+ for i in range(0, len(charstring), self.dmatrixwid):
+ for j in range(i, i + self.dmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.dmatrixori
+ - self.dmatrixwid
+ + j / self.dmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.dmatrixori
+ + j / self.dmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.dmatrixori + j / self.dmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.dmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.dmatrixori + j / self.dmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.dmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.dmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.dmatrixori + j / self.dmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writee(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.ematrix)
+ charstring = (
+ self.ematrixwid * self.ematrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.ematrixwid * self.ematrixhei:
+ charstring = charstring[0 - self.ematrixwid * self.ematrixhei :]
+ for i in range(0, len(charstring), self.ematrixwid):
+ for j in range(i, i + self.ematrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.ematrixori
+ - self.ematrixwid
+ + j / self.ematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.ematrixori
+ + j / self.ematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.ematrixori + j / self.ematrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.ematrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.ematrixori + j / self.ematrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.ematrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.ematrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.ematrixori + j / self.ematrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writef(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.fmatrix)
+ charstring = (
+ self.fmatrixwid * self.fmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.fmatrixwid * self.fmatrixhei:
+ charstring = charstring[0 - self.fmatrixwid * self.fmatrixhei :]
+ for i in range(0, len(charstring), self.fmatrixwid):
+ for j in range(i, i + self.fmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.fmatrixori
+ - self.fmatrixwid
+ + j / self.fmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.fmatrixori
+ + j / self.fmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.fmatrixori + j / self.fmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.fmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.fmatrixori + j / self.fmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.fmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.fmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.fmatrixori + j / self.fmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeg(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.gmatrix)
+ charstring = (
+ self.gmatrixwid * self.gmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.gmatrixwid * self.gmatrixhei:
+ charstring = charstring[0 - self.gmatrixwid * self.gmatrixhei :]
+ for i in range(0, len(charstring), self.gmatrixwid):
+ for j in range(i, i + self.gmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.gmatrixori
+ - self.gmatrixwid
+ + j / self.gmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.gmatrixori
+ + j / self.gmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.gmatrixori + j / self.gmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.gmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.gmatrixori + j / self.gmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.gmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.gmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.gmatrixori + j / self.gmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeh(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.hmatrix)
+ charstring = (
+ self.hmatrixwid * self.hmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.hmatrixwid * self.hmatrixhei:
+ charstring = charstring[0 - self.hmatrixwid * self.hmatrixhei :]
+ for i in range(0, len(charstring), self.hmatrixwid):
+ for j in range(i, i + self.hmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.hmatrixori
+ - self.hmatrixwid
+ + j / self.hmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.hmatrixori
+ + j / self.hmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.hmatrixori + j / self.hmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.hmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.hmatrixori + j / self.hmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.hmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.hmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.hmatrixori + j / self.hmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writei(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.imatrix)
+ charstring = (
+ self.imatrixwid * self.imatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.imatrixwid * self.imatrixhei:
+ charstring = charstring[0 - self.imatrixwid * self.imatrixhei :]
+ for i in range(0, len(charstring), self.imatrixwid):
+ for j in range(i, i + self.imatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.imatrixori
+ - self.imatrixwid
+ + j / self.imatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.imatrixori
+ + j / self.imatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.imatrixori + j / self.imatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.imatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.imatrixori + j / self.imatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.imatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.imatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.imatrixori + j / self.imatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writej(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.jmatrix)
+ charstring = (
+ self.jmatrixwid * self.jmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.jmatrixwid * self.jmatrixhei:
+ charstring = charstring[0 - self.jmatrixwid * self.jmatrixhei :]
+ for i in range(0, len(charstring), self.jmatrixwid):
+ for j in range(i, i + self.jmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.jmatrixori
+ - self.jmatrixwid
+ + j / self.jmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.jmatrixori
+ + j / self.jmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.jmatrixori + j / self.jmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.jmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.jmatrixori + j / self.jmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.jmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.jmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.jmatrixori + j / self.jmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writek(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.kmatrix)
+ charstring = (
+ self.kmatrixwid * self.kmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.kmatrixwid * self.kmatrixhei:
+ charstring = charstring[0 - self.kmatrixwid * self.kmatrixhei :]
+ for i in range(0, len(charstring), self.kmatrixwid):
+ for j in range(i, i + self.kmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.kmatrixori
+ - self.kmatrixwid
+ + j / self.kmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.kmatrixori
+ + j / self.kmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.kmatrixori + j / self.kmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.kmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.kmatrixori + j / self.kmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.kmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.kmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.kmatrixori + j / self.kmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writel(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.lmatrix)
+ charstring = (
+ self.lmatrixwid * self.lmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.lmatrixwid * self.lmatrixhei:
+ charstring = charstring[0 - self.lmatrixwid * self.lmatrixhei :]
+ for i in range(0, len(charstring), self.lmatrixwid):
+ for j in range(i, i + self.lmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.lmatrixori
+ - self.lmatrixwid
+ + j / self.lmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.lmatrixori
+ + j / self.lmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.lmatrixori + j / self.lmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.lmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.lmatrixori + j / self.lmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.lmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.lmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.lmatrixori + j / self.lmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writem(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.mmatrix)
+ charstring = (
+ self.mmatrixwid * self.mmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.mmatrixwid * self.mmatrixhei:
+ charstring = charstring[0 - self.mmatrixwid * self.mmatrixhei :]
+ for i in range(0, len(charstring), self.mmatrixwid):
+ for j in range(i, i + self.mmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.mmatrixori
+ - self.mmatrixwid
+ + j / self.mmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.mmatrixori
+ + j / self.mmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.mmatrixori + j / self.mmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.mmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.mmatrixori + j / self.mmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.mmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.mmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.mmatrixori + j / self.mmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writen(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.nmatrix)
+ charstring = (
+ self.nmatrixwid * self.nmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.nmatrixwid * self.nmatrixhei:
+ charstring = charstring[0 - self.nmatrixwid * self.nmatrixhei :]
+ for i in range(0, len(charstring), self.nmatrixwid):
+ for j in range(i, i + self.nmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.nmatrixori
+ - self.nmatrixwid
+ + j / self.nmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.nmatrixori
+ + j / self.nmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.nmatrixori + j / self.nmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.nmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.nmatrixori + j / self.nmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.nmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.nmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.nmatrixori + j / self.nmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeo(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.omatrix)
+ charstring = (
+ self.omatrixwid * self.omatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.omatrixwid * self.omatrixhei:
+ charstring = charstring[0 - self.omatrixwid * self.omatrixhei :]
+ for i in range(0, len(charstring), self.omatrixwid):
+ for j in range(i, i + self.omatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.omatrixori
+ - self.omatrixwid
+ + j / self.omatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.omatrixori
+ + j / self.omatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.omatrixori + j / self.omatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.omatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.omatrixori + j / self.omatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.omatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.omatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.omatrixori + j / self.omatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writep(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.pmatrix)
+ charstring = (
+ self.pmatrixwid * self.pmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.pmatrixwid * self.pmatrixhei:
+ charstring = charstring[0 - self.pmatrixwid * self.pmatrixhei :]
+ for i in range(0, len(charstring), self.pmatrixwid):
+ for j in range(i, i + self.pmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.pmatrixori
+ - self.pmatrixwid
+ + j / self.pmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.pmatrixori
+ + j / self.pmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.pmatrixori + j / self.pmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.pmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.pmatrixori + j / self.pmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.pmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.pmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.pmatrixori + j / self.pmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeq(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.qmatrix)
+ charstring = (
+ self.qmatrixwid * self.qmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.qmatrixwid * self.qmatrixhei:
+ charstring = charstring[0 - self.qmatrixwid * self.qmatrixhei :]
+ for i in range(0, len(charstring), self.qmatrixwid):
+ for j in range(i, i + self.qmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.qmatrixori
+ - self.qmatrixwid
+ + j / self.qmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.qmatrixori
+ + j / self.qmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.qmatrixori + j / self.qmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.qmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.qmatrixori + j / self.qmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.qmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.qmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.qmatrixori + j / self.qmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writer(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.rmatrix)
+ charstring = (
+ self.rmatrixwid * self.rmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.rmatrixwid * self.rmatrixhei:
+ charstring = charstring[0 - self.rmatrixwid * self.rmatrixhei :]
+ for i in range(0, len(charstring), self.rmatrixwid):
+ for j in range(i, i + self.rmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.rmatrixori
+ - self.rmatrixwid
+ + j / self.rmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.rmatrixori
+ + j / self.rmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.rmatrixori + j / self.rmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.rmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.rmatrixori + j / self.rmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.rmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.rmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.rmatrixori + j / self.rmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writes(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.smatrix)
+ charstring = (
+ self.smatrixwid * self.smatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.smatrixwid * self.smatrixhei:
+ charstring = charstring[0 - self.smatrixwid * self.smatrixhei :]
+ for i in range(0, len(charstring), self.smatrixwid):
+ for j in range(i, i + self.smatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.smatrixori
+ - self.smatrixwid
+ + j / self.smatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.smatrixori
+ + j / self.smatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.smatrixori + j / self.smatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.smatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.smatrixori + j / self.smatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.smatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.smatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.smatrixori + j / self.smatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writet(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.tmatrix)
+ charstring = (
+ self.tmatrixwid * self.tmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.tmatrixwid * self.tmatrixhei:
+ charstring = charstring[0 - self.tmatrixwid * self.tmatrixhei :]
+ for i in range(0, len(charstring), self.tmatrixwid):
+ for j in range(i, i + self.tmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.tmatrixori
+ - self.tmatrixwid
+ + j / self.tmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.tmatrixori
+ + j / self.tmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.tmatrixori + j / self.tmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.tmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.tmatrixori + j / self.tmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.tmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.tmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.tmatrixori + j / self.tmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeu(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.umatrix)
+ charstring = (
+ self.umatrixwid * self.umatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.umatrixwid * self.umatrixhei:
+ charstring = charstring[0 - self.umatrixwid * self.umatrixhei :]
+ for i in range(0, len(charstring), self.umatrixwid):
+ for j in range(i, i + self.umatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.umatrixori
+ - self.umatrixwid
+ + j / self.umatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.umatrixori
+ + j / self.umatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.umatrixori + j / self.umatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.umatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.umatrixori + j / self.umatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.umatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.umatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.umatrixori + j / self.umatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writev(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.vmatrix)
+ charstring = (
+ self.vmatrixwid * self.vmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.vmatrixwid * self.vmatrixhei:
+ charstring = charstring[0 - self.vmatrixwid * self.vmatrixhei :]
+ for i in range(0, len(charstring), self.vmatrixwid):
+ for j in range(i, i + self.vmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.vmatrixori
+ - self.vmatrixwid
+ + j / self.vmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.vmatrixori
+ + j / self.vmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.vmatrixori + j / self.vmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.vmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.vmatrixori + j / self.vmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.vmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.vmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.vmatrixori + j / self.vmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writew(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.wmatrix)
+ charstring = (
+ self.wmatrixwid * self.wmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.wmatrixwid * self.wmatrixhei:
+ charstring = charstring[0 - self.wmatrixwid * self.wmatrixhei :]
+ for i in range(0, len(charstring), self.wmatrixwid):
+ for j in range(i, i + self.wmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.wmatrixori
+ - self.wmatrixwid
+ + j / self.wmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.wmatrixori
+ + j / self.wmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.wmatrixori + j / self.wmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.wmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.wmatrixori + j / self.wmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.wmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.wmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.wmatrixori + j / self.wmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writex(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.xmatrix)
+ charstring = (
+ self.xmatrixwid * self.xmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.xmatrixwid * self.xmatrixhei:
+ charstring = charstring[0 - self.xmatrixwid * self.xmatrixhei :]
+ for i in range(0, len(charstring), self.xmatrixwid):
+ for j in range(i, i + self.xmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.xmatrixori
+ - self.xmatrixwid
+ + j / self.xmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.xmatrixori
+ + j / self.xmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.xmatrixori + j / self.xmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.xmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.xmatrixori + j / self.xmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.xmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.xmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.xmatrixori + j / self.xmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writey(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.ymatrix)
+ charstring = (
+ self.ymatrixwid * self.ymatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.ymatrixwid * self.ymatrixhei:
+ charstring = charstring[0 - self.ymatrixwid * self.ymatrixhei :]
+ for i in range(0, len(charstring), self.ymatrixwid):
+ for j in range(i, i + self.ymatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.ymatrixori
+ - self.ymatrixwid
+ + j / self.ymatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.ymatrixori
+ + j / self.ymatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.ymatrixori + j / self.ymatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.ymatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.ymatrixori + j / self.ymatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.ymatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.ymatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.ymatrixori + j / self.ymatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writez(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.zmatrix)
+ charstring = (
+ self.zmatrixwid * self.zmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.zmatrixwid * self.zmatrixhei:
+ charstring = charstring[0 - self.zmatrixwid * self.zmatrixhei :]
+ for i in range(0, len(charstring), self.zmatrixwid):
+ for j in range(i, i + self.zmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.zmatrixori
+ - self.zmatrixwid
+ + j / self.zmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.zmatrixori
+ + j / self.zmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.zmatrixori + j / self.zmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.zmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.zmatrixori + j / self.zmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.zmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.zmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.zmatrixori + j / self.zmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeA(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Amatrix)
+ charstring = (
+ self.Amatrixwid * self.Amatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Amatrixwid * self.Amatrixhei:
+ charstring = charstring[0 - self.Amatrixwid * self.Amatrixhei :]
+ for i in range(0, len(charstring), self.Amatrixwid):
+ for j in range(i, i + self.Amatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Amatrixori
+ - self.Amatrixwid
+ + j / self.Amatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Amatrixori
+ + j / self.Amatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Amatrixori + j / self.Amatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Amatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Amatrixori + j / self.Amatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Amatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Amatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Amatrixori + j / self.Amatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeB(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Bmatrix)
+ charstring = (
+ self.Bmatrixwid * self.Bmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Bmatrixwid * self.Bmatrixhei:
+ charstring = charstring[0 - self.Bmatrixwid * self.Bmatrixhei :]
+ for i in range(0, len(charstring), self.Bmatrixwid):
+ for j in range(i, i + self.Bmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Bmatrixori
+ - self.Bmatrixwid
+ + j / self.Bmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Bmatrixori
+ + j / self.Bmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Bmatrixori + j / self.Bmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Bmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Bmatrixori + j / self.Bmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Bmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Bmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Bmatrixori + j / self.Bmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeC(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Cmatrix)
+ charstring = (
+ self.Cmatrixwid * self.Cmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Cmatrixwid * self.Cmatrixhei:
+ charstring = charstring[0 - self.Cmatrixwid * self.Cmatrixhei :]
+ for i in range(0, len(charstring), self.Cmatrixwid):
+ for j in range(i, i + self.Cmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Cmatrixori
+ - self.Cmatrixwid
+ + j / self.Cmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Cmatrixori
+ + j / self.Cmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Cmatrixori + j / self.Cmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Cmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Cmatrixori + j / self.Cmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Cmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Cmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Cmatrixori + j / self.Cmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeD(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Dmatrix)
+ charstring = (
+ self.Dmatrixwid * self.Dmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Dmatrixwid * self.Dmatrixhei:
+ charstring = charstring[0 - self.Dmatrixwid * self.Dmatrixhei :]
+ for i in range(0, len(charstring), self.Dmatrixwid):
+ for j in range(i, i + self.Dmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Dmatrixori
+ - self.Dmatrixwid
+ + j / self.Dmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Dmatrixori
+ + j / self.Dmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Dmatrixori + j / self.Dmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Dmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Dmatrixori + j / self.Dmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Dmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Dmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Dmatrixori + j / self.Dmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeE(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Ematrix)
+ charstring = (
+ self.Ematrixwid * self.Ematrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Ematrixwid * self.Ematrixhei:
+ charstring = charstring[0 - self.Ematrixwid * self.Ematrixhei :]
+ for i in range(0, len(charstring), self.Ematrixwid):
+ for j in range(i, i + self.Ematrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Ematrixori
+ - self.Ematrixwid
+ + j / self.Ematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Ematrixori
+ + j / self.Ematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Ematrixori + j / self.Ematrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Ematrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Ematrixori + j / self.Ematrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Ematrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Ematrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Ematrixori + j / self.Ematrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeF(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Fmatrix)
+ charstring = (
+ self.Fmatrixwid * self.Fmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Fmatrixwid * self.Fmatrixhei:
+ charstring = charstring[0 - self.Fmatrixwid * self.Fmatrixhei :]
+ for i in range(0, len(charstring), self.Fmatrixwid):
+ for j in range(i, i + self.Fmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Fmatrixori
+ - self.Fmatrixwid
+ + j / self.Fmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Fmatrixori
+ + j / self.Fmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Fmatrixori + j / self.Fmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Fmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Fmatrixori + j / self.Fmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Fmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Fmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Fmatrixori + j / self.Fmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeG(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Gmatrix)
+ charstring = (
+ self.Gmatrixwid * self.Gmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Gmatrixwid * self.Gmatrixhei:
+ charstring = charstring[0 - self.Gmatrixwid * self.Gmatrixhei :]
+ for i in range(0, len(charstring), self.Gmatrixwid):
+ for j in range(i, i + self.Gmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Gmatrixori
+ - self.Gmatrixwid
+ + j / self.Gmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Gmatrixori
+ + j / self.Gmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Gmatrixori + j / self.Gmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Gmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Gmatrixori + j / self.Gmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Gmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Gmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Gmatrixori + j / self.Gmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeH(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Hmatrix)
+ charstring = (
+ self.Hmatrixwid * self.Hmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Hmatrixwid * self.Hmatrixhei:
+ charstring = charstring[0 - self.Hmatrixwid * self.Hmatrixhei :]
+ for i in range(0, len(charstring), self.Hmatrixwid):
+ for j in range(i, i + self.Hmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Hmatrixori
+ - self.Hmatrixwid
+ + j / self.Hmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Hmatrixori
+ + j / self.Hmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Hmatrixori + j / self.Hmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Hmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Hmatrixori + j / self.Hmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Hmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Hmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Hmatrixori + j / self.Hmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeI(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Imatrix)
+ charstring = (
+ self.Imatrixwid * self.Imatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Imatrixwid * self.Imatrixhei:
+ charstring = charstring[0 - self.Imatrixwid * self.Imatrixhei :]
+ for i in range(0, len(charstring), self.Imatrixwid):
+ for j in range(i, i + self.Imatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Imatrixori
+ - self.Imatrixwid
+ + j / self.Imatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Imatrixori
+ + j / self.Imatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Imatrixori + j / self.Imatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Imatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Imatrixori + j / self.Imatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Imatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Imatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Imatrixori + j / self.Imatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeJ(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Jmatrix)
+ charstring = (
+ self.Jmatrixwid * self.Jmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Jmatrixwid * self.Jmatrixhei:
+ charstring = charstring[0 - self.Jmatrixwid * self.Jmatrixhei :]
+ for i in range(0, len(charstring), self.Jmatrixwid):
+ for j in range(i, i + self.Jmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Jmatrixori
+ - self.Jmatrixwid
+ + j / self.Jmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Jmatrixori
+ + j / self.Jmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Jmatrixori + j / self.Jmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Jmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Jmatrixori + j / self.Jmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Jmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Jmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Jmatrixori + j / self.Jmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeK(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Kmatrix)
+ charstring = (
+ self.Kmatrixwid * self.Kmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Kmatrixwid * self.Kmatrixhei:
+ charstring = charstring[0 - self.Kmatrixwid * self.Kmatrixhei :]
+ for i in range(0, len(charstring), self.Kmatrixwid):
+ for j in range(i, i + self.Kmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Kmatrixori
+ - self.Kmatrixwid
+ + j / self.Kmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Kmatrixori
+ + j / self.Kmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Kmatrixori + j / self.Kmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Kmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Kmatrixori + j / self.Kmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Kmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Kmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Kmatrixori + j / self.Kmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeL(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Lmatrix)
+ charstring = (
+ self.Lmatrixwid * self.Lmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Lmatrixwid * self.Lmatrixhei:
+ charstring = charstring[0 - self.Lmatrixwid * self.Lmatrixhei :]
+ for i in range(0, len(charstring), self.Lmatrixwid):
+ for j in range(i, i + self.Lmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Lmatrixori
+ - self.Lmatrixwid
+ + j / self.Lmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Lmatrixori
+ + j / self.Lmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Lmatrixori + j / self.Lmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Lmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Lmatrixori + j / self.Lmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Lmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Lmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Lmatrixori + j / self.Lmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeM(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Mmatrix)
+ charstring = (
+ self.Mmatrixwid * self.Mmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Mmatrixwid * self.Mmatrixhei:
+ charstring = charstring[0 - self.Mmatrixwid * self.Mmatrixhei :]
+ for i in range(0, len(charstring), self.Mmatrixwid):
+ for j in range(i, i + self.Mmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Mmatrixori
+ - self.Mmatrixwid
+ + j / self.Mmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Mmatrixori
+ + j / self.Mmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Mmatrixori + j / self.Mmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Mmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Mmatrixori + j / self.Mmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Mmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Mmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Mmatrixori + j / self.Mmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeN(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Nmatrix)
+ charstring = (
+ self.Nmatrixwid * self.Nmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Nmatrixwid * self.Nmatrixhei:
+ charstring = charstring[0 - self.Nmatrixwid * self.Nmatrixhei :]
+ for i in range(0, len(charstring), self.Nmatrixwid):
+ for j in range(i, i + self.Nmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Nmatrixori
+ - self.Nmatrixwid
+ + j / self.Nmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Nmatrixori
+ + j / self.Nmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Nmatrixori + j / self.Nmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Nmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Nmatrixori + j / self.Nmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Nmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Nmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Nmatrixori + j / self.Nmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeO(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Omatrix)
+ charstring = (
+ self.Omatrixwid * self.Omatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Omatrixwid * self.Omatrixhei:
+ charstring = charstring[0 - self.Omatrixwid * self.Omatrixhei :]
+ for i in range(0, len(charstring), self.Omatrixwid):
+ for j in range(i, i + self.Omatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Omatrixori
+ - self.Omatrixwid
+ + j / self.Omatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Omatrixori
+ + j / self.Omatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Omatrixori + j / self.Omatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Omatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Omatrixori + j / self.Omatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Omatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Omatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Omatrixori + j / self.Omatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeP(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Pmatrix)
+ charstring = (
+ self.Pmatrixwid * self.Pmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Pmatrixwid * self.Pmatrixhei:
+ charstring = charstring[0 - self.Pmatrixwid * self.Pmatrixhei :]
+ for i in range(0, len(charstring), self.Pmatrixwid):
+ for j in range(i, i + self.Pmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Pmatrixori
+ - self.Pmatrixwid
+ + j / self.Pmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Pmatrixori
+ + j / self.Pmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Pmatrixori + j / self.Pmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Pmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Pmatrixori + j / self.Pmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Pmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Pmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Pmatrixori + j / self.Pmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeQ(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Qmatrix)
+ charstring = (
+ self.Qmatrixwid * self.Qmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Qmatrixwid * self.Qmatrixhei:
+ charstring = charstring[0 - self.Qmatrixwid * self.Qmatrixhei :]
+ for i in range(0, len(charstring), self.Qmatrixwid):
+ for j in range(i, i + self.Qmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Qmatrixori
+ - self.Qmatrixwid
+ + j / self.Qmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Qmatrixori
+ + j / self.Qmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Qmatrixori + j / self.Qmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Qmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Qmatrixori + j / self.Qmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Qmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Qmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Qmatrixori + j / self.Qmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeR(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Rmatrix)
+ charstring = (
+ self.Rmatrixwid * self.Rmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Rmatrixwid * self.Rmatrixhei:
+ charstring = charstring[0 - self.Rmatrixwid * self.Rmatrixhei :]
+ for i in range(0, len(charstring), self.Rmatrixwid):
+ for j in range(i, i + self.Rmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Rmatrixori
+ - self.Rmatrixwid
+ + j / self.Rmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Rmatrixori
+ + j / self.Rmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Rmatrixori + j / self.Rmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Rmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Rmatrixori + j / self.Rmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Rmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Rmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Rmatrixori + j / self.Rmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeS(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Smatrix)
+ charstring = (
+ self.Smatrixwid * self.Smatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Smatrixwid * self.Smatrixhei:
+ charstring = charstring[0 - self.Smatrixwid * self.Smatrixhei :]
+ for i in range(0, len(charstring), self.Smatrixwid):
+ for j in range(i, i + self.Smatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Smatrixori
+ - self.Smatrixwid
+ + j / self.Smatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Smatrixori
+ + j / self.Smatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Smatrixori + j / self.Smatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Smatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Smatrixori + j / self.Smatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Smatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Smatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Smatrixori + j / self.Smatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeT(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Tmatrix)
+ charstring = (
+ self.Tmatrixwid * self.Tmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Tmatrixwid * self.Tmatrixhei:
+ charstring = charstring[0 - self.Tmatrixwid * self.Tmatrixhei :]
+ for i in range(0, len(charstring), self.Tmatrixwid):
+ for j in range(i, i + self.Tmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Tmatrixori
+ - self.Tmatrixwid
+ + j / self.Tmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Tmatrixori
+ + j / self.Tmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Tmatrixori + j / self.Tmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Tmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Tmatrixori + j / self.Tmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Tmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Tmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Tmatrixori + j / self.Tmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeU(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Umatrix)
+ charstring = (
+ self.Umatrixwid * self.Umatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Umatrixwid * self.Umatrixhei:
+ charstring = charstring[0 - self.Umatrixwid * self.Umatrixhei :]
+ for i in range(0, len(charstring), self.Umatrixwid):
+ for j in range(i, i + self.Umatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Umatrixori
+ - self.Umatrixwid
+ + j / self.Umatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Umatrixori
+ + j / self.Umatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Umatrixori + j / self.Umatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Umatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Umatrixori + j / self.Umatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Umatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Umatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Umatrixori + j / self.Umatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeV(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Vmatrix)
+ charstring = (
+ self.Vmatrixwid * self.Vmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Vmatrixwid * self.Vmatrixhei:
+ charstring = charstring[0 - self.Vmatrixwid * self.Vmatrixhei :]
+ for i in range(0, len(charstring), self.Vmatrixwid):
+ for j in range(i, i + self.Vmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Vmatrixori
+ - self.Vmatrixwid
+ + j / self.Vmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Vmatrixori
+ + j / self.Vmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Vmatrixori + j / self.Vmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Vmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Vmatrixori + j / self.Vmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Vmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Vmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Vmatrixori + j / self.Vmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeW(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Wmatrix)
+ charstring = (
+ self.Wmatrixwid * self.Wmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Wmatrixwid * self.Wmatrixhei:
+ charstring = charstring[0 - self.Wmatrixwid * self.Wmatrixhei :]
+ for i in range(0, len(charstring), self.Wmatrixwid):
+ for j in range(i, i + self.Wmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Wmatrixori
+ - self.Wmatrixwid
+ + j / self.Wmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Wmatrixori
+ + j / self.Wmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Wmatrixori + j / self.Wmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Wmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Wmatrixori + j / self.Wmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Wmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Wmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Wmatrixori + j / self.Wmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeX(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Xmatrix)
+ charstring = (
+ self.Xmatrixwid * self.Xmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Xmatrixwid * self.Xmatrixhei:
+ charstring = charstring[0 - self.Xmatrixwid * self.Xmatrixhei :]
+ for i in range(0, len(charstring), self.Xmatrixwid):
+ for j in range(i, i + self.Xmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Xmatrixori
+ - self.Xmatrixwid
+ + j / self.Xmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Xmatrixori
+ + j / self.Xmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Xmatrixori + j / self.Xmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Xmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Xmatrixori + j / self.Xmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Xmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Xmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Xmatrixori + j / self.Xmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeY(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Ymatrix)
+ charstring = (
+ self.Ymatrixwid * self.Ymatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Ymatrixwid * self.Ymatrixhei:
+ charstring = charstring[0 - self.Ymatrixwid * self.Ymatrixhei :]
+ for i in range(0, len(charstring), self.Ymatrixwid):
+ for j in range(i, i + self.Ymatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Ymatrixori
+ - self.Ymatrixwid
+ + j / self.Ymatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Ymatrixori
+ + j / self.Ymatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Ymatrixori + j / self.Ymatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Ymatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Ymatrixori + j / self.Ymatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Ymatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Ymatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Ymatrixori + j / self.Ymatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeZ(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.Zmatrix)
+ charstring = (
+ self.Zmatrixwid * self.Zmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.Zmatrixwid * self.Zmatrixhei:
+ charstring = charstring[0 - self.Zmatrixwid * self.Zmatrixhei :]
+ for i in range(0, len(charstring), self.Zmatrixwid):
+ for j in range(i, i + self.Zmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.Zmatrixori
+ - self.Zmatrixwid
+ + j / self.Zmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.Zmatrixori
+ + j / self.Zmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.Zmatrixori + j / self.Zmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.Zmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Zmatrixori + j / self.Zmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.Zmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.Zmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.Zmatrixori + j / self.Zmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeone(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.onematrix)
+ charstring = (
+ self.onematrixwid * self.onematrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.onematrixwid * self.onematrixhei:
+ charstring = charstring[0 - self.onematrixwid * self.onematrixhei :]
+ for i in range(0, len(charstring), self.onematrixwid):
+ for j in range(i, i + self.onematrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.onematrixori
+ - self.onematrixwid
+ + j / self.onematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.onematrixori
+ + j / self.onematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.onematrixori + j / self.onematrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.onematrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.onematrixori
+ + j / self.onematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x + int((j % self.onematrixwid) * sizeratio) - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.onematrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.onematrixori
+ + j / self.onematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writetwo(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.twomatrix)
+ charstring = (
+ self.twomatrixwid * self.twomatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.twomatrixwid * self.twomatrixhei:
+ charstring = charstring[0 - self.twomatrixwid * self.twomatrixhei :]
+ for i in range(0, len(charstring), self.twomatrixwid):
+ for j in range(i, i + self.twomatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.twomatrixori
+ - self.twomatrixwid
+ + j / self.twomatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.twomatrixori
+ + j / self.twomatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.twomatrixori + j / self.twomatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.twomatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.twomatrixori
+ + j / self.twomatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x + int((j % self.twomatrixwid) * sizeratio) - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.twomatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.twomatrixori
+ + j / self.twomatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writethree(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.threematrix)
+ charstring = (
+ self.threematrixwid * self.threematrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.threematrixwid * self.threematrixhei:
+ charstring = charstring[0 - self.threematrixwid * self.threematrixhei :]
+ for i in range(0, len(charstring), self.threematrixwid):
+ for j in range(i, i + self.threematrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.threematrixori
+ - self.threematrixwid
+ + j / self.threematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.threematrixori
+ + j / self.threematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.threematrixori + j / self.threematrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.threematrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.threematrixori
+ + j / self.threematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.threematrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.threematrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.threematrixori
+ + j / self.threematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writefour(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.fourmatrix)
+ charstring = (
+ self.fourmatrixwid * self.fourmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.fourmatrixwid * self.fourmatrixhei:
+ charstring = charstring[0 - self.fourmatrixwid * self.fourmatrixhei :]
+ for i in range(0, len(charstring), self.fourmatrixwid):
+ for j in range(i, i + self.fourmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.fourmatrixori
+ - self.fourmatrixwid
+ + j / self.fourmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.fourmatrixori
+ + j / self.fourmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.fourmatrixori + j / self.fourmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.fourmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.fourmatrixori
+ + j / self.fourmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.fourmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.fourmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.fourmatrixori
+ + j / self.fourmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writefive(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.fivematrix)
+ charstring = (
+ self.fivematrixwid * self.fivematrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.fivematrixwid * self.fivematrixhei:
+ charstring = charstring[0 - self.fivematrixwid * self.fivematrixhei :]
+ for i in range(0, len(charstring), self.fivematrixwid):
+ for j in range(i, i + self.fivematrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.fivematrixori
+ - self.fivematrixwid
+ + j / self.fivematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.fivematrixori
+ + j / self.fivematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.fivematrixori + j / self.fivematrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.fivematrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.fivematrixori
+ + j / self.fivematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.fivematrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.fivematrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.fivematrixori
+ + j / self.fivematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writesix(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.sixmatrix)
+ charstring = (
+ self.sixmatrixwid * self.sixmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.sixmatrixwid * self.sixmatrixhei:
+ charstring = charstring[0 - self.sixmatrixwid * self.sixmatrixhei :]
+ for i in range(0, len(charstring), self.sixmatrixwid):
+ for j in range(i, i + self.sixmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.sixmatrixori
+ - self.sixmatrixwid
+ + j / self.sixmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.sixmatrixori
+ + j / self.sixmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.sixmatrixori + j / self.sixmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.sixmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.sixmatrixori
+ + j / self.sixmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x + int((j % self.sixmatrixwid) * sizeratio) - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.sixmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.sixmatrixori
+ + j / self.sixmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeseven(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.sevenmatrix)
+ charstring = (
+ self.sevenmatrixwid * self.sevenmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.sevenmatrixwid * self.sevenmatrixhei:
+ charstring = charstring[0 - self.sevenmatrixwid * self.sevenmatrixhei :]
+ for i in range(0, len(charstring), self.sevenmatrixwid):
+ for j in range(i, i + self.sevenmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.sevenmatrixori
+ - self.sevenmatrixwid
+ + j / self.sevenmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.sevenmatrixori
+ + j / self.sevenmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.sevenmatrixori + j / self.sevenmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.sevenmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.sevenmatrixori
+ + j / self.sevenmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.sevenmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.sevenmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.sevenmatrixori
+ + j / self.sevenmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeeight(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.eightmatrix)
+ charstring = (
+ self.eightmatrixwid * self.eightmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.eightmatrixwid * self.eightmatrixhei:
+ charstring = charstring[0 - self.eightmatrixwid * self.eightmatrixhei :]
+ for i in range(0, len(charstring), self.eightmatrixwid):
+ for j in range(i, i + self.eightmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.eightmatrixori
+ - self.eightmatrixwid
+ + j / self.eightmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.eightmatrixori
+ + j / self.eightmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.eightmatrixori + j / self.eightmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.eightmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.eightmatrixori
+ + j / self.eightmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.eightmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.eightmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.eightmatrixori
+ + j / self.eightmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writenine(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.ninematrix)
+ charstring = (
+ self.ninematrixwid * self.ninematrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.ninematrixwid * self.ninematrixhei:
+ charstring = charstring[0 - self.ninematrixwid * self.ninematrixhei :]
+ for i in range(0, len(charstring), self.ninematrixwid):
+ for j in range(i, i + self.ninematrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.ninematrixori
+ - self.ninematrixwid
+ + j / self.ninematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.ninematrixori
+ + j / self.ninematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.ninematrixori + j / self.ninematrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.ninematrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.ninematrixori
+ + j / self.ninematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.ninematrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.ninematrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.ninematrixori
+ + j / self.ninematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeten(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.tenmatrix)
+ charstring = (
+ self.tenmatrixwid * self.tenmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.tenmatrixwid * self.tenmatrixhei:
+ charstring = charstring[0 - self.tenmatrixwid * self.tenmatrixhei :]
+ for i in range(0, len(charstring), self.tenmatrixwid):
+ for j in range(i, i + self.tenmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.tenmatrixori
+ - self.tenmatrixwid
+ + j / self.tenmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.tenmatrixori
+ + j / self.tenmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.tenmatrixori + j / self.tenmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.tenmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.tenmatrixori
+ + j / self.tenmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x + int((j % self.tenmatrixwid) * sizeratio) - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.tenmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.tenmatrixori
+ + j / self.tenmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def write_(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self._matrix)
+ charstring = (
+ self._matrixwid * self._matrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self._matrixwid * self._matrixhei:
+ charstring = charstring[0 - self._matrixwid * self._matrixhei :]
+ for i in range(0, len(charstring), self._matrixwid):
+ for j in range(i, i + self._matrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self._matrixori
+ - self._matrixwid
+ + j / self._matrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self._matrixori
+ + j / self._matrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self._matrixori + j / self._matrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self._matrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self._matrixori + j / self._matrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self._matrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self._matrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self._matrixori + j / self._matrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeminus(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.minusmatrix)
+ charstring = (
+ self.minusmatrixwid * self.minusmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.minusmatrixwid * self.minusmatrixhei:
+ charstring = charstring[0 - self.minusmatrixwid * self.minusmatrixhei :]
+ for i in range(0, len(charstring), self.minusmatrixwid):
+ for j in range(i, i + self.minusmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.minusmatrixori
+ - self.minusmatrixwid
+ + j / self.minusmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.minusmatrixori
+ + j / self.minusmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.minusmatrixori + j / self.minusmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.minusmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.minusmatrixori
+ + j / self.minusmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.minusmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.minusmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.minusmatrixori
+ + j / self.minusmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeplus(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.plusmatrix)
+ charstring = (
+ self.plusmatrixwid * self.plusmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.plusmatrixwid * self.plusmatrixhei:
+ charstring = charstring[0 - self.plusmatrixwid * self.plusmatrixhei :]
+ for i in range(0, len(charstring), self.plusmatrixwid):
+ for j in range(i, i + self.plusmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.plusmatrixori
+ - self.plusmatrixwid
+ + j / self.plusmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.plusmatrixori
+ + j / self.plusmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.plusmatrixori + j / self.plusmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.plusmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.plusmatrixori
+ + j / self.plusmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.plusmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.plusmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.plusmatrixori
+ + j / self.plusmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeequal(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.equalmatrix)
+ charstring = (
+ self.equalmatrixwid * self.equalmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.equalmatrixwid * self.equalmatrixhei:
+ charstring = charstring[0 - self.equalmatrixwid * self.equalmatrixhei :]
+ for i in range(0, len(charstring), self.equalmatrixwid):
+ for j in range(i, i + self.equalmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.equalmatrixori
+ - self.equalmatrixwid
+ + j / self.equalmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.equalmatrixori
+ + j / self.equalmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.equalmatrixori + j / self.equalmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.equalmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.equalmatrixori
+ + j / self.equalmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.equalmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.equalmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.equalmatrixori
+ + j / self.equalmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeexcl(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.exclmatrix)
+ charstring = (
+ self.exclmatrixwid * self.exclmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.exclmatrixwid * self.exclmatrixhei:
+ charstring = charstring[0 - self.exclmatrixwid * self.exclmatrixhei :]
+ for i in range(0, len(charstring), self.exclmatrixwid):
+ for j in range(i, i + self.exclmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.exclmatrixori
+ - self.exclmatrixwid
+ + j / self.exclmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.exclmatrixori
+ + j / self.exclmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.exclmatrixori + j / self.exclmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.exclmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.exclmatrixori
+ + j / self.exclmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.exclmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.exclmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.exclmatrixori
+ + j / self.exclmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeat(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.atmatrix)
+ charstring = (
+ self.atmatrixwid * self.atmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.atmatrixwid * self.atmatrixhei:
+ charstring = charstring[0 - self.atmatrixwid * self.atmatrixhei :]
+ for i in range(0, len(charstring), self.atmatrixwid):
+ for j in range(i, i + self.atmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.atmatrixori
+ - self.atmatrixwid
+ + j / self.atmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.atmatrixori
+ + j / self.atmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.atmatrixori + j / self.atmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.atmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (self.atmatrixori + j / self.atmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (x + int((j % self.atmatrixwid) * sizeratio) - k),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.atmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (self.atmatrixori + j / self.atmatrixwid)
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writehash(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.hashmatrix)
+ charstring = (
+ self.hashmatrixwid * self.hashmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.hashmatrixwid * self.hashmatrixhei:
+ charstring = charstring[0 - self.hashmatrixwid * self.hashmatrixhei :]
+ for i in range(0, len(charstring), self.hashmatrixwid):
+ for j in range(i, i + self.hashmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.hashmatrixori
+ - self.hashmatrixwid
+ + j / self.hashmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.hashmatrixori
+ + j / self.hashmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.hashmatrixori + j / self.hashmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.hashmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.hashmatrixori
+ + j / self.hashmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.hashmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.hashmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.hashmatrixori
+ + j / self.hashmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writedollar(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.dollarmatrix)
+ charstring = (
+ self.dollarmatrixwid * self.dollarmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.dollarmatrixwid * self.dollarmatrixhei:
+ charstring = charstring[0 - self.dollarmatrixwid * self.dollarmatrixhei :]
+ for i in range(0, len(charstring), self.dollarmatrixwid):
+ for j in range(i, i + self.dollarmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.dollarmatrixori
+ - self.dollarmatrixwid
+ + j / self.dollarmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.dollarmatrixori
+ + j / self.dollarmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.dollarmatrixori
+ + j / self.dollarmatrixwid
+ )
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.dollarmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.dollarmatrixori
+ + j / self.dollarmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.dollarmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.dollarmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.dollarmatrixori
+ + j / self.dollarmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writepercent(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.percentmatrix)
+ charstring = (
+ self.percentmatrixwid * self.percentmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.percentmatrixwid * self.percentmatrixhei:
+ charstring = charstring[0 - self.percentmatrixwid * self.percentmatrixhei :]
+ for i in range(0, len(charstring), self.percentmatrixwid):
+ for j in range(i, i + self.percentmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.percentmatrixori
+ - self.percentmatrixwid
+ + j / self.percentmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.percentmatrixori
+ + j / self.percentmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.percentmatrixori
+ + j / self.percentmatrixwid
+ )
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x
+ + int((j % self.percentmatrixwid) * sizeratio)
+ - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.percentmatrixori
+ + j / self.percentmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.percentmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x
+ + int((j % self.percentmatrixwid) * sizeratio)
+ - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.percentmatrixori
+ + j / self.percentmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writehat(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.hatmatrix)
+ charstring = (
+ self.hatmatrixwid * self.hatmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.hatmatrixwid * self.hatmatrixhei:
+ charstring = charstring[0 - self.hatmatrixwid * self.hatmatrixhei :]
+ for i in range(0, len(charstring), self.hatmatrixwid):
+ for j in range(i, i + self.hatmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.hatmatrixori
+ - self.hatmatrixwid
+ + j / self.hatmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.hatmatrixori
+ + j / self.hatmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.hatmatrixori + j / self.hatmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.hatmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.hatmatrixori
+ + j / self.hatmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x + int((j % self.hatmatrixwid) * sizeratio) - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.hatmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.hatmatrixori
+ + j / self.hatmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeamp(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.ampmatrix)
+ charstring = (
+ self.ampmatrixwid * self.ampmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.ampmatrixwid * self.ampmatrixhei:
+ charstring = charstring[0 - self.ampmatrixwid * self.ampmatrixhei :]
+ for i in range(0, len(charstring), self.ampmatrixwid):
+ for j in range(i, i + self.ampmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.ampmatrixori
+ - self.ampmatrixwid
+ + j / self.ampmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.ampmatrixori
+ + j / self.ampmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.ampmatrixori + j / self.ampmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.ampmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.ampmatrixori
+ + j / self.ampmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x + int((j % self.ampmatrixwid) * sizeratio) - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.ampmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.ampmatrixori
+ + j / self.ampmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writestrix(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.strixmatrix)
+ charstring = (
+ self.strixmatrixwid * self.strixmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.strixmatrixwid * self.strixmatrixhei:
+ charstring = charstring[0 - self.strixmatrixwid * self.strixmatrixhei :]
+ for i in range(0, len(charstring), self.strixmatrixwid):
+ for j in range(i, i + self.strixmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.strixmatrixori
+ - self.strixmatrixwid
+ + j / self.strixmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.strixmatrixori
+ + j / self.strixmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.strixmatrixori + j / self.strixmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.strixmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.strixmatrixori
+ + j / self.strixmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.strixmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.strixmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.strixmatrixori
+ + j / self.strixmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeopencpar(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.opencparmatrix)
+ charstring = (
+ self.opencparmatrixwid * self.opencparmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.opencparmatrixwid * self.opencparmatrixhei:
+ charstring = charstring[
+ 0 - self.opencparmatrixwid * self.opencparmatrixhei :
+ ]
+ for i in range(0, len(charstring), self.opencparmatrixwid):
+ for j in range(i, i + self.opencparmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.opencparmatrixori
+ - self.opencparmatrixwid
+ + j / self.opencparmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.opencparmatrixori
+ + j / self.opencparmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.opencparmatrixori
+ + j / self.opencparmatrixwid
+ )
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x
+ + int((j % self.opencparmatrixwid) * sizeratio)
+ - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.opencparmatrixori
+ + j / self.opencparmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.opencparmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x
+ + int((j % self.opencparmatrixwid) * sizeratio)
+ - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.opencparmatrixori
+ + j / self.opencparmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeclosecpar(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.closecparmatrix)
+ charstring = (
+ self.closecparmatrixwid * self.closecparmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.closecparmatrixwid * self.closecparmatrixhei:
+ charstring = charstring[
+ 0 - self.closecparmatrixwid * self.closecparmatrixhei :
+ ]
+ for i in range(0, len(charstring), self.closecparmatrixwid):
+ for j in range(i, i + self.closecparmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.closecparmatrixori
+ - self.closecparmatrixwid
+ + j / self.closecparmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.closecparmatrixori
+ + j / self.closecparmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.closecparmatrixori
+ + j / self.closecparmatrixwid
+ )
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x
+ + int((j % self.closecparmatrixwid) * sizeratio)
+ - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.closecparmatrixori
+ + j / self.closecparmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.closecparmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x
+ + int((j % self.closecparmatrixwid) * sizeratio)
+ - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.closecparmatrixori
+ + j / self.closecparmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeopenspar(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.opensparmatrix)
+ charstring = (
+ self.opensparmatrixwid * self.opensparmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.opensparmatrixwid * self.opensparmatrixhei:
+ charstring = charstring[
+ 0 - self.opensparmatrixwid * self.opensparmatrixhei :
+ ]
+ for i in range(0, len(charstring), self.opensparmatrixwid):
+ for j in range(i, i + self.opensparmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.opensparmatrixori
+ - self.opensparmatrixwid
+ + j / self.opensparmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.opensparmatrixori
+ + j / self.opensparmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.opensparmatrixori
+ + j / self.opensparmatrixwid
+ )
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x
+ + int((j % self.opensparmatrixwid) * sizeratio)
+ - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.opensparmatrixori
+ + j / self.opensparmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.opensparmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x
+ + int((j % self.opensparmatrixwid) * sizeratio)
+ - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.opensparmatrixori
+ + j / self.opensparmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeclosespar(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.closesparmatrix)
+ charstring = (
+ self.closesparmatrixwid * self.closesparmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.closesparmatrixwid * self.closesparmatrixhei:
+ charstring = charstring[
+ 0 - self.closesparmatrixwid * self.closesparmatrixhei :
+ ]
+ for i in range(0, len(charstring), self.closesparmatrixwid):
+ for j in range(i, i + self.closesparmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.closesparmatrixori
+ - self.closesparmatrixwid
+ + j / self.closesparmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.closesparmatrixori
+ + j / self.closesparmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.closesparmatrixori
+ + j / self.closesparmatrixwid
+ )
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x
+ + int((j % self.closesparmatrixwid) * sizeratio)
+ - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.closesparmatrixori
+ + j / self.closesparmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.closesparmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x
+ + int((j % self.closesparmatrixwid) * sizeratio)
+ - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.closesparmatrixori
+ + j / self.closesparmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writebackslash(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.backslashmatrix)
+ charstring = (
+ self.backslashmatrixwid * self.backslashmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.backslashmatrixwid * self.backslashmatrixhei:
+ charstring = charstring[
+ 0 - self.backslashmatrixwid * self.backslashmatrixhei :
+ ]
+ for i in range(0, len(charstring), self.backslashmatrixwid):
+ for j in range(i, i + self.backslashmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.backslashmatrixori
+ - self.backslashmatrixwid
+ + j / self.backslashmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.backslashmatrixori
+ + j / self.backslashmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.backslashmatrixori
+ + j / self.backslashmatrixwid
+ )
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x
+ + int((j % self.backslashmatrixwid) * sizeratio)
+ - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.backslashmatrixori
+ + j / self.backslashmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.backslashmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x
+ + int((j % self.backslashmatrixwid) * sizeratio)
+ - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.backslashmatrixori
+ + j / self.backslashmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writesemicol(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.semicolmatrix)
+ charstring = (
+ self.semicolmatrixwid * self.semicolmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.semicolmatrixwid * self.semicolmatrixhei:
+ charstring = charstring[0 - self.semicolmatrixwid * self.semicolmatrixhei :]
+ for i in range(0, len(charstring), self.semicolmatrixwid):
+ for j in range(i, i + self.semicolmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.semicolmatrixori
+ - self.semicolmatrixwid
+ + j / self.semicolmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.semicolmatrixori
+ + j / self.semicolmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.semicolmatrixori
+ + j / self.semicolmatrixwid
+ )
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x
+ + int((j % self.semicolmatrixwid) * sizeratio)
+ - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.semicolmatrixori
+ + j / self.semicolmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.semicolmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x
+ + int((j % self.semicolmatrixwid) * sizeratio)
+ - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.semicolmatrixori
+ + j / self.semicolmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writepost(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.postmatrix)
+ charstring = (
+ self.postmatrixwid * self.postmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.postmatrixwid * self.postmatrixhei:
+ charstring = charstring[0 - self.postmatrixwid * self.postmatrixhei :]
+ for i in range(0, len(charstring), self.postmatrixwid):
+ for j in range(i, i + self.postmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.postmatrixori
+ - self.postmatrixwid
+ + j / self.postmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.postmatrixori
+ + j / self.postmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.postmatrixori + j / self.postmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.postmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.postmatrixori
+ + j / self.postmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.postmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.postmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.postmatrixori
+ + j / self.postmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writecomma(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.commamatrix)
+ charstring = (
+ self.commamatrixwid * self.commamatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.commamatrixwid * self.commamatrixhei:
+ charstring = charstring[0 - self.commamatrixwid * self.commamatrixhei :]
+ for i in range(0, len(charstring), self.commamatrixwid):
+ for j in range(i, i + self.commamatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.commamatrixori
+ - self.commamatrixwid
+ + j / self.commamatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.commamatrixori
+ + j / self.commamatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.commamatrixori + j / self.commamatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.commamatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.commamatrixori
+ + j / self.commamatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.commamatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.commamatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.commamatrixori
+ + j / self.commamatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writefullstop(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.fullstopmatrix)
+ charstring = (
+ self.fullstopmatrixwid * self.fullstopmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.fullstopmatrixwid * self.fullstopmatrixhei:
+ charstring = charstring[
+ 0 - self.fullstopmatrixwid * self.fullstopmatrixhei :
+ ]
+ for i in range(0, len(charstring), self.fullstopmatrixwid):
+ for j in range(i, i + self.fullstopmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.fullstopmatrixori
+ - self.fullstopmatrixwid
+ + j / self.fullstopmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.fullstopmatrixori
+ + j / self.fullstopmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.fullstopmatrixori
+ + j / self.fullstopmatrixwid
+ )
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x
+ + int((j % self.fullstopmatrixwid) * sizeratio)
+ - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.fullstopmatrixori
+ + j / self.fullstopmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.fullstopmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x
+ + int((j % self.fullstopmatrixwid) * sizeratio)
+ - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.fullstopmatrixori
+ + j / self.fullstopmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeforslash(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.forslashmatrix)
+ charstring = (
+ self.forslashmatrixwid * self.forslashmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.forslashmatrixwid * self.forslashmatrixhei:
+ charstring = charstring[
+ 0 - self.forslashmatrixwid * self.forslashmatrixhei :
+ ]
+ for i in range(0, len(charstring), self.forslashmatrixwid):
+ for j in range(i, i + self.forslashmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.forslashmatrixori
+ - self.forslashmatrixwid
+ + j / self.forslashmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.forslashmatrixori
+ + j / self.forslashmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.forslashmatrixori
+ + j / self.forslashmatrixwid
+ )
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x
+ + int((j % self.forslashmatrixwid) * sizeratio)
+ - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.forslashmatrixori
+ + j / self.forslashmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.forslashmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x
+ + int((j % self.forslashmatrixwid) * sizeratio)
+ - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.forslashmatrixori
+ + j / self.forslashmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writelesthan(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.lesthanmatrix)
+ charstring = (
+ self.lesthanmatrixwid * self.lesthanmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.lesthanmatrixwid * self.lesthanmatrixhei:
+ charstring = charstring[0 - self.lesthanmatrixwid * self.lesthanmatrixhei :]
+ for i in range(0, len(charstring), self.lesthanmatrixwid):
+ for j in range(i, i + self.lesthanmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.lesthanmatrixori
+ - self.lesthanmatrixwid
+ + j / self.lesthanmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.lesthanmatrixori
+ + j / self.lesthanmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.lesthanmatrixori
+ + j / self.lesthanmatrixwid
+ )
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x
+ + int((j % self.lesthanmatrixwid) * sizeratio)
+ - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.lesthanmatrixori
+ + j / self.lesthanmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.lesthanmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x
+ + int((j % self.lesthanmatrixwid) * sizeratio)
+ - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.lesthanmatrixori
+ + j / self.lesthanmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writegreatthan(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.greatthanmatrix)
+ charstring = (
+ self.greatthanmatrixwid * self.greatthanmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.greatthanmatrixwid * self.greatthanmatrixhei:
+ charstring = charstring[
+ 0 - self.greatthanmatrixwid * self.greatthanmatrixhei :
+ ]
+ for i in range(0, len(charstring), self.greatthanmatrixwid):
+ for j in range(i, i + self.greatthanmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.greatthanmatrixori
+ - self.greatthanmatrixwid
+ + j / self.greatthanmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.greatthanmatrixori
+ + j / self.greatthanmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.greatthanmatrixori
+ + j / self.greatthanmatrixwid
+ )
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x
+ + int((j % self.greatthanmatrixwid) * sizeratio)
+ - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.greatthanmatrixori
+ + j / self.greatthanmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.greatthanmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x
+ + int((j % self.greatthanmatrixwid) * sizeratio)
+ - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.greatthanmatrixori
+ + j / self.greatthanmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writequestion(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.questionmatrix)
+ charstring = (
+ self.questionmatrixwid * self.questionmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.questionmatrixwid * self.questionmatrixhei:
+ charstring = charstring[
+ 0 - self.questionmatrixwid * self.questionmatrixhei :
+ ]
+ for i in range(0, len(charstring), self.questionmatrixwid):
+ for j in range(i, i + self.questionmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.questionmatrixori
+ - self.questionmatrixwid
+ + j / self.questionmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.questionmatrixori
+ + j / self.questionmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.questionmatrixori
+ + j / self.questionmatrixwid
+ )
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x
+ + int((j % self.questionmatrixwid) * sizeratio)
+ - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.questionmatrixori
+ + j / self.questionmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.questionmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x
+ + int((j % self.questionmatrixwid) * sizeratio)
+ - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.questionmatrixori
+ + j / self.questionmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writecolon(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.colonmatrix)
+ charstring = (
+ self.colonmatrixwid * self.colonmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.colonmatrixwid * self.colonmatrixhei:
+ charstring = charstring[0 - self.colonmatrixwid * self.colonmatrixhei :]
+ for i in range(0, len(charstring), self.colonmatrixwid):
+ for j in range(i, i + self.colonmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.colonmatrixori
+ - self.colonmatrixwid
+ + j / self.colonmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.colonmatrixori
+ + j / self.colonmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.colonmatrixori + j / self.colonmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.colonmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.colonmatrixori
+ + j / self.colonmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.colonmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.colonmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.colonmatrixori
+ + j / self.colonmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writequote(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.quotematrix)
+ charstring = (
+ self.quotematrixwid * self.quotematrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.quotematrixwid * self.quotematrixhei:
+ charstring = charstring[0 - self.quotematrixwid * self.quotematrixhei :]
+ for i in range(0, len(charstring), self.quotematrixwid):
+ for j in range(i, i + self.quotematrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.quotematrixori
+ - self.quotematrixwid
+ + j / self.quotematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.quotematrixori
+ + j / self.quotematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.quotematrixori + j / self.quotematrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.quotematrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.quotematrixori
+ + j / self.quotematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.quotematrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.quotematrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.quotematrixori
+ + j / self.quotematrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeopensquig(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.opensquigmatrix)
+ charstring = (
+ self.opensquigmatrixwid * self.opensquigmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.opensquigmatrixwid * self.opensquigmatrixhei:
+ charstring = charstring[
+ 0 - self.opensquigmatrixwid * self.opensquigmatrixhei :
+ ]
+ for i in range(0, len(charstring), self.opensquigmatrixwid):
+ for j in range(i, i + self.opensquigmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.opensquigmatrixori
+ - self.opensquigmatrixwid
+ + j / self.opensquigmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.opensquigmatrixori
+ + j / self.opensquigmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.opensquigmatrixori
+ + j / self.opensquigmatrixwid
+ )
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x
+ + int((j % self.opensquigmatrixwid) * sizeratio)
+ - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.opensquigmatrixori
+ + j / self.opensquigmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.opensquigmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x
+ + int((j % self.opensquigmatrixwid) * sizeratio)
+ - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.opensquigmatrixori
+ + j / self.opensquigmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeclosesquig(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.closesquigmatrix)
+ charstring = (
+ self.closesquigmatrixwid * self.closesquigmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.closesquigmatrixwid * self.closesquigmatrixhei:
+ charstring = charstring[
+ 0 - self.closesquigmatrixwid * self.closesquigmatrixhei :
+ ]
+ for i in range(0, len(charstring), self.closesquigmatrixwid):
+ for j in range(i, i + self.closesquigmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.closesquigmatrixori
+ - self.closesquigmatrixwid
+ + j / self.closesquigmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.closesquigmatrixori
+ + j / self.closesquigmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.closesquigmatrixori
+ + j / self.closesquigmatrixwid
+ )
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x
+ + int((j % self.closesquigmatrixwid) * sizeratio)
+ - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.closesquigmatrixori
+ + j / self.closesquigmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int(
+ (j % self.closesquigmatrixwid) * sizeratio
+ )
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x
+ + int((j % self.closesquigmatrixwid) * sizeratio)
+ - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.closesquigmatrixori
+ + j / self.closesquigmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writebar(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.barmatrix)
+ charstring = (
+ self.barmatrixwid * self.barmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.barmatrixwid * self.barmatrixhei:
+ charstring = charstring[0 - self.barmatrixwid * self.barmatrixhei :]
+ for i in range(0, len(charstring), self.barmatrixwid):
+ for j in range(i, i + self.barmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.barmatrixori
+ - self.barmatrixwid
+ + j / self.barmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.barmatrixori
+ + j / self.barmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.barmatrixori + j / self.barmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.barmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.barmatrixori
+ + j / self.barmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x + int((j % self.barmatrixwid) * sizeratio) - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.barmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.barmatrixori
+ + j / self.barmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writemisc(self, x, y, size, ital, bold, sans, rotate):
+ xpos = x
+ sizeratio = size * 1.0 / self.defsize
+ sizeint = (size - 1) / self.defsize + 1
+ if bold:
+ sizeint = sizeint + 2 + int(sizeratio)
+ charstring = binar(self.miscmatrix)
+ charstring = (
+ self.miscmatrixwid * self.miscmatrixhei - len(charstring)
+ ) * "0" + charstring
+ if len(charstring) > self.miscmatrixwid * self.miscmatrixhei:
+ charstring = charstring[0 - self.miscmatrixwid * self.miscmatrixhei :]
+ for i in range(0, len(charstring), self.miscmatrixwid):
+ for j in range(i, i + self.miscmatrixwid):
+ if charstring[j] == "1":
+ for k in range(sizeint):
+ for l in range(sizeint):
+ if ital and rotate == -1:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ (
+ self.miscmatrixori
+ - self.miscmatrixwid
+ + j / self.miscmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ elif ital:
+ x = (
+ xpos
+ + (
+ int(
+ (
+ self.defsize
+ - (
+ self.miscmatrixori
+ + j / self.miscmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l
+ )
+ / 3
+ )
+ if rotate == 1:
+ self.plotPoint(
+ y
+ + int(
+ (self.miscmatrixori + j / self.miscmatrixwid)
+ * sizeratio
+ )
+ - l
+ - self.defsize,
+ x + int((j % self.miscmatrixwid) * sizeratio) - k,
+ )
+ elif rotate == -1:
+ self.plotPoint(
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.miscmatrixori
+ + j / self.miscmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ 2 * x
+ - (
+ x
+ + int((j % self.miscmatrixwid) * sizeratio)
+ - k
+ ),
+ )
+ else:
+ self.plotPoint(
+ x + int((j % self.miscmatrixwid) * sizeratio) - k,
+ y
+ + int(
+ (
+ self.defsize
+ - (
+ self.miscmatrixori
+ + j / self.miscmatrixwid
+ )
+ )
+ * sizeratio
+ )
+ - l,
+ )
+
+ def writeString(
+ self, thestring, x, y, size, ital=False, bold=False, rotate=0, justify="left"
+ ):
+ xpos = x
+ if rotate != 0:
+ xpos, y = y, xpos
+ if justify == "right":
+ xpos -= self.lengthString(thestring, size)
+ for i in thestring:
+ if i == "a":
+ self.writea(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.amatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.amatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "b":
+ self.writeb(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.bmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.bmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "c":
+ self.writec(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.cmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.cmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "d":
+ self.writed(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.dmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.dmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "e":
+ self.writee(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.ematrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.ematrixwid * size / self.defsize + 1 + size / 20
+ elif i == "f":
+ self.writef(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.fmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.fmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "g":
+ self.writeg(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.gmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.gmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "h":
+ self.writeh(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.hmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.hmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "i":
+ self.writei(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.imatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.imatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "j":
+ self.writej(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.jmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.jmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "k":
+ self.writek(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.kmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.kmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "l":
+ self.writel(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.lmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.lmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "m":
+ self.writem(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.mmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.mmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "n":
+ self.writen(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.nmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.nmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "o":
+ self.writeo(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.omatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.omatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "p":
+ self.writep(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.pmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.pmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "q":
+ self.writeq(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.qmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.qmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "r":
+ self.writer(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.rmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.rmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "s":
+ self.writes(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.smatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.smatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "t":
+ self.writet(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.tmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.tmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "u":
+ self.writeu(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.umatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.umatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "v":
+ self.writev(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.vmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.vmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "w":
+ self.writew(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.wmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.wmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "x":
+ self.writex(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.xmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.xmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "y":
+ self.writey(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.ymatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.ymatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "z":
+ self.writez(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.zmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.zmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "A":
+ self.writeA(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Amatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Amatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "B":
+ self.writeB(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Bmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Bmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "C":
+ self.writeC(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Cmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Cmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "D":
+ self.writeD(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Dmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Dmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "E":
+ self.writeE(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Ematrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Ematrixwid * size / self.defsize + 1 + size / 20
+ elif i == "F":
+ self.writeF(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Fmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Fmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "G":
+ self.writeG(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Gmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Gmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "H":
+ self.writeH(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Hmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Hmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "I":
+ self.writeI(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Imatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Imatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "J":
+ self.writeJ(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Jmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Jmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "K":
+ self.writeK(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Kmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Kmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "L":
+ self.writeL(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Lmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Lmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "M":
+ self.writeM(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Mmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Mmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "N":
+ self.writeN(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Nmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Nmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "O":
+ self.writeO(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Omatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Omatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "P":
+ self.writeP(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Pmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Pmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "Q":
+ self.writeQ(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Qmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Qmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "R":
+ self.writeR(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Rmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Rmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "S":
+ self.writeS(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Smatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Smatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "T":
+ self.writeT(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Tmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Tmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "U":
+ self.writeU(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Umatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Umatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "V":
+ self.writeV(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Vmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Vmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "W":
+ self.writeW(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Wmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Wmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "X":
+ self.writeX(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Xmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Xmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "Y":
+ self.writeY(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Ymatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Ymatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "Z":
+ self.writeZ(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.Zmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.Zmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "1":
+ self.writeone(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.onematrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.onematrixwid * size / self.defsize + 1 + size / 20
+ elif i == "2":
+ self.writetwo(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.twomatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.twomatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "3":
+ self.writethree(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.threematrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.threematrixwid * size / self.defsize + 1 + size / 20
+ elif i == "4":
+ self.writefour(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.fourmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.fourmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "5":
+ self.writefive(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.fivematrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.fivematrixwid * size / self.defsize + 1 + size / 20
+ elif i == "6":
+ self.writesix(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.sixmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.sixmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "7":
+ self.writeseven(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.sevenmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.sevenmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "8":
+ self.writeeight(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.eightmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.eightmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "9":
+ self.writenine(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.ninematrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.ninematrixwid * size / self.defsize + 1 + size / 20
+ elif i == "0":
+ self.writeten(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.tenmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.tenmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "_":
+ self.write_(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self._matrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self._matrixwid * size / self.defsize + 1 + size / 20
+ elif i == "-":
+ self.writeminus(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.minusmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.minusmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "+":
+ self.writeplus(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.plusmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.plusmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "=":
+ self.writeequal(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.equalmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.equalmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "!":
+ self.writeexcl(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.exclmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.exclmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "@":
+ self.writeat(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.atmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.atmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "#":
+ self.writehash(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.hashmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.hashmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "$":
+ self.writedollar(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.dollarmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.dollarmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "%":
+ self.writepercent(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.percentmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.percentmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "^":
+ self.writehat(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.hatmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.hatmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "&":
+ self.writeamp(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.ampmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.ampmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "*":
+ self.writestrix(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.strixmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.strixmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "(":
+ self.writeopencpar(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.opencparmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.opencparmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == ")":
+ self.writeclosecpar(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= (
+ self.closecparmatrixwid * size / self.defsize + 1 + size / 20
+ )
+ else:
+ xpos += (
+ self.closecparmatrixwid * size / self.defsize + 1 + size / 20
+ )
+ elif i == "[":
+ self.writeopenspar(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.opensparmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.opensparmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "]":
+ self.writeclosespar(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= (
+ self.closesparmatrixwid * size / self.defsize + 1 + size / 20
+ )
+ else:
+ xpos += (
+ self.closesparmatrixwid * size / self.defsize + 1 + size / 20
+ )
+ elif i == "\\":
+ self.writebackslash(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= (
+ self.backslashmatrixwid * size / self.defsize + 1 + size / 20
+ )
+ else:
+ xpos += (
+ self.backslashmatrixwid * size / self.defsize + 1 + size / 20
+ )
+ elif i == ";":
+ self.writesemicol(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.semicolmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.semicolmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "'":
+ self.writepost(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.postmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.postmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == ",":
+ self.writecomma(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.commamatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.commamatrixwid * size / self.defsize + 1 + size / 20
+ elif i == ".":
+ self.writefullstop(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.fullstopmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.fullstopmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "/":
+ self.writeforslash(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.forslashmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.forslashmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "<":
+ self.writelesthan(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.lesthanmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.lesthanmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == ">":
+ self.writegreatthan(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= (
+ self.greatthanmatrixwid * size / self.defsize + 1 + size / 20
+ )
+ else:
+ xpos += (
+ self.greatthanmatrixwid * size / self.defsize + 1 + size / 20
+ )
+ elif i == "?":
+ self.writequestion(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.questionmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.questionmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == ":":
+ self.writecolon(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.colonmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.colonmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == '"':
+ self.writequote(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.quotematrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.quotematrixwid * size / self.defsize + 1 + size / 20
+ elif i == "{":
+ self.writeopensquig(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= (
+ self.opensquigmatrixwid * size / self.defsize + 1 + size / 20
+ )
+ else:
+ xpos += (
+ self.opensquigmatrixwid * size / self.defsize + 1 + size / 20
+ )
+ elif i == "}":
+ self.writeclosesquig(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= (
+ self.closesquigmatrixwid * size / self.defsize + 1 + size / 20
+ )
+ else:
+ xpos += (
+ self.closesquigmatrixwid * size / self.defsize + 1 + size / 20
+ )
+ elif i == "|":
+ self.writebar(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.barmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.barmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == " ":
+ if rotate == -1:
+ xpos -= 24 * size / self.defsize + 1 + size / 20
+ else:
+ xpos += 24 * size / self.defsize + 1 + size / 20
+ else:
+ self.writemisc(xpos, y, size, ital, bold, True, rotate)
+ if rotate == -1:
+ xpos -= self.miscmatrixwid * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.miscmatrixwid * size / self.defsize + 1 + size / 20
+
+ def lengthString(self, theString, size):
+ xpos = 0
+ for i in theString:
+ if i == "a":
+ xpos += self.amatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "b":
+ xpos += self.bmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "c":
+ xpos += self.cmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "d":
+ xpos += self.dmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "e":
+ xpos += self.ematrixwid * size / self.defsize + 1 + size / 20
+ elif i == "f":
+ xpos += self.fmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "g":
+ xpos += self.gmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "h":
+ xpos += self.hmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "i":
+ xpos += self.imatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "j":
+ xpos += self.jmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "k":
+ xpos += self.kmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "l":
+ xpos += self.lmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "m":
+ xpos += self.mmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "n":
+ xpos += self.nmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "o":
+ xpos += self.omatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "p":
+ xpos += self.pmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "q":
+ xpos += self.qmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "r":
+ xpos += self.rmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "s":
+ xpos += self.smatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "t":
+ xpos += self.tmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "u":
+ xpos += self.umatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "v":
+ xpos += self.vmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "w":
+ xpos += self.wmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "x":
+ xpos += self.xmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "y":
+ xpos += self.ymatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "z":
+ xpos += self.zmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "A":
+ xpos += self.Amatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "B":
+ xpos += self.Bmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "C":
+ xpos += self.Cmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "D":
+ xpos += self.Dmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "E":
+ xpos += self.Ematrixwid * size / self.defsize + 1 + size / 20
+ elif i == "F":
+ xpos += self.Fmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "G":
+ xpos += self.Gmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "H":
+ xpos += self.Hmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "I":
+ xpos += self.Imatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "J":
+ xpos += self.Jmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "K":
+ xpos += self.Kmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "L":
+ xpos += self.Lmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "M":
+ xpos += self.Mmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "N":
+ xpos += self.Nmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "O":
+ xpos += self.Omatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "P":
+ xpos += self.Pmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "Q":
+ xpos += self.Qmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "R":
+ xpos += self.Rmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "S":
+ xpos += self.Smatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "T":
+ xpos += self.Tmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "U":
+ xpos += self.Umatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "V":
+ xpos += self.Vmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "W":
+ xpos += self.Wmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "X":
+ xpos += self.Xmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "Y":
+ xpos += self.Ymatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "Z":
+ xpos += self.Zmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "1":
+ xpos += self.onematrixwid * size / self.defsize + 1 + size / 20
+ elif i == "2":
+ xpos += self.twomatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "3":
+ xpos += self.threematrixwid * size / self.defsize + 1 + size / 20
+ elif i == "4":
+ xpos += self.fourmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "5":
+ xpos += self.fivematrixwid * size / self.defsize + 1 + size / 20
+ elif i == "6":
+ xpos += self.sixmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "7":
+ xpos += self.sevenmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "8":
+ xpos += self.eightmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "9":
+ xpos += self.ninematrixwid * size / self.defsize + 1 + size / 20
+ elif i == "0":
+ xpos += self.tenmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "_":
+ xpos += self._matrixwid * size / self.defsize + 1 + size / 20
+ elif i == "-":
+ xpos += self.minusmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "+":
+ xpos += self.plusmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "=":
+ xpos += self.equalmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "!":
+ xpos += self.exclmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "@":
+ xpos += self.atmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "#":
+ xpos += self.hashmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "$":
+ xpos += self.dollarmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "%":
+ xpos += self.percentmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "^":
+ xpos += self.hatmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "&":
+ xpos += self.ampmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "*":
+ xpos += self.strixmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "(":
+ xpos += self.opencparmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == ")":
+ xpos += self.closecparmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "[":
+ xpos += self.opensparmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "]":
+ xpos += self.closesparmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "\\":
+ xpos += self.backslashmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == ";":
+ xpos += self.semicolmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "'":
+ xpos += self.postmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == ",":
+ xpos += self.commamatrixwid * size / self.defsize + 1 + size / 20
+ elif i == ".":
+ xpos += self.fullstopmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "/":
+ xpos += self.forslashmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "<":
+ xpos += self.lesthanmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == ">":
+ xpos += self.greatthanmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "?":
+ xpos += self.questionmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == ":":
+ xpos += self.colonmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == '"':
+ xpos += self.quotematrixwid * size / self.defsize + 1 + size / 20
+ elif i == "{":
+ xpos += self.opensquigmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "}":
+ xpos += self.closesquigmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == "|":
+ xpos += self.barmatrixwid * size / self.defsize + 1 + size / 20
+ elif i == " ":
+ xpos += 24 * size / self.defsize + 1 + size / 20
+ else:
+ xpos += self.miscmatrixwid * size / self.defsize + 1 + size / 20
+ return xpos
+
+ def setDefaultPenColor(self):
+ self.currentPen = self.fg
+
+ def setPenColor(self, p):
+ oldColor = self.currentPen
+ # look for c in palette
+ pnum = p.toLong()
+ try:
+ self.currentPen = self.palette.index(pnum)
+ except ValueError:
+ if len(self.palette) < 256:
+ self.palette.append(pnum)
+ self.currentPen = len(self.palette) - 1
+ else:
+ self.currentPen = self.fg
+
+ return Color.fromLong(self.palette[oldColor])
+
+ def getPenColor(self):
+ return Color.fromLong(self.palette[self.currentPen])
+
+ def plotPoint(self, x, y):
+ if 0 <= x < self.wd and 0 <= y < self.ht:
+ x = int(x)
+ y = int(y)
+ self.bitarray[y][x] = self.currentPen
+
+ def drawOutRect(self, x, y, wid, ht, lt):
+ if wid == 1:
+ if lt != 0:
+ temp = self.getPenColor()
+ self.setPenColor(Color.BLACK)
+ self.drawLine(x, y, x, y + ht - 1)
+ self.setPenColor(temp)
+ else:
+ self.drawLine(x, y, x, y + ht - 1)
+ else:
+ if lt > wid / 2 and lt != 1:
+ lt = wid / 2
+ if lt > ht / 2 and lt != 1:
+ lt = ht / 2
+ self.drawRect(x, y, wid, ht, True)
+ temp = self.getPenColor()
+ self.setPenColor(Color.BLACK)
+ for i in range(lt):
+ self.drawRect(x + i, y + i, wid - i, ht - i)
+ self.setPenColor(temp)
+
+ def drawRect(self, x, y, wid, ht, fill=False):
+ x = int(x)
+ y = int(y)
+ cury = y
+
+ # subtract one for line width
+ wid -= 1
+ ht -= 1
+
+ self.drawLine(x, y, x + wid, y)
+ if fill:
+ cury = y
+ while cury < y + ht:
+ self.drawLine(x, cury, x + wid, cury)
+ cury += 1
+ else:
+ self.drawLine(x, y, x, y + ht)
+ self.drawLine(x + wid, y, x + wid, y + ht)
+ self.drawLine(x, y + ht, x + wid, y + ht)
+
+ def drawSquare(self, x, y, wid, fill=False):
+ self.drawRect(x, y, wid, wid, fill)
+
+ def drawDash(self, x1, y1, x2, y2, wid=1, dashl=3, dashg=3):
+ currX = x1
+ currY = y1
+ if x1 == x2:
+ for i in range(wid):
+ currY = y1
+ while (y1 < y2 and currY + dashl < y2) or (
+ y1 > y2 and currY - dashl > y2
+ ):
+ if y1 < y2:
+ self.drawLine(currX, currY, currX, currY + dashl)
+ currY = currY + dashl + dashg
+ else:
+ self.drawLine(currX, currY, currX, currY - dashl)
+ currY = currY - dashl - dashg
+ if (y1 < y2 and currY < y2) or (y2 < y1 and currY > y2):
+ self.drawLine(currX, currY, currX, y2)
+ currX -= 1
+ elif y1 == y2:
+ for i in range(wid):
+ currX = x1
+ while (x1 < x2 and currX + dashl < x2) or (
+ x1 > x2 and currX - dashl > x1
+ ):
+ if x1 < x2:
+ self.drawLine(currX, currY, currX + dashl, currY)
+ currX = currX + dashl + dashg
+ else:
+ self.drawLine(currX, currY, currX - dashl, currY)
+ currX = currX - dashl - dashg
+ if (x1 < x2 and currX < x2) or (x2 < x1 and currX > x2):
+ self.drawLine(currX, currY, x2, currY)
+ currY -= 1
+ else:
+ ratio = abs(x1 - x2) * 1.0 / abs(y1 - y2)
+ while (x1 < x2 and currX + dashl * min([ratio, 1]) < x2) or (
+ x1 > x2 and currX - dashl * min([ratio, 1]) > x2
+ ):
+ if ratio > 1:
+ if x1 < x2:
+ nextX = currX + dashl
+ currXt = currX + dashl + dashg
+ else:
+ nextX = currX - dashl
+ currXt = currX - dashl - dashg
+ if y1 < y2:
+ nextY = currY + dashl / ratio
+ currYt = currY + (dashl + dashg) / ratio
+ else:
+ nextY = currY - dashl / ratio
+ currYt = currY - (dashl + dashg) / ratio
+ else:
+ if x1 < x2:
+ nextX = currX + dashl * ratio
+ currXt = currX + (dashl + dashg) * ratio
+ else:
+ nextX = currX - dashl * ratio
+ currXt = currX - (dashl + dashg) * ratio
+ if y1 < y2:
+ nextY = currY + dashl
+ currYt = currY + dashl + dashg
+ else:
+ nextY = currY - dashl
+ currYt = currY - (dashl + dashg)
+ self.drawLine(currX, currY, nextX, nextY)
+ currX = currXt
+ currY = currYt
+ if currX + dashl * min([ratio, 1]) < x2:
+ self.drawLine(currX, currY, x2, y2)
+
+ def drawRightArrow(self, x, y, wid, ht, lt, outline=True):
+ if lt > ht / 2:
+ lt = ht / 2
+ x1 = x + wid
+ y1 = y + ht / 2
+ x2 = x + wid - ht / 2
+ ht -= 1
+ if wid > ht / 2:
+ for i in range(y, y + ht + 1):
+ self.drawLine(x2, i, x1, y1)
+ self.drawRect(x, y + ht / 4, wid - ht / 2, ht / 2, True)
+ if outline:
+ temp = self.getPenColor()
+ self.setPenColor(Color.BLACK)
+ for i in range(lt):
+ self.drawLine(x + i, y + ht / 4 + i, x2 + i, y + ht / 4 + i)
+ self.drawLine(x2 + i, y + ht / 4 + i, x2 + i, y + i * 2)
+ self.drawLine(x2 + i, y + i * 2, x1 - i, y1)
+ self.drawLine(x1 - i, y1, x2 + i, y + ht - i * 2)
+ self.drawLine(
+ x2 + i, y + ht - i * 2, x2 + i, y + ht / 4 + ht / 2 - i
+ )
+ self.drawLine(
+ x2 + i, y + ht / 4 + ht / 2 - i, x + i, y + ht / 4 + ht / 2 - i
+ )
+ self.drawLine(x + i, y + ht / 4 + ht / 2 - i, x + i, y + ht / 4 + i)
+ self.setPenColor(temp)
+ else:
+ for i in range(y, y + ht + 1):
+ self.drawLine(x, i, x1, y1)
+ if outline and lt != 0:
+ temp = self.getPenColor()
+ self.setPenColor(Color.BLACK)
+ for i in range(lt):
+ self.drawLine(x, y + ht - i, x1 - i, y1)
+ self.drawLine(x, y + i, x1 - i, y1)
+ if x1 != x:
+ crapliney1 = (y1 - y) / (x1 - x) * (x + i - x + 1) + y
+ crapliney2 = y + ht - (y1 - y) / (x1 - x) * (x + i - x + 1)
+ self.drawLine(x + i, crapliney1, x + i, crapliney2)
+ self.setPenColor(temp)
+
+ def drawLeftArrow(self, x, y, wid, ht, lt, outline=True):
+ if lt > ht / 2:
+ lt = ht / 2
+ y1 = y + (ht / 2)
+ x1 = x + wid
+ x2 = x + ht / 2
+ ht -= 1
+ if wid > ht / 2:
+ for i in range(y, y + ht + 1):
+ self.drawLine(x, y1, x2, i)
+ self.drawRect(x2, y + ht / 4, wid - ht / 2, ht / 2, True)
+ if outline:
+ temp = self.getPenColor()
+ self.setPenColor(Color.BLACK)
+ for i in range(lt):
+ self.drawLine(x + i, y1, x2 - i, y + i * 2)
+ self.drawLine(x2 - i, y + i * 2, x2 - i, y + ht / 4 + i)
+ self.drawLine(x2 - i, y + ht / 4 + i, x1 - i, y + ht / 4 + i)
+ self.drawLine(
+ x1 - i, y + ht / 4 + i, x1 - i, y + ht / 4 + ht / 2 - i
+ )
+ self.drawLine(
+ x1 - i, y + ht / 4 + ht / 2 - i, x2 - i, y + ht / 4 + ht / 2 - i
+ )
+ self.drawLine(
+ x2 - i, y + ht / 4 + ht / 2 - i, x2 - i, y + ht - i * 2
+ )
+ self.drawLine(x2 - i, y + ht - i * 2, x + i, y1)
+ self.setPenColor(temp)
+ else:
+ if lt > wid / 2:
+ lt = wid / 2
+ for i in range(y, y + ht + 1):
+ self.drawLine(x, y1, x1, i)
+ if outline and lt != 0:
+ temp = self.getPenColor()
+ self.setPenColor(Color.BLACK)
+ for i in range(lt):
+ self.drawLine(x + i, y1, x1, y + i)
+ if x1 != x:
+ crapliney1 = (y1 - y) / (x1 - x) * (x + i - x + 1) + y
+ crapliney2 = y + ht - (y1 - y) / (x1 - x) * (x + i - x + 1)
+ self.drawLine(x1 - i, crapliney1, x1 - i, crapliney2)
+ self.drawLine(x1, y + ht - i, x + i, y1)
+ self.setPenColor(temp)
+
+ def drawRightFrame(self, x, y, wid, ht, lt, frame, outline=True):
+ if lt > ht / 2:
+ lt = ht / 2
+ if frame == 1:
+ y1 = y + ht / 2
+ y2 = y + ht * 5 / 8
+ y3 = y + ht * 3 / 4
+ elif frame == 2:
+ y1 = y + ht * 5 / 8
+ y2 = y + ht * 3 / 4
+ y3 = y + ht * 7 / 8
+ elif frame == 0:
+ y1 = y + ht * 3 / 4
+ y2 = y + ht * 7 / 8
+ y3 = y + ht - 1
+ x1 = x
+ x2 = x + wid - ht / 8
+ x3 = x + wid
+ if wid > ht / 8:
+ for i in range(y1, y3 + 1):
+ self.drawLine(x1, i, x2, i)
+ self.drawLine(x2, i, x3, y2)
+ if outline:
+ temp = self.getPenColor()
+ self.setPenColor(Color.BLACK)
+ for i in range(lt):
+ self.drawLine(x1, y1 + i, x2, y1 + i)
+ self.drawLine(x2, y1 + i, x3 - i, y2)
+ self.drawLine(x3 - i, y2, x2, y3 - i)
+ self.drawLine(x2, y3 - i, x1, y3 - i)
+ self.drawLine(x1 + i, y3 - i, x1 + i, y1 + i)
+ self.setPenColor(temp)
+ else:
+ for i in range(y1, y3 + 1):
+ self.drawLine(x1, i, x3, y2)
+ if outline:
+ temp = self.getPenColor()
+ self.setPenColor(Color.BLACK)
+ self.drawLine(x1, y1, x3, y2)
+ self.drawLine(x3, y2, x1, y3)
+ self.drawLine(x1, y1, x1, y3)
+ self.setPenColor(temp)
+
+ def drawRightFrameRect(self, x, y, wid, ht, lt, frame, outline=True):
+ if lt > ht / 2:
+ lt = ht / 2
+ if frame == 1:
+ y1 = y + ht / 2
+ y3 = y + ht * 3 / 4
+ elif frame == 2:
+ y1 = y + ht * 5 / 8
+ y3 = y + ht * 7 / 8
+ elif frame == 0:
+ y1 = y + ht * 3 / 4
+ y3 = y + ht - 1
+ x1 = x
+ x2 = x + wid
+ for i in range(y1, y3 + 1):
+ self.drawLine(x1, i, x2, i)
+ if outline:
+ temp = self.getPenColor()
+ self.setPenColor(Color.BLACK)
+ for i in range(lt):
+ self.drawLine(x1, y1 + i, x2, y1 + i)
+ self.drawLine(x2, y1 + i, x2 - i, y3)
+ self.drawLine(x2, y3 - i, x1, y3 - i)
+ self.drawLine(x1 + i, y3 - i, x1 + i, y1 + i)
+ self.setPenColor(temp)
+
+ def drawLeftFrame(self, x, y, wid, ht, lt, frame, outline=True):
+ if lt > ht / 2:
+ lt = ht / 2
+ if frame == 1:
+ y1 = y
+ y2 = y + ht / 8
+ y3 = y + ht / 4
+ elif frame == 2:
+ y1 = y + ht / 8
+ y2 = y + ht / 4
+ y3 = y + ht * 3 / 8
+ elif frame == 0:
+ y1 = y + ht / 4
+ y2 = y + ht * 3 / 8
+ y3 = y + ht / 2
+ x1 = x + wid
+ x2 = x + ht / 8
+ x3 = x
+ if wid > ht / 8:
+ for i in range(y1, y3 + 1):
+ self.drawLine(x1, i, x2, i)
+ self.drawLine(x2, i, x3, y2)
+ if outline:
+ temp = self.getPenColor()
+ self.setPenColor(Color.BLACK)
+ for i in range(lt):
+ self.drawLine(x1, y1 + i, x2, y1 + i)
+ self.drawLine(x2, y1 + i, x3 - i, y2)
+ self.drawLine(x3 - i, y2, x2, y3 - i)
+ self.drawLine(x2, y3 - i, x1, y3 - i)
+ self.drawLine(x1 + i, y3 - i, x1 + i, y1 + i)
+ self.setPenColor(temp)
+ else:
+ for i in range(y1, y3 + 1):
+ self.drawLine(x1, i, x3, y2)
+ if outline:
+ temp = self.getPenColor()
+ self.setPenColor(Color.BLACK)
+ self.drawLine(x1, y1, x3, y2)
+ self.drawLine(x3, y2, x1, y3)
+ self.drawLine(x1, y1, x1, y3)
+ self.setPenColor(temp)
+
+ def drawLeftFrameRect(self, x, y, wid, ht, lt, frame, outline=True):
+ if lt > ht / 2:
+ lt = ht / 2
+ if frame == 1:
+ y1 = y
+ y3 = y + ht / 4
+ elif frame == 2:
+ y1 = y + ht / 8
+ y3 = y + ht * 3 / 8
+ elif frame == 0:
+ y1 = y + ht / 4
+ y3 = y + ht / 2
+ x1 = x + wid
+ x2 = x
+ for i in range(y1, y3 + 1):
+ self.drawLine(x1, i, x2, i)
+ if outline:
+ temp = self.getPenColor()
+ self.setPenColor(Color.BLACK)
+ for i in range(lt):
+ self.drawLine(x1, y1 + i, x2, y1 + i)
+ self.drawLine(x2 - i, y1, x2 - i, y3)
+ self.drawLine(x2, y3 - i, x1, y3 - i)
+ self.drawLine(x1 + i, y3, x1 + i, y1)
+ self.setPenColor(temp)
+
+ def drawPointer(self, x, y, ht, lt, outline=True):
+ x1 = x - int(round(0.577350269 * ht / 2))
+ x2 = x + int(round(0.577350269 * ht / 2))
+ y1 = y + ht / 2
+ y2 = y + ht - 1
+ for i in range(x1, x2 + 1):
+ self.drawLine(i, y2, x, y1)
+ if outline:
+ temp = self.getPenColor()
+ self.setPenColor(Color.BLACK)
+ self.drawLine(x, y1, x1, y2)
+ self.drawLine(x, y1, x2, y2)
+ self.drawLine(x1, y2, x2, y2)
+ self.setPenColor(temp)
+
+ def bresLine(x, y, x2, y2):
+ """Bresenham line algorithm"""
+ steep = 0
+ coords = []
+ dx = int(abs(x2 - x) + 0.5)
+ if (x2 - x) > 0:
+ sx = 1
+ else:
+ sx = -1
+ dy = int(abs(y2 - y) + 0.5)
+ if (y2 - y) > 0:
+ sy = 1
+ else:
+ sy = -1
+ if dy > dx:
+ steep = 1
+ x, y = y, x
+ dx, dy = dy, dx
+ sx, sy = sy, sx
+ dx2 = dx * 2
+ dy2 = dy * 2
+ d = dy2 - dx
+ for i in range(0, dx):
+ coords.append((x, y))
+ while d >= 0:
+ y += sy
+ d -= dx2
+ x += sx
+ d += dy2
+
+ if steep: # transpose x's and y's
+ coords = [(c[1], c[0]) for c in coords]
+
+ coords.append((x2, y2))
+
+ return coords
+
+ bresLine = staticmethod(bresLine)
+
+ def _drawLine(self, x1, y1, x2, y2):
+ # special checks for vert and horiz lines
+ if x1 == x2:
+ if 0 <= x1 < self.wd:
+ if y2 < y1:
+ y1, y2 = y2, y1
+ cury = max(y1, 0)
+ maxy = min(y2, self.ht - 1)
+ while cury <= maxy:
+ self.plotPoint(x1, cury)
+ cury += 1
+ return
+
+ if y1 == y2:
+ if 0 <= y1 < self.ht:
+ if x2 < x1:
+ x1, x2 = x2, x1
+ curx = max(x1, 0)
+ maxx = min(x2, self.wd - 1)
+ while curx <= maxx:
+ self.plotPoint(curx, y1)
+ curx += 1
+ return
+
+ for pt in BitMap.bresLine(x1, y1, x2, y2):
+ self.plotPoint(pt[0], pt[1])
+
+ def _drawLines(self, lineSegs):
+ for x1, y1, x2, y2 in lineSegs:
+ self._drawLine(x1, y1, x2, y2)
+
+ def drawLine(self, x1, y1, x2, y2, type=LINE_SOLID):
+ if type == BitMap.LINE_SOLID:
+ self._drawLine(x1, y1, x2, y2)
+ elif type == BitMap.LINE_DASHED:
+ # how many segs?
+ len = hypot(x2 - x1, y2 - y1)
+ numsegs = len / BitMap._DASH_LEN
+ dx = (x2 - x1) / numsegs
+ dy = (y2 - y1) / numsegs
+ dx2 = dx / 2.0
+ dy2 = dy / 2.0
+ if x2 < x1:
+ x1, x2 = x2, x1
+ y1, y2 = y2, y1
+ segs = []
+ curx = x1
+ cury = y1
+ for i in range(int(numsegs)):
+ segs.append((curx, cury, curx + dx2, cury + dy2))
+ curx += dx
+ cury += dy
+ if curx + dx2 > x2:
+ segs.append((curx, cury, x2, y2))
+ else:
+ segs.append((curx, cury, curx + dx2, cury + dy2))
+ self._drawLines(segs)
+ elif type == BitMap.LINE_DOTTED:
+ len = hypot(x2 - x1, y2 - y1)
+ numsegs = len / BitMap._DOT_LEN
+ dx = (x2 - x1) / numsegs
+ dy = (y2 - y1) / numsegs
+ dx2 = dx / 2.0
+ dy2 = dy / 2.0
+ if x2 < x1:
+ x1, x2 = x2, x1
+ y1, y2 = y2, y1
+ segs = []
+ curx = x1
+ cury = y1
+ for i in range(int(numsegs)):
+ segs.append((curx, cury, curx + dx2, cury + dy2))
+ curx += dx
+ cury += dy
+ if curx + dx2 > x2:
+ segs.append((curx, cury, x2, y2))
+ else:
+ segs.append((curx, cury, curx + dx2, cury + dy2))
+ self._drawLines(segs)
+ elif type == BitMap.LINE_DOT_DASH:
+ len = hypot(x2 - x1, y2 - y1)
+ numsegs = len / BitMap._DOT_DASH_LEN
+ dx = (x2 - x1) / numsegs
+ dy = (y2 - y1) / numsegs
+ dx3 = dx / 3.0
+ dy3 = dy / 3.0
+ dx23 = 0.62 * dx
+ dy23 = 0.62 * dy
+ dx56 = 0.78 * dx
+ dy56 = 0.78 * dy
+ if x2 < x1:
+ x1, x2 = x2, x1
+ y1, y2 = y2, y1
+ segs = []
+ curx = x1
+ cury = y1
+ for i in range(int(numsegs)):
+ segs.append((curx, cury, curx + dx3, cury + dy3))
+ segs.append((curx + dx23, cury + dy23, curx + dx56, cury + dy56))
+ curx += dx
+ cury += dy
+ if curx + dx3 > x2:
+ segs.append((curx, cury, x2, y2))
+ else:
+ segs.append((curx, cury, curx + dx3, cury + dy3))
+ if curx + dx23 < x2:
+ if curx + dx56 > x2:
+ segs.append((curx + dx23, cury + dy23, x2, y2))
+ else:
+ segs.append(
+ (curx + dx23, cury + dy23, curx + dx56, cury + dy56)
+ )
+ else:
+ pass # segs.append( ( curx, cury, curx + dx3, cury + dy3 ) )
+ segs.append((curx, cury, x2, y2))
+ self._drawLines(segs)
+
+ def drawCircle(self, cx, cy, r, fill=False):
+ x = 0
+ y = r
+ d = 1 - r
+
+ self.plotPoint(cx, cy + y)
+ self.plotPoint(cx, cy - y)
+ if fill:
+ self.drawLine(cx - y, cy, cx + y, cy)
+ else:
+ self.plotPoint(cx + y, cy)
+ self.plotPoint(cx - y, cy)
+
+ while y > x:
+ if d < 0:
+ d += 2 * x + 3
+ else:
+ d += 2 * (x - y) + 5
+ y -= 1
+ x += 1
+
+ if fill:
+ self.drawLine(cx + x - 1, cy + y, cx - x + 1, cy + y)
+ self.drawLine(cx - x + 1, cy - y, cx + x - 1, cy - y)
+ self.drawLine(cx + y - 1, cy + x, cx - y + 1, cy + x)
+ self.drawLine(cx - y + 1, cy - x, cx + y - 1, cy - x)
+ else:
+ self.plotPoint(cx + x, cy + y)
+ self.plotPoint(cx + y, cy + x)
+ self.plotPoint(cx - x, cy - y)
+ self.plotPoint(cx - y, cy - x)
+ self.plotPoint(cx + x, cy - y)
+ self.plotPoint(cx - y, cy + x)
+ self.plotPoint(cx - x, cy + y)
+ self.plotPoint(cx + y, cy - x)
+
+ # method for creating gif string
+ def createGIFString(self, oneistone):
+ if not oneistone:
+ if self.wd > 1000:
+ modifier = 1000.0 / self.wd
+ self.wd = 1000
+ self.ht = int(self.ht * modifier)
+ else:
+ oneistone = True
+ binarystring = "GIF89a" # header
+ binarystring += (
+ struct.pack("h", self.wd)
+ + struct.pack("h", self.ht)
+ + chr(int("10010110", 2))
+ + "\x00\x00"
+ )
+ if len(self.palette) <= 128:
+ for i in self.palette:
+ colour = Color.fromLong(i)
+ binarystring += chr(colour.red) + chr(colour.grn) + chr(colour.blu)
+ for i in range(128 - len(self.palette)):
+ binarystring += chr(255) + chr(255) + chr(255)
+ else:
+ for i in range(8): # 128 colour table
+ for j in range(4):
+ for k in range(4):
+ binarystring += chr(int(i * 36.5)) + chr(j * 85) + chr(k * 85)
+ binarystring += (
+ ",\x00\x00\x00\x00"
+ + struct.pack("h", self.wd)
+ + struct.pack("h", self.ht)
+ + "\x00"
+ ) # image descriptor
+ binarystring += "\x07" # LZW Minimum code size
+ pixstring = ""
+ self.bitarray.reverse()
+ for a, i in enumerate(self.bitarray):
+ for b, j in enumerate(i):
+ if len(self.palette) <= 128:
+ if oneistone:
+ pixstring += chr(j)
+ else:
+ if (
+ int(a * modifier) != int((a - 1) * modifier) or a == 0
+ ) and (int(b * modifier) != int((b - 1) * modifier) or b == 0):
+ pixstring += chr(j)
+ else:
+ colourhash = self.palette[j]
+ colour = Color.fromLong(colourhash)
+ colbin = (
+ "{0:b}".format(colour.red / 32).zfill(3)
+ + "{0:b}".format(colour.grn / 64).zfill(2)
+ + "{0:b}".format(colour.blu / 64).zfill(2)
+ )
+ if oneistone:
+ pixstring += chr(int(colbin, 2))
+ else:
+ if (
+ int(a * modifier) != int((a - 1) * modifier) or a == 0
+ ) and (int(b * modifier) != int((b - 1) * modifier) or b == 0):
+ pixstring += chr(int(colbin, 2))
+ for i in range(0, len(pixstring), 8):
+ binarystring += "\x09\x80" + pixstring[i : i + 8]
+ binarystring += "\x01\x81"
+ binarystring += "\x00;"
+ return base64.b64encode(binarystring)
+
+ def _saveBitMapNoCompression(self, filename):
+ # open file
+ f = file(filename, "wb")
+
+ # write bitmap header
+ f.write("BM")
+ f.write(
+ longToString(54 + 256 * 4 + self.ht * self.wd)
+ ) # DWORD size in bytes of the file
+ f.write(longToString(0)) # DWORD 0
+ f.write(longToString(54 + 256 * 4)) # DWORD offset to the data
+ f.write(longToString(40)) # DWORD header size = 40
+ f.write(longToString(self.wd)) # DWORD image width
+ f.write(longToString(self.ht)) # DWORD image height
+ f.write(shortToString(1)) # WORD planes = 1
+ f.write(shortToString(8)) # WORD bits per pixel = 8
+ f.write(longToString(0)) # DWORD compression = 0
+ f.write(
+ longToString(self.wd * self.ht)
+ ) # DWORD sizeimage = size in bytes of the bitmap = width * height
+ f.write(longToString(0)) # DWORD horiz pixels per meter (?)
+ f.write(longToString(0)) # DWORD ver pixels per meter (?)
+ f.write(longToString(256)) # DWORD number of s used = 256
+ f.write(
+ longToString(len(self.palette))
+ ) # DWORD number of "import s = len( self.palette )
+
+ # write bitmap palette
+ for clr in self.palette:
+ f.write(longToString(clr))
+ for i in range(len(self.palette), 256):
+ f.write(longToString(0))
+
+ # write pixels
+ for row in self.bitarray:
+ for pixel in row:
+ f.write(chr(pixel))
+ padding = (4 - len(row) % 4) % 4
+ for i in range(padding):
+ f.write(chr(0))
+
+ # close file
+ f.close()
+
+ def _saveBitMapWithCompression(self, filename):
+ """ """
+ # open file
+ f = file(filename, "wb")
+
+ # write bitmap header
+ f.write("BM")
+ f.write(
+ longToString(54 + 256 * 4 + self.ht * self.wd)
+ ) # DWORD size in bytes of the file
+ f.write(longToString(0)) # DWORD 0
+ f.write(longToString(54 + 256 * 4)) # DWORD offset to the data
+ f.write(longToString(40)) # DWORD header size = 40
+ f.write(longToString(self.wd)) # DWORD image width
+ f.write(longToString(self.ht)) # DWORD image height
+ f.write(shortToString(1)) # WORD planes = 1
+ f.write(shortToString(8)) # WORD bits per pixel = 8
+ f.write(longToString(1)) # DWORD compression = 1=RLE8
+ f.write(
+ longToString(self.wd * self.ht)
+ ) # DWORD sizeimage = size in bytes of the bitmap = width * height
+ f.write(longToString(0)) # DWORD horiz pixels per meter (?)
+ f.write(longToString(0)) # DWORD ver pixels per meter (?)
+ f.write(longToString(256)) # DWORD number of s used = 256
+ f.write(
+ longToString(len(self.palette))
+ ) # DWORD number of "import s = len( self.palette )
+
+ # write bitmap palette
+ for clr in self.palette:
+ f.write(longToString(clr))
+ for i in range(len(self.palette), 256):
+ f.write(longToString(0))
+
+ # write pixels
+ pixelBytes = 0
+ for row in self.bitarray:
+ rleStart = 0
+ curPixel = rleStart + 1
+ while curPixel < len(row):
+ if row[curPixel] != row[rleStart] or curPixel - rleStart == 255:
+ # write out from rleStart thru curPixel-1
+ f.write(chr(curPixel - rleStart))
+ f.write(chr(row[rleStart]))
+ pixelBytes += 2
+ rleStart = curPixel
+ else:
+ pass
+ curPixel += 1
+
+ # write out last run of s
+ f.write(chr(curPixel - rleStart))
+ f.write(chr(row[rleStart]))
+ pixelBytes += 2
+
+ # end of line code
+ f.write(chr(0))
+ f.write(chr(0))
+ pixelBytes += 2
+
+ # end of bitmap code
+ f.write(chr(0))
+ f.write(chr(1))
+ pixelBytes += 2
+
+ # now fix sizes in header
+ f.seek(2)
+ f.write(
+ longToString(54 + 256 * 4 + pixelBytes)
+ ) # DWORD size in bytes of the file
+ f.seek(34)
+ f.write(longToString(pixelBytes)) # DWORD size in bytes of the file
+
+ # close file
+ f.close()
+
+ def saveFile(self, filename, compress=True):
+ if compress:
+ self._saveBitMapWithCompression(filename)
+ else:
+ self._saveBitMapNoCompression(filename)
+
+
+# For converting arttemis colour codes to an RGB value
+def artColourTable(x):
+ if x == 0:
+ y = (255, 255, 255)
+ elif x == 1:
+ y = (100, 100, 100)
+ elif x == 2:
+ y = (255, 0, 0)
+ elif x == 3:
+ y = (0, 255, 0)
+ elif x == 4:
+ y = (0, 0, 255)
+ elif x == 5:
+ y = (0, 255, 255)
+ elif x == 6:
+ y = (255, 0, 255)
+ elif x == 7:
+ y = (255, 255, 0)
+ elif x == 8:
+ y = (152, 255, 152)
+ elif x == 9:
+ y = (135, 206, 250)
+ elif x == 10:
+ y = (255, 165, 0)
+ elif x == 11:
+ y = (200, 150, 100)
+ elif x == 12:
+ y = (255, 200, 200)
+ elif x == 13:
+ y = (170, 170, 170)
+ elif x == 14:
+ y = (0, 0, 0)
+ elif x == 15:
+ y = (255, 63, 63)
+ elif x == 16:
+ y = (255, 127, 127)
+ elif x == 17:
+ y = (255, 191, 191)
+ return y
+
+
+# For reading in genbank or EMBL files
+def getArrows(filename, legname):
+ length = None
+ theseq = ""
+ genbank = open(filename)
+ outlist = []
+ getFeats = False
+ emblcheck = False
+ getColour = False
+ getemblseq = False
+ getgenseq = False
+ getmultifasta = False
+ for line in genbank:
+ if "\t" in line:
+ sys.stderr.write(
+ "Tab found in genbank file, this may cause some Features to be missed, please remove tabs."
+ )
+ if line.startswith("FEATURES") or line.startswith(" source"):
+ getFeats = True
+ elif line.startswith("FT"):
+ getFeats = True
+ emblcheck = True
+ elif line.startswith(">") and not getFeats:
+ if getmultifasta:
+ theseq += "qqq"
+ else:
+ getmultifasta = True
+ elif getmultifasta:
+ theseq += line.rstrip()
+ elif not line.startswith(" ") and not emblcheck:
+ getFeats = False
+ elif emblcheck:
+ getFeats = False
+ if line[2:].startswith(" ") and line[5] != " " and getFeats:
+ feat, loc = line[2:].split()
+ if "join(" in loc or "order(" in loc:
+ if loc.startswith("join("):
+ temp2 = loc[5:-1].split(",")
+ strand = "+"
+ elif loc.startswith("complement("):
+ temp2 = loc[11:-1].split(",")
+ strand = "-"
+ elif loc.startswith("order("):
+ temp2 = loc[6:-1].split(",")
+ temp = [[], []]
+ gotit = True
+ for i in temp2:
+ if ":" in i:
+ i = i.split(":")[1]
+ if "<" in i:
+ i = i.replace("<", "")
+ if ">" in i:
+ i = i.replace(">", "")
+ if ")" in i:
+ i = i.replace(")", "")
+ if i.startswith("complement("):
+ strand = "-"
+ i = i[11:]
+ if i.startswith("join("):
+ i = i[5:]
+ if i.startswith("order("):
+ i = i[6:]
+ if ".." in i:
+ try:
+ start, stop = i.split("..")
+ except:
+ start, stop = "x", "y"
+ elif "^" in i:
+ try:
+ start, stop = i.split("^")
+ except:
+ start, stop = "x", "y"
+ elif "." in i:
+ try:
+ start, stop = i.split(".")
+ except:
+ start, stop = "x", "y"
+ else:
+ if i.startswith("gap("):
+ start = None
+ else:
+ start = i
+ stop = i
+ try:
+ if start != None:
+ temp[0].append(int(start))
+ temp[1].append(int(stop))
+ except:
+ if gotit:
+ print("feature could not be processed:\n" + line)
+ gotit = False
+ if gotit:
+ aninstance = feature(temp[0], temp[1], feat, strand, None, None)
+ outlist.append(aninstance)
+ if feat == "source":
+ try:
+ lengtht = max([max(temp[0]), max(temp[1])])
+ if lengtht > length:
+ length = lengtht
+ except:
+ pass
+ else:
+ if loc.startswith("complement("):
+ strand = "-"
+ loc = loc[11:-1]
+ else:
+ strand = "+"
+ if ":" in loc:
+ loc = loc.split(":")[1]
+ if "<" in loc:
+ loc = loc.replace("<", "")
+ if ">" in loc:
+ loc = loc.replace(">", "")
+ if ".." in loc:
+ try:
+ start, stop = loc.split("..")
+ except:
+ start, stop = "x", "y"
+ elif "^" in loc:
+ try:
+ start, stop = loc.split("^")
+ except:
+ start, stop = "x", "y"
+ elif "." in loc:
+ try:
+ start, stop = loc.split(".")
+ except:
+ start, stop = "x", "y"
+ else:
+ start = loc
+ stop = loc
+ try:
+ aninstance = feature(
+ int(start), int(stop), feat, strand, None, None
+ )
+ outlist.append(aninstance)
+ except:
+ print("feature could not be processed:\n" + line)
+ if feat == "source":
+ try:
+ lengtht = max([int(start), int(stop)])
+ if lengtht > length:
+ length = lengtht
+ except:
+ pass
+ elif line[2:].startswith(" /colour=") and getFeats:
+ temp = line[27:-1]
+ temp = temp.replace('"', "")
+ temp = temp.replace("'", "")
+ artColourF = temp.split()
+ try:
+ if len(artColourF) == 1:
+ artColour = artColourTable(int(artColourF[0]))
+ else:
+ artColour = (
+ int(artColourF[0]),
+ int(artColourF[1]),
+ int(artColourF[2]),
+ )
+ outlist[-1].colour = artColour
+ except:
+ print("Colour could not be processed:\n" + line)
+ elif line[2:].startswith(" /color=") and getFeats:
+ temp = line[26:-1]
+ temp = temp.replace('"', "")
+ temp = temp.replace("'", "")
+ artColourF = temp.split()
+ try:
+ if len(artColourF) == 1:
+ artColour = artColourTable(int(artColourF[0]))
+ else:
+ artColour = (
+ int(artColourF[0]),
+ int(artColourF[1]),
+ int(artColourF[2]),
+ )
+ outlist[-1].colour = artColour
+ except:
+ print("Colour could not be processed:\n" + line)
+ elif line[2:].startswith(" /colour=") and getFeats:
+ temp = line[29:-1]
+ temp = temp.replace('"', "")
+ temp = temp.replace("'", "")
+ artColourF = temp.split()
+ try:
+ if len(artColourF) == 1:
+ artColour = artColourTable(int(artColourF[0]))
+ else:
+ artColour = (
+ int(artColourF[0]),
+ int(artColourF[1]),
+ int(artColourF[2]),
+ )
+ outlist[-1].colour = artColour
+ except:
+ print("Colour could not be processed:\n" + line)
+ elif line[2:].startswith(" /color=") and getFeats:
+ temp = line[28:-1]
+ temp = temp.replace('"', "")
+ temp = temp.replace("'", "")
+ try:
+ artColourF = temp.split()
+ if len(artColourF) == 1:
+ artColour = artColourTable(int(artColourF[0]))
+ else:
+ artColour = (
+ int(artColourF[0]),
+ int(artColourF[1]),
+ int(artColourF[2]),
+ )
+ except:
+ print("Colour could not be processed:\n" + line)
+ outlist[-1].colour = artColour
+ elif (
+ line[2:].startswith(" /gene=")
+ and getFeats
+ and legname == "gene"
+ ):
+ outlist[-1].name = line.rstrip()[27:].replace('"', "")
+ elif (
+ line[2:].startswith(" /product=")
+ and getFeats
+ and legname == "product"
+ ):
+ outlist[-1].name = line.rstrip()[30:].replace('"', "")
+ elif (
+ line[2:].startswith(" /locus_tag=")
+ and getFeats
+ and legname == "locus_tag"
+ ):
+ outlist[-1].name = line.rstrip()[32:].replace('"', "")
+ elif (
+ line[2:].startswith(" /note=")
+ and getFeats
+ and legname == "note"
+ ):
+ outlist[-1].name = line.rstrip()[27:].replace('"', "")
+ elif line.startswith("ORIGIN") and length == None:
+ getgenseq = True
+ elif line.startswith("SQ Sequence ") and length == None:
+ getemblseq = True
+ elif line.startswith("//"):
+ getemblseq = False
+ getgenseq = False
+ if length == None:
+ length = len(theseq)
+ elif getemblseq:
+ theseq += "".join(line.split()[:-1])
+ elif getgenseq:
+ theseq += "".join(line.split()[1:])
+ if getmultifasta:
+ insertSize = len(theseq) / 500
+ multifastapos = 1
+ for i in theseq.split("qqq"):
+ aninstance = feature(
+ multifastapos, multifastapos + len(i) - 1, "contig", "+", None, None
+ )
+ outlist.append(aninstance)
+ multifastapos += len(i) - 1 + insertSize
+ theseq = theseq.replace("qqq", "n" * int(len(theseq) / 500))
+ if length == None and theseq != "":
+ length = len(theseq)
+ return length, outlist
+
+
+# detects whether blast+ is in your path
+def isNewBlastDB():
+ path = os.environ["PATH"].split(os.pathsep)
+ isit = False
+ for i in path:
+ if os.path.exists(i + "/" + "makeblastdb.exe") or os.path.exists(
+ i + "/" "makeblastdb"
+ ):
+ isit = True
+ return isit
+
+
+def isNewBlastn():
+ path = os.environ["PATH"].split(os.pathsep)
+ isit = False
+ for i in path:
+ if os.path.exists(i + "/" + "blastn.exe") or os.path.exists(i + "/" "blastn"):
+ isit = True
+ return isit
+
+
+def isNewTblastx():
+ path = os.environ["PATH"].split(os.pathsep)
+ isit = False
+ for i in path:
+ if os.path.exists(i + "/" + "tblastx.exe") or os.path.exists(i + "/" "tblastx"):
+ isit = True
+ return isit
+
+
+# detects legacy blast in your path
+def isLegBlastDB():
+ path = os.environ["PATH"].split(os.pathsep)
+ isit = False
+ for i in path:
+ if os.path.exists(i + "/" + "formatdb.exe") or os.path.exists(
+ i + "/" "formatdb"
+ ):
+ isit = True
+ return isit
+
+
+def isLegBlastall():
+ path = os.environ["PATH"].split(os.pathsep)
+ isit = False
+ for i in path:
+ if os.path.exists(i + "/" + "blastall.exe") or os.path.exists(
+ i + "/" "blastall"
+ ):
+ isit = True
+ return isit
+
+
+# gets all blast hits length >minlength and e value < mineval and identity > minident
+def getBlast(filename, minlength, mineval, minident):
+ if filename == "":
+ return []
+ blast = open(filename)
+ testline = blast.readline()
+ try:
+ (
+ query,
+ subject,
+ ident,
+ length,
+ mismatch,
+ indel,
+ qStart,
+ qEnd,
+ rStart,
+ rEnd,
+ eVal,
+ bitScore,
+ ) = testline.split()
+ ident = float(ident)
+ length = int(length)
+ mismatch = int(mismatch)
+ indel = int(indel)
+ qStart = int(qStart)
+ qEnd = int(qEnd)
+ rStart = int(rStart)
+ rEnd = int(rEnd)
+ eVal = float(eVal)
+ bitScore = float(bitScore)
+ crunch = False
+ except:
+ crunch = True
+ blast.close()
+ blast = open(filename)
+ outlist = []
+ for line in blast:
+ if crunch:
+ score, ident, qStart, qEnd, query, rStart, rEnd, subject = line.split()[:8]
+ qStart = int(qStart)
+ qEnd = int(qEnd)
+ eVal = 0
+ length = abs(qStart - qEnd)
+ else:
+ (
+ query,
+ subject,
+ ident,
+ length,
+ mismatch,
+ indel,
+ qStart,
+ qEnd,
+ rStart,
+ rEnd,
+ eVal,
+ bitScore,
+ ) = line.split()
+ eVal = float(eVal)
+ ident = float(ident)
+ length = int(length)
+ qStart = int(qStart)
+ qEnd = int(qEnd)
+ rStart = int(rStart)
+ rEnd = int(rEnd)
+ eVal = float(eVal)
+ if length >= minlength and eVal <= mineval and ident >= minident:
+ outlist.append((qStart, qEnd, rStart, rEnd, ident))
+ return outlist
+
+
+# draws teh image
+def draw(
+ filename,
+ minlength,
+ mineval,
+ minIdent,
+ inputlist,
+ width,
+ height1,
+ height2,
+ minblastc,
+ maxblastc,
+ minblastci,
+ maxblastci,
+ drawfig1,
+ drawfig2,
+ drawfig3,
+ compress,
+ reverseList,
+ featDict,
+ glt,
+ exont,
+ genet,
+ featlengths,
+ aln,
+ graphit,
+ blastoutline,
+ minmaxlist,
+ autodetect,
+ legend,
+ legname,
+ writebmp=0,
+):
+ # global variable for stopping script midway
+ global abortCaptain
+ secondlist = []
+ maxlength = 0
+ totalheight = 0
+ # returning a minident value of 101 means the script has been aborted
+ minident = 101
+ # gets feature file and blast information
+ for i in range(0, len(inputlist)):
+ if i % 2 == 0:
+ temp = getArrows(inputlist[i], legname)
+ thirdlist = []
+ if minmaxlist[int(i / 2)][1] == "Max":
+ if temp[0] == None:
+ maxcut = featlengths[int(i / 2)]
+ else:
+ maxcut = temp[0]
+ if minmaxlist[int(i / 2)][0] == 1:
+ minmaxopt = 0
+ else:
+ minmaxopt = 1
+ mincut = minmaxlist[int(i / 2)][0]
+ else:
+ mincut = minmaxlist[int(i / 2)][0]
+ maxcut = minmaxlist[int(i / 2)][1]
+ if minmaxlist[int(i / 2)][0] < minmaxlist[int(i / 2)][1]:
+ minmaxopt = 1
+ else:
+ minmaxopt = 2
+ for j in temp[1]:
+ if j.type in featDict:
+ if j.colour == None:
+ j.colour = featDict[j.type][1]
+ if minmaxopt == 0:
+ thirdlist.append(j)
+ elif minmaxopt == 1:
+ if type(j.start) == int:
+ if j.start >= mincut and j.stop <= maxcut:
+ aninstance = feature(
+ j.start - mincut + 1,
+ j.stop - mincut + 1,
+ j.type,
+ j.strand,
+ j.colour,
+ j.name,
+ )
+ thirdlist.append(aninstance)
+ else:
+ if j.start[0] >= mincut and j.stop[-1] <= maxcut:
+ tempstart = []
+ for k in j.start:
+ tempstart.append(k - mincut + 1)
+ tempstop = []
+ for k in j.stop:
+ tempstop.append(k - mincut + 1)
+ aninstance = feature(
+ tempstart,
+ tempstop,
+ j.type,
+ j.strand,
+ j.colour,
+ j.name,
+ )
+ thirdlist.append(aninstance)
+ elif minmaxopt == 2:
+ if temp[0] == None:
+ templength = featlengths[int(i / 2)]
+ else:
+ templength = temp[0]
+ if type(j.start) == int:
+ if j.stop <= maxcut:
+ tempstart = j.start + templength - mincut + 1
+ tempstop = j.stop + templength - mincut + 1
+ aninstance = feature(
+ tempstart,
+ tempstop,
+ j.type,
+ j.strand,
+ j.colour,
+ j.name,
+ )
+ thirdlist.append(aninstance)
+ elif j.start >= mincut:
+ tempstart = j.start - mincut + 1
+ tempstop = j.stop - mincut + 1
+ aninstance = feature(
+ tempstart,
+ tempstop,
+ j.type,
+ j.strand,
+ j.colour,
+ j.name,
+ )
+ thirdlist.append(aninstance)
+ else:
+ if j.stop[-1] <= maxcut:
+ tempstart = []
+ for k in j.start:
+ tempstart.append(k + templength - mincut + 1)
+ tempstop = []
+ for k in j.stop:
+ tempstop.append(k + templength - mincut + 1)
+ aninstance = feature(
+ tempstart,
+ tempstop,
+ j.type,
+ j.strand,
+ j.colour,
+ j.name,
+ )
+ thirdlist.append(aninstance)
+ elif j.start[0] >= mincut:
+ tempstart = []
+ for k in j.start:
+ tempstart.append(k - mincut + 1)
+ tempstop = []
+ for k in j.stop:
+ tempstop.append(k - mincut + 1)
+ aninstance = feature(
+ tempstart,
+ tempstop,
+ j.type,
+ j.strand,
+ j.colour,
+ j.name,
+ )
+ thirdlist.append(aninstance)
+ thirdlist.sort(key=lambda ii: ii.length(), reverse=True)
+ if minmaxopt == 0:
+ if temp[0] == None:
+ secondlist.append((featlengths[int(i / 2)], thirdlist))
+ if featlengths[int(i / 2)] > maxlength:
+ maxlength = featlengths[int(i / 2)]
+ else:
+ secondlist.append((temp[0], thirdlist))
+ if temp[0] > maxlength:
+ maxlength = temp[0]
+ elif minmaxopt == 1:
+ secondlist.append((maxcut - mincut + 1, thirdlist))
+ if maxcut - mincut + 1 > maxlength:
+ maxlength = maxcut - mincut + 1
+ elif minmaxopt == 2:
+ if temp[0] == None:
+ templength = featlengths[int(i / 2)]
+ else:
+ templength = temp[0]
+ secondlist.append((templength - mincut + maxcut + 1, thirdlist))
+ if templength - mincut + maxcut + 1 > maxlength:
+ maxlength = templength - mincut + maxlength + 1
+ totalheight += height1
+ else:
+ totalheight += height2
+ temp = getBlast(inputlist[i], minlength, mineval, minIdent)
+ for j in temp:
+ if j[4] < minident:
+ minident = j[4]
+ secondlist.append(temp)
+ # calculates offsets for genomes if best blast alignment is selected
+ if autodetect and maxlength > 100000:
+ tempsecond = []
+ minident = 101
+ for i in range(len(secondlist)):
+ temp = []
+ if i % 2 == 0:
+ for j in secondlist[i][1]:
+ if type(j.start) == int:
+ if (j.stop - j.start) * 1.0 / maxlength * width > 4:
+ temp.append(j)
+ else:
+ if (j.stop[0] - j.start[0]) * 1.0 / maxlength * width > 4:
+ temp.append(j)
+ tempsecond.append((secondlist[i][0], temp))
+ else:
+ for j in secondlist[i]:
+ if (j[1] - j[0]) * 1.0 / maxlength * width > 3:
+ temp.append(j)
+ if j[4] < minident:
+ minident = j[4]
+ tempsecond.append(temp)
+ secondlist = tempsecond
+ if minIdent != 0:
+ minident = minIdent
+ if aln == "best blast":
+ blastmatch = [0]
+ for i in range(1, len(secondlist), 2):
+ maxbitscore = 0
+ for j in secondlist[i]:
+ if j[1] - j[0] > maxbitscore:
+ qstart, qend, rstart, rend = j[0], j[1], j[2], j[3]
+ maxbitscore = j[1] - j[0]
+ if len(secondlist[i]) == 0:
+ theQstart = 0
+ elif reverseList[int(i / 2)]:
+ theQstart = secondlist[i - 1][0] - qend
+ else:
+ theQstart = qstart
+ if reverseList[int((i + 1) / 2)]:
+ if len(secondlist[i]) == 0:
+ theRstart = 0
+ elif rstart < rend:
+ theRstart = secondlist[i + 1][0] - rend
+ else:
+ theRstart = secondlist[i + 1][0] - rstart
+ else:
+ if len(secondlist[i]) == 0:
+ theRstart = 0
+ elif rstart < rend:
+ theRstart = rstart
+ else:
+ theRstart = rend
+ blastmatch.append(blastmatch[-1] + theQstart - theRstart)
+ theminblast = min(blastmatch)
+ templist = []
+ for i in blastmatch:
+ templist.append(i - theminblast)
+ blastmatch = templist
+ for i in range(0, len(secondlist) + 1, 2):
+ if secondlist[i][0] + blastmatch[int(i / 2)] > maxlength:
+ maxlength = secondlist[i][0] + blastmatch[int(i / 2)]
+ leghei = 0
+ if legend == "Single column" or legend == "Two columns":
+ legendArrows = set()
+ legendList = []
+ for i in range(len(secondlist)):
+ if i % 2 == 0:
+ legendList.append([])
+ for j in secondlist[i][1]:
+ if (
+ j.name != None
+ and (j.name, j.colour, featDict[j.type][0]) not in legendArrows
+ ):
+ legendArrows.add((j.name, j.colour, featDict[j.type][0]))
+ if type(j.start) == int:
+ tempjstart = j.start
+ else:
+ tempjstart = j.start[0]
+ legendList[int(i / 2)].append(
+ (j.name, j.colour, featDict[j.type][0], tempjstart)
+ )
+ if legend == "Single column":
+ leghei += min([5000, len(legendArrows) * 90])
+ elif legend == "Two columns":
+ leghei = min([5000, (len(legendArrows) + 1) / 2 * 90])
+ global shifter
+ if legend == "Top" or legend == "Top & Bottom":
+ toplegpos = [0, 0, 0, set(), set(), set()]
+ legendTop = []
+ testbmp = BitMap(10, 10)
+ if aln == "best blast":
+ shifter = blastmatch[0]
+ genrev1 = reverseList[0]
+ for j in secondlist[0][1]:
+ if j.name != None:
+ if type(j.start) == int:
+ firstleg = True
+ secondleg = True
+ thirdleg = True
+ if genrev1:
+ legpos = convertPosR(
+ secondlist[0][0],
+ maxlength,
+ width,
+ (j.start + j.stop) / 2,
+ aln,
+ )
+ else:
+ legpos = convertPos(
+ secondlist[0][0],
+ maxlength,
+ width,
+ (j.start + j.stop) / 2,
+ aln,
+ )
+ for q in range(legpos - 40, legpos + 50):
+ if q in toplegpos[3]:
+ firstleg = False
+ if q in toplegpos[4]:
+ secondleg = False
+ if q in toplegpos[5]:
+ thirdleg = False
+ if firstleg:
+ therung = 1
+ if testbmp.lengthString(j.name[:10], 64) > toplegpos[0]:
+ toplegpos[0] = testbmp.lengthString(j.name[:10], 64)
+ for q in range(legpos - 40, legpos + 50):
+ toplegpos[3].add(q)
+ # elif secondleg:
+ # therung = 2
+ # if testbmp.lengthString(j.name[:10], 64) > toplegpos[1]:
+ # toplegpos[1] = testbmp.lengthString(j.name[:10], 64)
+ # for q in range(legpos - 40, legpos + 50):
+ # toplegpos[4].add(q)
+ # elif thirdleg:
+ # therung = 3
+ # if testbmp.lengthString(j.name[:10], 64) > toplegpos[2]:
+ # toplegpos[2] = testbmp.lengthString(j.name[:10], 64)
+ # for q in range(legpos - 40, legpos + 50):
+ # toplegpos[5].add(q)
+ else:
+ therung = None
+ legendTop.append((j.name[:10], legpos, therung))
+ else:
+ firstleg = True
+ secondleg = True
+ thirdleg = True
+ if genrev1:
+ legpos = convertPosR(
+ secondlist[0][0],
+ maxlength,
+ width,
+ (j.start[0] + j.stop[0]) / 2,
+ aln,
+ )
+ else:
+ legpos = convertPos(
+ secondlist[0][0],
+ maxlength,
+ width,
+ (j.start[0] + j.stop[0]) / 2,
+ aln,
+ )
+ for q in range(legpos - 40, legpos + 50):
+ if q in toplegpos[3]:
+ firstleg = False
+ if q in toplegpos[4]:
+ secondleg = False
+ if q in toplegpos[5]:
+ thirdleg = False
+ if firstleg:
+ therung = 1
+ if testbmp.lengthString(j.name[:10], 64) > toplegpos[0]:
+ toplegpos[0] = testbmp.lengthString(j.name[:10], 64)
+ for q in range(legpos - 40, legpos + 50):
+ toplegpos[3].add(q)
+ # elif secondleg:
+ # therung = 2
+ # if testbmp.lengthString(j.name[:10], 64) > toplegpos[1]:
+ # toplegpos[1] = testbmp.lengthString(j.name[:10], 64)
+ # for q in range(legpos - 40, legpos + 50):
+ # toplegpos[4].add(q)
+ # elif thirdleg:
+ # therung = 3
+ # if testbmp.lengthString(j.name[:10], 64) > toplegpos[2]:
+ # toplegpos[2] = testbmp.lengthString(j.name[:10], 64)
+ # for q in range(legpos - 40, legpos + 50):
+ # toplegpos[5].add(q)
+ else:
+ therung = None
+ legendTop.append((j.name[:10], legpos, therung))
+ totalheight += sum(toplegpos[:3]) + 40
+ if legend == "Bottom" or legend == "Top & Bottom":
+ botlegpos = [0, 0, 0, set(), set(), set()]
+ legendBot = []
+ testbmp = BitMap(10, 10)
+ if aln == "best blast":
+ shifter = blastmatch[-1]
+ genrev1 = reverseList[-1]
+ for j in secondlist[-1][1]:
+ if j.name != None:
+ if type(j.start) == int:
+ firstleg = True
+ secondleg = True
+ thirdleg = True
+ if genrev1:
+ legpos = convertPosR(
+ secondlist[-1][0],
+ maxlength,
+ width,
+ (j.start + j.stop) / 2,
+ aln,
+ )
+ else:
+ legpos = convertPos(
+ secondlist[-1][0],
+ maxlength,
+ width,
+ (j.start + j.stop) / 2,
+ aln,
+ )
+ for q in range(legpos - 40, legpos + 50):
+ if q in botlegpos[3]:
+ firstleg = False
+ if q in botlegpos[4]:
+ secondleg = False
+ if q in botlegpos[5]:
+ thirdleg = False
+ if firstleg:
+ therung = 1
+ if testbmp.lengthString(j.name[:10], 64) > botlegpos[0]:
+ botlegpos[0] = testbmp.lengthString(j.name[:10], 64)
+ for q in range(legpos - 40, legpos + 50):
+ botlegpos[3].add(q)
+ # elif secondleg:
+ # therung = 2
+ # if testbmp.lengthString(j.name[:10], 64) > botlegpos[1]:
+ # botlegpos[1] = testbmp.lengthString(j.name[:10], 64)
+ # for q in range(legpos - 40, legpos + 50):
+ # botlegpos[4].add(q)
+ # elif thirdleg:
+ # therung = 3
+ # if testbmp.lengthString(j.name[:10], 64) > botlegpos[2]:
+ # botlegpos[2] = testbmp.lengthString(j.name[:10], 64)
+ # for q in range(legpos - 40, legpos + 50):
+ # botlegpos[5].add(q)
+ else:
+ therung = None
+ legendBot.append((j.name[:10], legpos, therung))
+ else:
+ firstleg = True
+ secondleg = True
+ thirdleg = True
+ if genrev1:
+ legpos = convertPosR(
+ secondlist[-1][0],
+ maxlength,
+ width,
+ (j.start[0] + j.stop[0]) / 2,
+ aln,
+ )
+ else:
+ legpos = convertPos(
+ secondlist[-1][0],
+ maxlength,
+ width,
+ (j.start[0] + j.stop[0]) / 2,
+ aln,
+ )
+ for q in range(
+ (j.start[0] + j.stop[0]) / 2 - 40,
+ (j.start[0] + j.stop[0]) / 2 + 50,
+ ):
+ if q in botlegpos[3]:
+ firstleg = False
+ if q in botlegpos[4]:
+ secondleg = False
+ if q in botlegpos[5]:
+ thirdleg = False
+ if firstleg:
+ therung = 1
+ if testbmp.lengthString(j.name[:10], 64) > botlegpos[0]:
+ botlegpos[0] = testbmp.lengthString(j.name[:10], 64)
+ for q in range(
+ (j.start[0] + j.stop[0]) / 2 - 40,
+ (j.start[0] + j.stop[0]) / 2 + 50,
+ ):
+ botlegpos[3].add(q)
+ # elif secondleg:
+ # therung = 2
+ # if testbmp.lengthString(j.name[:10], 64) > botlegpos[1]:
+ # botlegpos[1] = testbmp.lengthString(j.name[:10], 64)
+ # for q in range((j.start[0] + j.stop[0])/2 - 40, (j.start[0] + j.stop[0])/2 + 50):
+ # botlegpos[4].add(q)
+ # elif thirdleg:
+ # therung = 3
+ # if testbmp.lengthString(j.name[:10], 64) > botlegpos[2]:
+ # botlegpos[2] = testbmp.lengthString(j.name[:10], 64)
+ # for q in range((j.start[0] + j.stop[0])/2 - 40, (j.start[0] + j.stop[0])/2 + 50):
+ # botlegpos[5].add(q)
+ else:
+ therung = None
+ legendBot.append(
+ (j.name[:10], (j.start[0] + j.stop[0]) / 2, therung)
+ )
+ totalheight += sum(botlegpos[:3]) + 40
+ # creates extra width for blast identity legend
+ drawfig1hei = 0
+ if drawfig1 and minident != 101:
+ drawfig1hei = 500
+ extraheight = 0
+ # creates extra height for scale legend
+ drawfig2hei = 0
+ if drawfig2:
+ drawfig2hei = height1 + 70
+ # creates extra height for graph
+ totalheight += max([leghei, drawfig1hei, drawfig2hei])
+ hei = totalheight
+ if graphit != None:
+ hei += graphit[3] * len(graphit[0]) + 2 * graphit[7] * len(graphit[0])
+ extraheight = (graphit[3] + 20) * len(graphit[0])
+ bmp = BitMap(width, hei + 1)
+ # draws the scale figure
+ columnhei = max([leghei, drawfig1hei, drawfig2hei])
+ if legend == "Single column":
+ index = 0
+ legendArrows = []
+ for i in range(len(legendList)):
+ x = legendList[i]
+ x.sort(key=operator.itemgetter(3))
+ if reverseList[i]:
+ x.reverse()
+ legendArrows += x
+ for i in range(columnhei - 74, 10, -90):
+ # print len(legendArrows), legendArrows[index][2]
+ if index < len(legendArrows) and legendArrows[index][2] == "rect":
+ theColor = Color(
+ legendArrows[index][1][0],
+ legendArrows[index][1][1],
+ legendArrows[index][1][2],
+ )
+ bmp.setPenColor(theColor)
+ bmp.drawOutRect(5, i, 96, 64, genet)
+ bmp.setPenColor(Color.BLACK)
+ bmp.writeString(legendArrows[index][0], 106, i, 64)
+ elif index < len(legendArrows) and legendArrows[index][2] == "arrow":
+ theColor = Color(
+ legendArrows[index][1][0],
+ legendArrows[index][1][1],
+ legendArrows[index][1][2],
+ )
+ bmp.setPenColor(theColor)
+ bmp.drawRightArrow(5, i, 96, 64, genet)
+ bmp.setPenColor(Color.BLACK)
+ bmp.writeString(legendArrows[index][0], 106, i, 64)
+ elif index < len(legendArrows) and legendArrows[index][2] == "frame":
+ theColor = Color(
+ legendArrows[index][1][0],
+ legendArrows[index][1][1],
+ legendArrows[index][1][2],
+ )
+ bmp.setPenColor(theColor)
+ bmp.drawRightFrame(5, i - 48, 96, 128, genet, 1)
+ bmp.setPenColor(Color.BLACK)
+ bmp.writeString(legendArrows[index][0], 106, i, 64)
+ elif index < len(legendArrows) and legendArrows[index][2] == "pointer":
+ theColor = Color(
+ legendArrows[index][1][0],
+ legendArrows[index][1][1],
+ legendArrows[index][1][2],
+ )
+ bmp.setPenColor(theColor)
+ bmp.drawPointer(34, i, 64, genet)
+ bmp.setPenColor(Color.BLACK)
+ bmp.writeString(legendArrows[index][0], 106, i, 64)
+ else:
+ print("wang")
+ index += 1
+ elif legend == "Two columns":
+ index = 0
+ legendArrows = []
+ for i in range(len(legendList)):
+ x = legendList[i]
+ x.sort(key=operator.itemgetter(3))
+ if reverseList[i]:
+ x.reverse()
+ legendArrows += x
+ for i in range(columnhei - 74, 10, -90):
+ if index < len(legendArrows) and legendArrows[index][2] == "rect":
+ theColor = Color(
+ legendArrows[index][1][0],
+ legendArrows[index][1][1],
+ legendArrows[index][1][2],
+ )
+ bmp.setPenColor(theColor)
+ bmp.drawOutRect(5, i, 96, 64, genet)
+ bmp.setPenColor(Color.BLACK)
+ bmp.writeString(legendArrows[index][0][:45], 106, i, 64)
+ elif index < len(legendArrows) and legendArrows[index][2] == "arrow":
+ theColor = Color(
+ legendArrows[index][1][0],
+ legendArrows[index][1][1],
+ legendArrows[index][1][2],
+ )
+ bmp.setPenColor(theColor)
+ bmp.drawRightArrow(5, i, 96, 64, genet)
+ bmp.setPenColor(Color.BLACK)
+ bmp.writeString(legendArrows[index][0][:45], 106, i, 64)
+ elif index < len(legendArrows) and legendArrows[index][2] == "frame":
+ theColor = Color(
+ legendArrows[index][1][0],
+ legendArrows[index][1][1],
+ legendArrows[index][1][2],
+ )
+ bmp.setPenColor(theColor)
+ bmp.drawRightFrame(5, i - 48, 96, 128, genet, 1)
+ bmp.setPenColor(Color.BLACK)
+ bmp.writeString(legendArrows[index][0][:45], 106, i, 64)
+ elif index < len(legendArrows) and legendArrows[index][2] == "pointer":
+ theColor = Color(
+ legendArrows[index][1][0],
+ legendArrows[index][1][1],
+ legendArrows[index][1][2],
+ )
+ bmp.setPenColor(theColor)
+ bmp.drawPointer(34, i, 64, genet)
+ bmp.setPenColor(Color.BLACK)
+ bmp.writeString(legendArrows[index][0][:45], 106, i, 64)
+ index += 1
+ for i in range(columnhei - 74, 10, -90):
+ if index < len(legendArrows) and legendArrows[index][2] == "rect":
+ theColor = Color(
+ legendArrows[index][1][0],
+ legendArrows[index][1][1],
+ legendArrows[index][1][2],
+ )
+ bmp.setPenColor(theColor)
+ bmp.drawOutRect(5 + width / 3, i, 96, 64, genet)
+ bmp.setPenColor(Color.BLACK)
+ bmp.writeString(legendArrows[index][0][:45], 106 + width / 3, i, 64)
+ elif index < len(legendArrows) and legendArrows[index][2] == "arrow":
+ theColor = Color(
+ legendArrows[index][1][0],
+ legendArrows[index][1][1],
+ legendArrows[index][1][2],
+ )
+ bmp.setPenColor(theColor)
+ bmp.drawRightArrow(5 + width / 3, i, 96, 64, genet)
+ bmp.setPenColor(Color.BLACK)
+ bmp.writeString(legendArrows[index][0][:45], 106 + width / 3, i, 64)
+ elif index < len(legendArrows) and legendArrows[index][2] == "frame":
+ theColor = Color(
+ legendArrows[index][1][0],
+ legendArrows[index][1][1],
+ legendArrows[index][1][2],
+ )
+ bmp.setPenColor(theColor)
+ bmp.drawRightFrame(5 + width / 3, i - 48, 96, 128, genet, 1)
+ bmp.setPenColor(Color.BLACK)
+ bmp.writeString(legendArrows[index][0][:45], 106 + width / 3, i, 64)
+ elif index < len(legendArrows) and legendArrows[index][2] == "pointer":
+ theColor = Color(
+ legendArrows[index][1][0],
+ legendArrows[index][1][1],
+ legendArrows[index][1][2],
+ )
+ bmp.setPenColor(theColor)
+ bmp.drawPointer(34 + width / 3, i, 64, genet)
+ bmp.setPenColor(Color.BLACK)
+ bmp.writeString(legendArrows[index][0][:45], 106 + width / 3, i, 64)
+ index += 1
+ if legend == "Top" or legend == "Top & Bottom":
+ rung1 = totalheight - sum(toplegpos[:3]) - 30
+ rung2 = rung1 + toplegpos[0] + 10
+ rung3 = rung2 + toplegpos[1] + 10
+ for i in legendTop:
+ if i[0][0].lower() == i[0][0]:
+ xpos = i[1] + 24
+ else:
+ xpos = i[1] + 32
+ if i[2] == 1:
+ bmp.writeString(i[0], xpos, rung1, 64, False, False, 1)
+ elif i[2] == 2:
+ bmp.writeString(i[0], xpos, rung2, 64, False, False, 1)
+ elif i[2] == 3:
+ bmp.writeString(i[0], xpos, rung3, 64, False, False, 1)
+
+ if legend == "Bottom" or legend == "Top & Bottom":
+ rung1 = sum(botlegpos[:3]) + 30 + columnhei
+ rung2 = rung1 - botlegpos[0] - 10
+ rung3 = rung2 - botlegpos[1] - 10
+ for i in legendBot:
+ if i[0][-1].lower() == i[0][-1]:
+ xpos = i[1] + 24
+ else:
+ xpos = i[1] + 32
+ if i[2] == 1:
+ bmp.writeString(i[0], xpos, rung1, 64, False, False, 1, "right")
+ elif i[2] == 2:
+ bmp.writeString(i[0], xpos, rung2, 64, False, False, 1, "right")
+ elif i[2] == 3:
+ bmp.writeString(i[0], xpos, rung3, 64, False, False, 1, "right")
+ if drawfig2 != False:
+ bmp.setPenColor(Color.BLACK)
+ x1 = width - 600 - drawfig2 * 1.0 / maxlength * width
+ x2 = width - 600
+ bmp.drawLine(x1, columnhei - height1 / 2 - 74, x2, columnhei - height1 / 2 - 74)
+ bmp.drawLine(
+ x1, columnhei - height1 / 2 - 1 - 74, x2, columnhei - height1 / 2 - 1 - 74
+ )
+ bmp.drawLine(
+ x1, columnhei - height1 / 2 + 1 - 74, x2, columnhei - height1 / 2 + 1 - 74
+ )
+ bmp.drawLine(
+ x1 - 1,
+ columnhei - height1 / 4 - 74,
+ x1 - 1,
+ columnhei - height1 / 4 * 3 - 74,
+ )
+ bmp.drawLine(
+ x1 + 1,
+ columnhei - height1 / 4 - 74,
+ x1 + 1,
+ columnhei - height1 / 4 * 3 - 74,
+ )
+ bmp.drawLine(
+ x1, columnhei - height1 / 4 - 74, x1, columnhei - height1 / 4 * 3 - 74
+ )
+ bmp.drawLine(
+ x2, columnhei - height1 / 4 - 74, x2, columnhei - height1 / 4 * 3 - 74
+ )
+ bmp.drawLine(
+ x2 + 1,
+ columnhei - height1 / 4 - 74,
+ x2 + 1,
+ columnhei - height1 / 4 * 3 - 74,
+ )
+ bmp.drawLine(
+ x2 - 1,
+ columnhei - height1 / 4 - 74,
+ x2 - 1,
+ columnhei - height1 / 4 * 3 - 74,
+ )
+ strfig2 = str(drawfig2)
+ if strfig2[-6:] == "000000":
+ strfig2 = strfig2[:-6] + " Mbp"
+ elif strfig2[-3:] == "000":
+ strfig2 = strfig2[:-3] + " Kbp"
+ testbmp = BitMap(10, 10)
+ bmp.writeString(
+ strfig2,
+ (x1 + x2) / 2 - testbmp.lengthString(strfig2, 64) / 2,
+ columnhei - height1 / 4 - 59,
+ 64,
+ )
+ # draws the graph
+ if graphit != None:
+ thearray, maxgc, mingc, gheight, glinet, gtype, gmaxy, ggap = graphit
+ widthpixellist = []
+ leftpixellist = []
+ rightpixellist = []
+ for i in range(len(thearray)):
+ if aln == "best blast":
+ shifter = blastmatch[i]
+ if reverseList[i]:
+ rightpixel = convertPosR(secondlist[i * 2][0], maxlength, width, 0, aln)
+ leftpixel = convertPosR(
+ secondlist[i * 2][0], maxlength, width, secondlist[i * 2][0], aln
+ )
+ thearray[i].reverse()
+ else:
+ leftpixel = convertPos(secondlist[i * 2][0], maxlength, width, 0, aln)
+ rightpixel = convertPos(
+ secondlist[i * 2][0], maxlength, width, secondlist[i * 2][0], aln
+ )
+
+ widthpixel = rightpixel - leftpixel + 1
+ widthpixellist.append(widthpixel)
+ leftpixellist.append(leftpixel)
+ rightpixellist.append(rightpixel)
+ neg = False
+ if gmaxy == "Auto":
+ gmaxy = 0
+ for i in range(0, len(thearray)):
+ if min(thearray[i]) < 0:
+ neg = True
+ for j in range(0, widthpixellist[i]):
+ aa = int(j * (len(thearray[i]) * 1.0 / widthpixellist[i]))
+ bb = int((j + 1) * (len(thearray[i]) * 1.0 / widthpixellist[i]))
+ if aa == bb:
+ bb += 1
+ temparr = thearray[i][aa:bb]
+ gyval = abs(sum(temparr) * 1.0 / len(temparr))
+ if gyval > gmaxy:
+ gmaxy = gyval
+ else:
+ gmaxy = float(gmaxy)
+ for i in range(0, len(thearray)):
+ if min(thearray[i]) < 0:
+ neg = True
+ if neg:
+ axispos = hei - ggap - gheight / 2 - glinet / 2
+ else:
+ axispos = hei - ggap - gheight - glinet
+ gc1, gc2, gc3 = maxgc
+ maxgcColour = Color(gc1, gc2, gc3)
+ bmp.setPenColor(maxgcColour)
+ gc1, gc2, gc3 = mingc
+ mingcColour = Color(gc1, gc2, gc3)
+ for qq in range(len(thearray)):
+ bmp.setPenColor(Color.BLACK)
+ lastgypos = None
+ for i in range(axispos, axispos + glinet):
+ bmp.drawLine(leftpixellist[qq], i, rightpixellist[qq], i)
+ bmp.setPenColor(maxgcColour)
+ for i in range(0, widthpixellist[qq]):
+ aa = int(i * (len(thearray[qq]) * 1.0 / widthpixellist[qq]))
+ bb = int((i + 1) * (len(thearray[qq]) * 1.0 / widthpixellist[qq]))
+ if aa == bb:
+ bb += 1
+ temparr = thearray[qq][aa:bb]
+ gyval = sum(temparr) * 1.0 / len(temparr)
+ yvalpixratio = gyval / gmaxy
+ if yvalpixratio > 1:
+ yvalpixratio = 1
+ if yvalpixratio < -1:
+ yvalpixratio = -1
+ if neg:
+ if yvalpixratio < 0:
+ gc1, gc2, gc3 = mingc
+ bmp.setPenColor(mingcColour)
+ yvalpix = round(yvalpixratio * (gheight / 2 - glinet / 2))
+ if gtype == "Line":
+ if lastgypos != None:
+ bmp.drawLine(
+ leftpixellist[qq] + i - 1,
+ lastgypos,
+ leftpixellist[qq] + i,
+ axispos + yvalpix,
+ )
+ lastgypos = axispos + yvalpix
+ elif gtype == "Histogram":
+ bmp.drawLine(
+ leftpixellist[qq] + i,
+ axispos - 1,
+ leftpixellist[qq] + i,
+ axispos + yvalpix,
+ )
+ else:
+ gc1, gc2, gc3 = maxgc
+ yvalpix = round(
+ yvalpixratio * (gheight / 2 - (glinet - glinet / 2))
+ )
+ bmp.setPenColor(maxgcColour)
+ if gtype == "Line":
+ if lastgypos != None:
+ bmp.drawLine(
+ leftpixellist[qq] + i - 1,
+ lastgypos,
+ leftpixellist[qq] + i,
+ axispos + glinet + yvalpix,
+ )
+ lastgypos = axispos + glinet + yvalpix
+ elif gtype == "Histogram" and round(yvalpix) != 0.0:
+ bmp.drawLine(
+ leftpixellist[qq] + i,
+ axispos + glinet,
+ leftpixellist[qq] + i,
+ axispos + yvalpix,
+ )
+ else:
+ yvalpix = round(yvalpixratio * (gheight - glinet))
+ if gtype == "Line":
+ if lastgypos != None:
+ bmp.drawLine(
+ leftpixellist[qq] + i - 1,
+ lastgypos,
+ i,
+ leftpixellist[qq] + axispos + glinet + yvalpix,
+ )
+ lastgypos = axispos + glinet + 1 + yvalpix
+ elif gtype == "Histogram" and round(yvalpix) != 0.0:
+ bmp.drawLine(
+ leftpixellist[qq] + i,
+ axispos + glinet,
+ leftpixellist[qq] + i,
+ axispos + glinet + yvalpix,
+ )
+ axispos -= gheight + 2 * ggap + height1 + height2
+ modfig1 = (graphit[3] + 2 * ggap) * len(graphit[0])
+ else:
+ modfig1 = 0
+ # draws the blast gradient legend
+ if drawfig1 and minident != 101:
+ bmp.setPenColor(Color.BLACK)
+ bmp.writeString(
+ str(int(round(minident))) + "%", width - 300, columnhei - 480, 64
+ )
+ bmp.writeString("100%", width - 300, columnhei - 84, 64)
+ for i in range(columnhei - 480, columnhei - 20):
+ ratio = round((i - (columnhei - 480) * 1.0) / 460, 2)
+ r1 = int(minblastc[0] * (1 - ratio) + maxblastc[0] * ratio)
+ r2 = int(minblastc[1] * (1 - ratio) + maxblastc[1] * ratio)
+ r3 = int(minblastc[2] * (1 - ratio) + maxblastc[2] * ratio)
+ theColor = Color(r1, r2, r3)
+ bmp.setPenColor(theColor)
+ bmp.drawLine(width - 400, i, width - 360, i)
+ r1 = int(minblastci[0] * (1 - ratio) + maxblastci[0] * ratio)
+ r2 = int(minblastci[1] * (1 - ratio) + maxblastci[1] * ratio)
+ r3 = int(minblastci[2] * (1 - ratio) + maxblastci[2] * ratio)
+ theColor = Color(r1, r2, r3)
+ bmp.setPenColor(theColor)
+ bmp.drawLine(width - 360, i, width - 320, i)
+ # draws feature and blast figures
+ for i in range(0, len(secondlist)):
+ # draws the blast figure
+ if i % 2 == 0:
+ if aln == "best blast":
+ shifter = blastmatch[int(i / 2)]
+ genrev1 = reverseList[int(i / 2)]
+ ymod = totalheight - (height1 * i / 2 + height2 * i / 2) - height1
+ if graphit != None and len(thearray) > 1:
+ ymod += (gheight + 2 * ggap) * (len(thearray) - i / 2 - 1)
+ if legend == "Top" or legend == "Top & Bottom":
+ ymod -= sum(toplegpos[:3]) + 40
+ length = secondlist[i][0]
+ bmp.setPenColor(Color.BLACK)
+ jj = height1 / 2 + glt / 2
+ for j in range(glt):
+ bmp.drawLine(
+ convertPos(length, maxlength, width, 0, aln),
+ (ymod + jj),
+ convertPos(length, maxlength, width, length, aln),
+ (ymod + jj),
+ )
+ jj -= 1
+ bmp.setPenColor(Color.RED)
+ for j in secondlist[i][1]:
+ if abortCaptain:
+ return None
+ if (j.strand == "+" and not genrev1) or (j.strand == "-" and genrev1):
+ theColor = Color(j.colour[0], j.colour[1], j.colour[2])
+ bmp.setPenColor(theColor)
+ if type(j.start) == int:
+ if genrev1:
+ x2 = convertPosR(length, maxlength, width, j.start, aln)
+ x1 = convertPosR(length, maxlength, width, j.stop, aln)
+ else:
+ x1 = convertPos(length, maxlength, width, j.start, aln)
+ x2 = convertPos(length, maxlength, width, j.stop, aln)
+ if featDict[j.type][0] == "rect":
+ bmp.drawOutRect(x1, ymod, x2 - x1, height1, genet)
+ elif featDict[j.type][0] == "arrow":
+ bmp.drawRightArrow(x1, ymod, x2 - x1, height1, genet)
+ elif featDict[j.type][0] == "frame":
+ bmp.drawRightFrame(
+ x1, ymod, x2 - x1, height1, genet, j.start % 3
+ )
+ elif featDict[j.type][0] == "pointer":
+ bmp.drawPointer(x1, ymod, height1, genet)
+ else:
+ if genrev1:
+ x2 = convertPosR(length, maxlength, width, j.start[-1], aln)
+ x1 = convertPosR(length, maxlength, width, j.stop[-1], aln)
+ else:
+ x1 = convertPos(length, maxlength, width, j.start[-1], aln)
+ x2 = convertPos(length, maxlength, width, j.stop[-1], aln)
+ if featDict[j.type][0] == "rect":
+ bmp.drawOutRect(x1, ymod, x2 - x1, height1, genet)
+ elif featDict[j.type][0] == "arrow":
+ bmp.drawRightArrow(x1, ymod, x2 - x1, height1, genet)
+ elif featDict[j.type][0] == "frame":
+ bmp.drawRightFrame(
+ x1, ymod, x2 - x1, height1, genet, j.start[-1] % 3
+ )
+ elif featDict[j.type][0] == "pointer":
+ bmp.drawPointer(x1, ymod, height1, genet)
+ for k in range(2, len(j.start) + 1):
+ if genrev1:
+ x4 = convertPosR(
+ length, maxlength, width, j.start[-k], aln
+ )
+ x3 = convertPosR(
+ length, maxlength, width, j.stop[-k], aln
+ )
+ else:
+ x3 = convertPos(
+ length, maxlength, width, j.start[-k], aln
+ )
+ x4 = convertPos(
+ length, maxlength, width, j.stop[-k], aln
+ )
+ if (
+ featDict[j.type][0] == "arrow"
+ or featDict[j.type][0] == "rect"
+ ):
+ if x1 - x4 > 2:
+ bmp.setPenColor(Color.BLACK)
+ bmp.drawDash(
+ x4,
+ ymod + 3 * height1 / 4,
+ x4,
+ ymod + height1,
+ exont,
+ )
+ bmp.drawDash(
+ x4, ymod + height1, x1, ymod + height1, exont
+ )
+ bmp.drawDash(
+ x1,
+ ymod + height1,
+ x1,
+ ymod + 3 * height1 / 4,
+ exont,
+ )
+ bmp.setPenColor(theColor)
+ bmp.drawOutRect(
+ x3, ymod + height1 / 4, x4 - x3, height1 / 2, genet
+ )
+ elif featDict[j.type][0] == "frame":
+ if x1 - x4 > 2:
+ bmp.setPenColor(Color.BLACK)
+ bmp.drawDash(
+ x4,
+ ymod + 3 * height1 / 4,
+ x4,
+ ymod + height1,
+ exont,
+ )
+ bmp.drawDash(
+ x4, ymod + height1, x1, ymod + height1, exont
+ )
+ bmp.drawDash(
+ x1,
+ ymod + height1,
+ x1,
+ ymod + 3 * height1 / 4,
+ exont,
+ )
+ bmp.setPenColor(theColor)
+ bmp.drawRightFrameRect(
+ x3, ymod, x4 - x3, height1, genet, j.start[-k] % 3
+ )
+ x1, x2 = x3, x4
+ else:
+ theColor = Color(j.colour[0], j.colour[1], j.colour[2])
+ bmp.setPenColor(theColor)
+ if type(j.start) == int:
+ if genrev1:
+ x2 = convertPosR(length, maxlength, width, j.start, aln)
+ x1 = convertPosR(length, maxlength, width, j.stop, aln)
+ else:
+ x1 = convertPos(length, maxlength, width, j.start, aln)
+ x2 = convertPos(length, maxlength, width, j.stop, aln)
+ if featDict[j.type][0] == "rect":
+ bmp.drawOutRect(x1, ymod, x2 - x1, height1, genet)
+ elif featDict[j.type][0] == "arrow":
+ bmp.drawLeftArrow(x1, ymod, x2 - x1, height1, genet)
+ elif featDict[j.type][0] == "frame":
+ bmp.drawLeftFrame(
+ x1, ymod, x2 - x1, height1, genet, j.stop % 3
+ )
+ elif featDict[j.type][0] == "pointer":
+ bmp.drawPointer(x2, ymod, height1, genet)
+ else:
+ if genrev1:
+ x2 = convertPosR(length, maxlength, width, j.start[0], aln)
+ x1 = convertPosR(length, maxlength, width, j.stop[0], aln)
+ else:
+ x1 = convertPos(length, maxlength, width, j.start[0], aln)
+ x2 = convertPos(length, maxlength, width, j.stop[0], aln)
+ if featDict[j.type][0] == "rect":
+ bmp.drawOutRect(x1, ymod, x2 - x1, height1, genet)
+ elif featDict[j.type][0] == "arrow":
+ bmp.drawLeftArrow(x1, ymod, x2 - x1, height1, genet)
+ elif featDict[j.type][0] == "frame":
+ bmp.drawLeftFrame(
+ x1, ymod, x2 - x1, height1, genet, j.stop[0] % 3
+ )
+ elif featDict[j.type][0] == "pointer":
+ bmp.drawPointer(x2, ymod, height1, genet)
+ for k in range(1, len(j.start)):
+ if genrev1:
+ x4 = convertPosR(
+ length, maxlength, width, j.start[k], aln
+ )
+ x3 = convertPosR(
+ length, maxlength, width, j.stop[k], aln
+ )
+ else:
+ x3 = convertPos(
+ length, maxlength, width, j.start[k], aln
+ )
+ x4 = convertPos(
+ length, maxlength, width, j.stop[k], aln
+ )
+ if (
+ featDict[j.type][0] == "rect"
+ or featDict[j.type][0] == "arrow"
+ ):
+ if x3 - x2 > 2:
+ bmp.setPenColor(Color.BLACK)
+ bmp.drawDash(
+ x2,
+ ymod + 3 * height1 / 4,
+ x2,
+ ymod + height1,
+ exont,
+ )
+ bmp.drawDash(
+ x2, ymod + height1, x3, ymod + height1, exont
+ )
+ bmp.drawDash(
+ x3,
+ ymod + height1,
+ x3,
+ ymod + 3 * height1 / 4,
+ exont,
+ )
+ bmp.setPenColor(theColor)
+ bmp.drawOutRect(
+ x3, ymod + height1 / 4, x4 - x3, height1 / 2, genet
+ )
+ elif featDict[j.type][0] == "frame":
+ if x3 - x2 > 2:
+ bmp.setPenColor(Color.BLACK)
+ bmp.drawDash(
+ x2, ymod + height1 / 4, x2, ymod, exont
+ )
+ bmp.drawDash(x2, ymod, x3, ymod, exont)
+ bmp.drawDash(
+ x3, ymod, x3, ymod + height1 / 4, exont
+ )
+ bmp.setPenColor(theColor)
+ bmp.drawLeftFrameRect(
+ x3, ymod, x4 - x3, height1, genet, j.stop[k] % 3
+ )
+ x1, x2 = x3, x4
+ else:
+ # draws teh blast hits
+ genrev2 = reverseList[int((i + 1) / 2)]
+ length1 = secondlist[i - 1][0]
+ length2 = secondlist[i + 1][0]
+ ymod = (
+ totalheight
+ - (height1 * (i - 1) / 2 + height2 * (i - 1) / 2)
+ - height1
+ - 1
+ )
+ if graphit != None and len(thearray) > 1:
+ ymod += (gheight + 2 * ggap) * (len(thearray) - i / 2 - 1)
+ if legend == "Top" or legend == "Top & Bottom":
+ ymod -= sum(toplegpos[:3]) + 40
+ y1 = ymod
+ y2 = y1 - height2 + 1
+ for j in secondlist[i]:
+ if abortCaptain:
+ return None
+ qStart, qEnd, rStart, rEnd, ident = j
+ # is the blast hit inverted
+ if (
+ (rStart < rEnd and not genrev1 and not genrev2)
+ or (rStart > rEnd and not genrev1 and genrev2)
+ or (rStart < rEnd and genrev1 and genrev2)
+ or (rStart > rEnd and genrev1 and not genrev2)
+ ):
+ crisscross = False
+ else:
+ crisscross = True
+ try:
+ ratio = round((ident - minident) / (100 - minident), 2)
+ except:
+ ratio = 1
+ if crisscross:
+ r1 = int(minblastci[0] * (1 - ratio) + maxblastci[0] * ratio)
+ r2 = int(minblastci[1] * (1 - ratio) + maxblastci[1] * ratio)
+ r3 = int(minblastci[2] * (1 - ratio) + maxblastci[2] * ratio)
+ else:
+ r1 = int(minblastc[0] * (1 - ratio) + maxblastc[0] * ratio)
+ r2 = int(minblastc[1] * (1 - ratio) + maxblastc[1] * ratio)
+ r3 = int(minblastc[2] * (1 - ratio) + maxblastc[2] * ratio)
+ theColor = Color(r1, r2, r3)
+ bmp.setPenColor(theColor)
+ if aln == "best blast":
+ shifter = blastmatch[int(i / 2)]
+ if genrev1:
+ x1e = convertPosR(length1, maxlength, width, qStart, aln)
+ x1s = convertPosR(length1, maxlength, width, qEnd, aln)
+ else:
+ x1s = convertPos(length1, maxlength, width, qStart, aln)
+ x1e = convertPos(length1, maxlength, width, qEnd, aln)
+ if aln == "best blast":
+ shifter = blastmatch[int((i + 1) / 2)]
+ if genrev2 and rStart < rEnd:
+ x2e = convertPosR(length2, maxlength, width, rStart, aln)
+ x2s = convertPosR(length2, maxlength, width, rEnd, aln)
+ elif genrev2 and rStart >= rEnd:
+ x2s = convertPosR(length2, maxlength, width, rStart, aln)
+ x2e = convertPosR(length2, maxlength, width, rEnd, aln)
+ elif not genrev2 and rStart < rEnd:
+ x2s = convertPos(length2, maxlength, width, rStart, aln)
+ x2e = convertPos(length2, maxlength, width, rEnd, aln)
+ else:
+ x2e = convertPos(length2, maxlength, width, rStart, aln)
+ x2s = convertPos(length2, maxlength, width, rEnd, aln)
+ if crisscross:
+ if x1e - x1s >= x2e - x2s:
+ for k in range(x1s, x1e):
+ try:
+ x2 = x2e - (k - x1s) * 1.0 / (x1e - x1s) * (x2e - x2s)
+ bmp.drawLine(k, y1, x2, y2)
+ except:
+ pass
+ else:
+ for k in range(x2s, x2e):
+ x1 = x1e - (k - x2s) * 1.0 / (x2e - x2s) * (x1e - x1s)
+ bmp.drawLine(x1, y1, k, y2)
+ if blastoutline:
+ bmp.setPenColor(Color.BLACK)
+ bmp.drawLine(x1s, y1, x2e, y2)
+ bmp.drawLine(x1e, y1, x2s, y2)
+ else:
+ if x1e - x1s >= x2e - x2s:
+ for k in range(x1s, x1e):
+ try:
+ x2 = (k - x1s) * 1.0 / (x1e - x1s) * (x2e - x2s) + x2s
+ bmp.drawLine(k, y1, x2, y2)
+ bmp.drawLine(k + 1, y1, x2, y2)
+ except:
+ pass
+ else:
+ for k in range(x2s, x2e):
+ x1 = (k - x2s) * 1.0 / (x2e - x2s) * (x1e - x1s) + x1s
+ bmp.drawLine(x1, y1, k, y2)
+ bmp.drawLine(x1, y1, k + 1, y2)
+ if blastoutline:
+ bmp.setPenColor(Color.BLACK)
+ bmp.drawLine(x1s, y1, x2s, y2)
+ bmp.drawLine(x1e, y1, x2e, y2)
+ if writebmp == 0:
+ bmp.saveFile(filename, compress)
+ return minident
+ elif writebmp == 1:
+ return bmp.createGIFString(True), minident, bmp.wd, bmp.ht
+ elif writebmp == 2:
+ return bmp.createGIFString(False), minident, bmp.wd, bmp.ht
+
+
+def drawsvg(
+ filename,
+ minlength,
+ mineval,
+ minIdent,
+ inputlist,
+ width,
+ height1,
+ height2,
+ minblastc,
+ maxblastc,
+ minblastci,
+ maxblastci,
+ drawfig1,
+ drawfig2,
+ drawfig3,
+ compress,
+ reverseList,
+ featDict,
+ glt,
+ exont,
+ genet,
+ featlengths,
+ aln,
+ graphit,
+ blastoutline,
+ minmaxlist,
+ autodetect,
+ legend,
+ legname,
+):
+ # global variable for stopping script midway
+ global abortCaptain
+ secondlist = []
+ maxlength = 0
+ totalheight = 0
+ # returning a minident value of 101 means the script has been aborted
+ minident = 101
+ # gets feature file and blast information
+ for i in range(0, len(inputlist)):
+ if i % 2 == 0:
+ temp = getArrows(inputlist[i], legname)
+ thirdlist = []
+ if minmaxlist[int(i / 2)][1] == "Max":
+ if temp[0] == None:
+ maxcut = featlengths[int(i / 2)]
+ else:
+ maxcut = temp[0]
+ if minmaxlist[int(i / 2)][0] == 1:
+ minmaxopt = 0
+ else:
+ minmaxopt = 1
+ mincut = minmaxlist[int(i / 2)][0]
+ else:
+ mincut = minmaxlist[int(i / 2)][0]
+ maxcut = minmaxlist[int(i / 2)][1]
+ if minmaxlist[int(i / 2)][0] < minmaxlist[int(i / 2)][1]:
+ minmaxopt = 1
+ else:
+ minmaxopt = 2
+ for j in temp[1]:
+ if j.type in featDict:
+ if j.colour == None:
+ j.colour = featDict[j.type][1]
+ if minmaxopt == 0:
+ thirdlist.append(j)
+ elif minmaxopt == 1:
+ if type(j.start) == int:
+ if j.start >= mincut and j.stop <= maxcut:
+ aninstance = feature(
+ j.start - mincut + 1,
+ j.stop - mincut + 1,
+ j.type,
+ j.strand,
+ j.colour,
+ j.name,
+ )
+ thirdlist.append(aninstance)
+ else:
+ if j.start[0] >= mincut and j.stop[-1] <= maxcut:
+ tempstart = []
+ for k in j.start:
+ tempstart.append(k - mincut + 1)
+ tempstop = []
+ for k in j.stop:
+ tempstop.append(k - mincut + 1)
+ aninstance = feature(
+ tempstart,
+ tempstop,
+ j.type,
+ j.strand,
+ j.colour,
+ j.name,
+ )
+ thirdlist.append(aninstance)
+ elif minmaxopt == 2:
+ if temp[0] == None:
+ templength = featlength[int(i / 2)]
+ else:
+ templength = temp[0]
+ if type(j.start) == int:
+ if j.stop <= maxcut:
+ tempstart = j.start + templength - mincut + 1
+ tempstop = j.stop + templength - mincut + 1
+ aninstance = feature(
+ tempstart,
+ tempstop,
+ j.type,
+ j.strand,
+ j.colour,
+ j.name,
+ )
+ thirdlist.append(aninstance)
+ elif j.start >= mincut:
+ tempstart = j.start - mincut + 1
+ tempstop = j.stop - mincut + 1
+ aninstance = feature(
+ tempstart,
+ tempstop,
+ j.type,
+ j.strand,
+ j.colour,
+ j.name,
+ )
+ thirdlist.append(aninstance)
+ else:
+ if j.stop[-1] <= maxcut:
+ tempstart = []
+ for k in j.start:
+ tempstart.append(k + templength - mincut + 1)
+ tempstop = []
+ for k in j.stop:
+ tempstop.append(k + templength - mincut + 1)
+ aninstance = feature(
+ tempstart,
+ tempstop,
+ j.type,
+ j.strand,
+ j.colour,
+ j.name,
+ )
+ thirdlist.append(aninstance)
+ elif j.start[0] >= mincut:
+ tempstart = []
+ for k in j.start:
+ tempstart.append(k - mincut + 1)
+ tempstop = []
+ for k in j.stop:
+ tempstop.append(k - mincut + 1)
+ aninstance = feature(
+ tempstart,
+ tempstop,
+ j.type,
+ j.strand,
+ j.colour,
+ j.name,
+ )
+ thirdlist.append(aninstance)
+ thirdlist.sort(key=lambda i: i.length(), reverse=True)
+ if minmaxopt == 0:
+ if temp[0] == None:
+ secondlist.append((featlengths[int(i / 2)], thirdlist))
+ if featlengths[int(i / 2)] > maxlength:
+ maxlength = featlengths[int(i / 2)]
+ else:
+ secondlist.append((temp[0], thirdlist))
+ if temp[0] >= maxlength:
+ maxlength = temp[0]
+ elif minmaxopt == 1:
+ if maxcut == "Max":
+ maxcut = temp[0]
+ secondlist.append((maxcut - mincut + 1, thirdlist))
+ if maxcut - mincut + 1 > maxlength:
+ maxlength = maxcut - mincut + 1
+ elif minmaxopt == 2:
+ if temp[0] == None:
+ templength = featlengths[int(i / 2)]
+ else:
+ templength = temp[0]
+ secondlist.append((templength - mincut + maxcut + 1, thirdlist))
+ if templength - mincut + maxcut + 1 > maxlength:
+ maxlength = templength - mincut + maxlength + 1
+ totalheight += height1
+ else:
+ totalheight += height2
+ temp = getBlast(inputlist[i], minlength, mineval, minIdent)
+ for j in temp:
+ if j[4] < minident:
+ minident = j[4]
+ secondlist.append(temp)
+ # calculates offsets for genomes if best blast alignment is selected
+ if autodetect and maxlength > 100000:
+ tempsecond = []
+ minident = 101
+ for i in range(len(secondlist)):
+ temp = []
+ if i % 2 == 0:
+ for j in secondlist[i][1]:
+ if type(j.start) == int:
+ if (j.stop - j.start) * 1.0 / maxlength * width > 4:
+ temp.append(j)
+ else:
+ if (j.stop[0] - j.start[0]) * 1.0 / maxlength * width > 4:
+ temp.append(j)
+ tempsecond.append((secondlist[i][0], temp))
+ else:
+ for j in secondlist[i]:
+ if (j[1] - j[0]) * 1.0 / maxlength * width > 3:
+ temp.append(j)
+ if j[4] < minident:
+ minident = j[4]
+ tempsecond.append(temp)
+ secondlist = tempsecond
+ if minIdent != 0:
+ minident = minIdent
+ if aln == "best blast":
+ blastmatch = [0]
+ for i in range(1, len(secondlist), 2):
+ maxbitscore = 0
+ for j in secondlist[i]:
+ if j[1] - j[0] > maxbitscore:
+ qstart, qend, rstart, rend = j[0], j[1], j[2], j[3]
+ maxbitscore = j[1] - j[0]
+ if len(secondlist[i]) == 0:
+ theQstart = 0
+ elif reverseList[int(i / 2)]:
+ theQstart = secondlist[i - 1][0] - qend
+ else:
+ theQstart = qstart
+ if reverseList[int((i + 1) / 2)]:
+ if len(secondlist[i]) == 0:
+ theRstart = 0
+ elif rstart < rend:
+ theRstart = secondlist[i + 1][0] - rend
+ else:
+ theRstart = secondlist[i + 1][0] - rstart
+ else:
+ if len(secondlist[i]) == 0:
+ theRstart = 0
+ elif rstart < rend:
+ theRstart = rstart
+ else:
+ theRstart = rend
+ blastmatch.append(blastmatch[-1] + theQstart - theRstart)
+ theminblast = min(blastmatch)
+ templist = []
+ for i in blastmatch:
+ templist.append(i - theminblast)
+ blastmatch = templist
+ for i in range(0, len(secondlist) + 1, 2):
+ if secondlist[i][0] + blastmatch[int(i / 2)] > maxlength:
+ maxlength = secondlist[i][0] + blastmatch[int(i / 2)]
+ fighei = 0
+ if legend == "Single column" or legend == "Two columns":
+ legendArrows = set()
+ legendList = []
+ for i in range(len(secondlist)):
+ if i % 2 == 0:
+ legendList.append([])
+ for j in secondlist[i][1]:
+ if (
+ j.name != None
+ and (j.name, j.colour, featDict[j.type][0]) not in legendArrows
+ ):
+ legendArrows.add((j.name, j.colour, featDict[j.type][0]))
+ if type(j.start) == int:
+ tempjstart = j.start
+ else:
+ tempjstart = j.start[0]
+ legendList[int(i / 2)].append(
+ (j.name, j.colour, featDict[j.type][0], tempjstart)
+ )
+ if legend == "Single column":
+ fighei = min([5000, len(legendArrows) * 90])
+ elif legend == "Two columns":
+ fighei = min([5000, (len(legendArrows) + 1) / 2 * 90])
+ global shifter
+ if legend == "Top" or legend == "Top & Bottom":
+ toplegpos = [0, 0, 0, set(), set(), set()]
+ legendTop = []
+ testbmp = BitMap(10, 10)
+ if aln == "best blast":
+ shifter = blastmatch[0]
+ genrev1 = reverseList[0]
+ for j in secondlist[0][1]:
+ if j.name != None:
+ if type(j.start) == int:
+ firstleg = True
+ secondleg = True
+ thirdleg = True
+ if genrev1:
+ legpos = convertPosR(
+ secondlist[0][0],
+ maxlength,
+ width,
+ (j.start + j.stop) / 2,
+ aln,
+ )
+ else:
+ legpos = convertPos(
+ secondlist[0][0],
+ maxlength,
+ width,
+ (j.start + j.stop) / 2,
+ aln,
+ )
+ for q in range(legpos - 40, legpos + 50):
+ if q in toplegpos[3]:
+ firstleg = False
+ if q in toplegpos[4]:
+ secondleg = False
+ if q in toplegpos[5]:
+ thirdleg = False
+ if firstleg:
+ therung = 1
+ if testbmp.lengthString(j.name[:10], 64) > toplegpos[0]:
+ toplegpos[0] = testbmp.lengthString(j.name[:10], 64)
+ for q in range(legpos - 40, legpos + 50):
+ toplegpos[3].add(q)
+ # elif secondleg:
+ # therung = 2
+ # if testbmp.lengthString(j.name[:10], 64) > toplegpos[1]:
+ # toplegpos[1] = testbmp.lengthString(j.name[:10], 64)
+ # for q in range(legpos - 40, legpos + 50):
+ # toplegpos[4].add(q)
+ # elif thirdleg:
+ # therung = 3
+ # if testbmp.lengthString(j.name[:10], 64) > toplegpos[2]:
+ # toplegpos[2] = testbmp.lengthString(j.name[:10], 64)
+ # for q in range(legpos - 40, legpos + 50):
+ # toplegpos[5].add(q)
+ else:
+ therung = None
+ legendTop.append((j.name[:10], legpos, therung))
+ else:
+ firstleg = True
+ secondleg = True
+ thirdleg = True
+ if genrev1:
+ legpos = convertPosR(
+ secondlist[0][0],
+ maxlength,
+ width,
+ (j.start[0] + j.stop[0]) / 2,
+ aln,
+ )
+ else:
+ legpos = convertPos(
+ secondlist[0][0],
+ maxlength,
+ width,
+ (j.start[0] + j.stop[0]) / 2,
+ aln,
+ )
+ for q in range(legpos - 40, legpos + 50):
+ if q in toplegpos[3]:
+ firstleg = False
+ if q in toplegpos[4]:
+ secondleg = False
+ if q in toplegpos[5]:
+ thirdleg = False
+ if firstleg:
+ therung = 1
+ if testbmp.lengthString(j.name[:10], 64) > toplegpos[0]:
+ toplegpos[0] = testbmp.lengthString(j.name[:10], 64)
+ for q in range(legpos - 40, legpos + 50):
+ toplegpos[3].add(q)
+ # elif secondleg:
+ # therung = 2
+ # if testbmp.lengthString(j.name[:10], 64) > toplegpos[1]:
+ # toplegpos[1] = testbmp.lengthString(j.name[:10], 64)
+ # for q in range(legpos - 40, legpos + 50):
+ # toplegpos[4].add(q)
+ # elif thirdleg:
+ # therung = 3
+ # if testbmp.lengthString(j.name[:10], 64) > toplegpos[2]:
+ # toplegpos[2] = testbmp.lengthString(j.name[:10], 64)
+ # for q in range(legpos - 40, legpos + 50):
+ # toplegpos[5].add(q)
+ else:
+ therung = None
+ legendTop.append((j.name[:10], legpos, therung))
+ totalheight += sum(toplegpos[:3]) + 40
+ if legend == "Bottom" or legend == "Top & Bottom":
+ botlegpos = [0, 0, 0, set(), set(), set()]
+ legendBot = []
+ testbmp = BitMap(10, 10)
+ if aln == "best blast":
+ shifter = blastmatch[-1]
+ genrev1 = reverseList[-1]
+ if aln == "best blast":
+ shifter = blastmatch[-1]
+ genrev1 = reverseList[-1]
+ for j in secondlist[-1][1]:
+ if j.name != None:
+ if type(j.start) == int:
+ firstleg = True
+ secondleg = True
+ thirdleg = True
+ if genrev1:
+ legpos = convertPosR(
+ secondlist[-1][0],
+ maxlength,
+ width,
+ (j.start + j.stop) / 2,
+ aln,
+ )
+ else:
+ legpos = convertPos(
+ secondlist[-1][0],
+ maxlength,
+ width,
+ (j.start + j.stop) / 2,
+ aln,
+ )
+ for q in range(legpos - 40, legpos + 50):
+ if q in botlegpos[3]:
+ firstleg = False
+ if q in botlegpos[4]:
+ secondleg = False
+ if q in botlegpos[5]:
+ thirdleg = False
+ if firstleg:
+ therung = 1
+ if testbmp.lengthString(j.name[:10], 64) > botlegpos[0]:
+ botlegpos[0] = testbmp.lengthString(j.name[:10], 64)
+ for q in range(legpos - 40, legpos + 50):
+ botlegpos[3].add(q)
+ # elif secondleg:
+ # therung = 2
+ # if testbmp.lengthString(j.name[:10], 64) > botlegpos[1]:
+ # botlegpos[1] = testbmp.lengthString(j.name[:10], 64)
+ # for q in range(legpos - 40, legpos + 50):
+ # botlegpos[4].add(q)
+ # elif thirdleg:
+ # therung = 3
+ # if testbmp.lengthString(j.name[:10], 64) > botlegpos[2]:
+ # botlegpos[2] = testbmp.lengthString(j.name[:10], 64)
+ # for q in range(legpos - 40, legpos + 50):
+ # botlegpos[5].add(q)
+ else:
+ therung = None
+ legendBot.append((j.name[:10], legpos, therung))
+ else:
+ firstleg = True
+ secondleg = True
+ thirdleg = True
+ if genrev1:
+ legpos = convertPosR(
+ secondlist[-1][0],
+ maxlength,
+ width,
+ (j.start[0] + j.stop[0]) / 2,
+ aln,
+ )
+ else:
+ legpos = convertPos(
+ secondlist[-1][0],
+ maxlength,
+ width,
+ (j.start[0] + j.stop[0]) / 2,
+ aln,
+ )
+ for q in range(
+ (j.start[0] + j.stop[0]) / 2 - 40,
+ (j.start[0] + j.stop[0]) / 2 + 50,
+ ):
+ if q in botlegpos[3]:
+ firstleg = False
+ if q in botlegpos[4]:
+ secondleg = False
+ if q in botlegpos[5]:
+ thirdleg = False
+ if firstleg:
+ therung = 1
+ if testbmp.lengthString(j.name[:10], 64) > botlegpos[0]:
+ botlegpos[0] = testbmp.lengthString(j.name[:10], 64)
+ for q in range(
+ (j.start[0] + j.stop[0]) / 2 - 40,
+ (j.start[0] + j.stop[0]) / 2 + 50,
+ ):
+ botlegpos[3].add(q)
+ # elif secondleg:
+ # therung = 2
+ # if testbmp.lengthString(j.name[:10], 64) > botlegpos[1]:
+ # botlegpos[1] = testbmp.lengthString(j.name[:10], 64)
+ # for q in range((j.start[0] + j.stop[0])/2 - 40, (j.start[0] + j.stop[0])/2 + 50):
+ # botlegpos[4].add(q)
+ # elif thirdleg:
+ # therung = 3
+ # if testbmp.lengthString(j.name[:10], 64) > botlegpos[2]:
+ # botlegpos[2] = testbmp.lengthString(j.name[:10], 64)
+ # for q in range((j.start[0] + j.stop[0])/2 - 40, (j.start[0] + j.stop[0])/2 + 50):
+ # botlegpos[5].add(q)
+ else:
+ therung = None
+ legendBot.append(
+ (j.name[:10], (j.start[0] + j.stop[0]) / 2, therung)
+ )
+ totalheight += sum(botlegpos[:3]) + 40
+ # creates extra width for blast identity legend
+ drawfig1hei = 0
+ if drawfig1 and minident != 101:
+ drawfig1hei = 500
+ extraheight = 0
+ # creates extra height for scale legend
+ drawfig2hei = 0
+ if drawfig2:
+ drawfig2hei = height1
+ columnhei = max([fighei, drawfig1hei, drawfig2hei])
+ totalheight += columnhei
+ hei = totalheight
+ # creates extra height for graph
+ if graphit != None:
+ hei += graphit[3] * len(graphit[0]) + 2 * graphit[7] * len(graphit[0])
+ extraheight = (graphit[3] + 20) * len(graphit[0])
+ svg = scalableVectorGraphics(hei + 1, width)
+ if legend == "Single column":
+ index = 0
+ legendArrows = []
+ for i in range(len(legendList)):
+ x = legendList[i]
+ x.sort(key=operator.itemgetter(3))
+ if reverseList[i]:
+ x.reverse()
+ legendArrows += x
+ for i in range(hei - columnhei + 74, hei, 90):
+ if index < len(legendArrows) and legendArrows[index][2] == "rect":
+ svg.drawOutRect(5, i - 64, 96, 64, legendArrows[index][1], genet)
+ svg.writeString(legendArrows[index][0], 106, i, 64)
+ elif index < len(legendArrows) and legendArrows[index][2] == "arrow":
+ svg.drawRightArrow(
+ 5, i - 64, 96, 64, legendArrows[index][1], (0, 0, 0), genet
+ )
+ svg.writeString(legendArrows[index][0], 106, i, 64)
+ elif index < len(legendArrows) and legendArrows[index][2] == "frame":
+ svg.drawRightFrame(5, i - 16, 96, 128, genet, 1, legendArrows[index][1])
+ svg.writeString(legendArrows[index][0], 106, i, 64)
+ elif index < len(legendArrows) and legendArrows[index][2] == "pointer":
+ svg.drawPointer(34, i - 64, 64, genet, legendArrows[index][1])
+ svg.writeString(legendArrows[index][0], 106, i, 64)
+ index += 1
+ elif legend == "Two columns":
+ index = 0
+ legendArrows = []
+ for i in range(len(legendList)):
+ x = legendList[i]
+ x.sort(key=operator.itemgetter(3))
+ if reverseList[i]:
+ x.reverse()
+ legendArrows += x
+ for i in range(hei - columnhei + 74, hei, 90):
+ if index < len(legendArrows) and legendArrows[index][2] == "rect":
+ svg.drawOutRect(5, i - 64, 96, 64, legendArrows[index][1], genet)
+ svg.writeString(legendArrows[index][0][:45], 106, i, 64)
+ elif index < len(legendArrows) and legendArrows[index][2] == "arrow":
+ svg.writeString(legendArrows[index][0][:45], 106, i, 64)
+ svg.drawRightArrow(
+ 5, i - 64, 96, 64, legendArrows[index][1], (0, 0, 0), genet
+ )
+ elif index < len(legendArrows) and legendArrows[index][2] == "frame":
+ svg.drawRightFrame(5, i - 16, 96, 128, genet, 1, legendArrows[index][1])
+ svg.writeString(legendArrows[index][0][:45], 106, i, 64)
+ elif index < len(legendArrows) and legendArrows[index][2] == "pointer":
+ svg.drawPointer(34, i - 64, 64, genet, legendArrows[index][1])
+ svg.writeString(legendArrows[index][0][:45], 76, i, 64)
+ index += 1
+ for i in range(hei - columnhei + 74, hei, 90):
+ if index < len(legendArrows) and legendArrows[index][2] == "rect":
+ svg.drawOutRect(
+ 5 + width / 3, i - 64, 96, 64, legendArrows[index][1], genet
+ )
+ svg.writeString(legendArrows[index][0][:45], 106 + width / 3, i, 64)
+ elif index < len(legendArrows) and legendArrows[index][2] == "arrow":
+ svg.drawRightArrow(
+ 5 + width / 3,
+ i - 64,
+ 96,
+ 64,
+ legendArrows[index][1],
+ (0, 0, 0),
+ genet,
+ )
+ svg.writeString(legendArrows[index][0][:45], 106 + width / 3, i, 64)
+ elif index < len(legendArrows) and legendArrows[index][2] == "frame":
+ svg.drawRightFrame(
+ 5 + width / 3, i - 16, 96, 128, genet, 1, legendArrows[index][1]
+ )
+ svg.writeString(legendArrows[index][0][:45], 106 + width / 3, i, 64)
+ elif index < len(legendArrows) and legendArrows[index][2] == "pointer":
+ svg.drawPointer(
+ 34 + width / 3, i - 64, 64, genet, legendArrows[index][1]
+ )
+ svg.writeString(legendArrows[index][0][:45], 76 + width / 3, i, 64)
+ index += 1
+ if legend == "Top" or legend == "Top & Bottom":
+ rung1 = sum(toplegpos[:3]) + 30
+ rung2 = rung1 - toplegpos[0] - 10
+ rung3 = rung2 - toplegpos[1] - 10
+ for i in legendTop:
+ if i[0][0].lower() == i[0][0]:
+ xpos = i[1] + 16
+ else:
+ xpos = i[1] + 32
+ if i[2] == 1:
+ svg.writeString(i[0], xpos, rung1, 64, False, False, 1)
+ elif i[2] == 2:
+ svg.writeString(i[0], xpos, rung2, 64, False, False, 1)
+ elif i[2] == 3:
+ svg.writeString(i[0], xpos, rung3, 64, False, False, 1)
+ if legend == "Bottom" or legend == "Top & Bottom":
+ rung1 = hei - sum(botlegpos[:3]) - 30 - columnhei
+ rung2 = rung1 + botlegpos[0] + 10
+ rung3 = rung2 + botlegpos[1] + 10
+ for i in legendBot:
+ if i[0][-1].lower() == i[0][-1]:
+ xpos = i[1] + 16
+ else:
+ xpos = i[1] + 32
+ if i[2] == 1:
+ svg.writeString(i[0], xpos, rung1, 64, False, False, 1, "right")
+ elif i[2] == 2:
+ svg.writeString(i[0], xpos, rung2, 64, False, False, 1, "right")
+ elif i[2] == 3:
+ svg.writeString(i[0], xpos, rung3, 64, False, False, 1, "right")
+ # draws the scale figure
+ if drawfig2 != False:
+ testbmp = BitMap(5, 5)
+ x1 = width - 600 - drawfig2 * 1.0 / maxlength * width
+ x2 = width - 600
+ svg.drawLine(
+ x1,
+ hei - columnhei + height1 / 2 + 70,
+ x2,
+ hei - columnhei + height1 / 2 + 70,
+ 3,
+ )
+ svg.drawLine(
+ x1,
+ hei - columnhei + height1 / 4 + 70,
+ x1,
+ hei - columnhei + height1 / 4 * 3 + 70,
+ 3,
+ )
+ svg.drawLine(
+ x2,
+ hei - columnhei + height1 / 4 + 70,
+ x2,
+ hei - columnhei + height1 / 4 * 3 + 70,
+ 3,
+ )
+ strfig2 = str(drawfig2)
+ if strfig2[-6:] == "000000":
+ strfig2 = strfig2[:-6] + " Mbp"
+ elif strfig2[-3:] == "000":
+ strfig2 = strfig2[:-3] + " Kbp"
+ svg.writeString(
+ strfig2,
+ (x1 + x2) / 2 - testbmp.lengthString(strfig2, 64) / 2,
+ hei - columnhei + height1 / 4 + 65,
+ 64,
+ )
+ # draws the graph
+ if graphit != None:
+ thearray, maxgc, mingc, gheight, glinet, gtype, gmaxy, ggap = graphit
+ widthpixellist = []
+ leftpixellist = []
+ rightpixellist = []
+ for i in range(len(thearray)):
+ if aln == "best blast":
+ shifter = blastmatch[i]
+ if reverseList[i]:
+ rightpixel = convertPosR(secondlist[i * 2][0], maxlength, width, 0, aln)
+ leftpixel = convertPosR(
+ secondlist[i * 2][0], maxlength, width, secondlist[i * 2][0], aln
+ )
+ thearray[i].reverse()
+ else:
+ leftpixel = convertPos(secondlist[i * 2][0], maxlength, width, 0, aln)
+ rightpixel = convertPos(
+ secondlist[i * 2][0], maxlength, width, secondlist[i * 2][0], aln
+ )
+
+ widthpixel = rightpixel - leftpixel + 1
+ widthpixellist.append(widthpixel)
+ leftpixellist.append(leftpixel)
+ rightpixellist.append(rightpixel)
+ neg = False
+ if gmaxy == "Auto":
+ gmaxy = 0
+ for i in range(0, len(thearray)):
+ if min(thearray[i]) < 0:
+ neg = True
+ for j in range(0, widthpixellist[i]):
+ aa = int(j * (len(thearray[i]) * 1.0 / widthpixellist[i]))
+ bb = int((j + 1) * (len(thearray[i]) * 1.0 / widthpixellist[i]))
+ if aa == bb:
+ bb += 1
+ temparr = thearray[i][aa:bb]
+ gyval = abs(sum(temparr) * 1.0 / len(temparr))
+ if gyval > gmaxy:
+ gmaxy = gyval
+ else:
+ gmaxy = float(gmaxy)
+ for i in range(0, len(thearray)):
+ if min(thearray[i]) < 0:
+ neg = True
+ if neg:
+ axispos = ggap + gheight / 2 + glinet / 2
+ else:
+ axispos = ggap + gheight
+ for qq in range(len(thearray)):
+ lastgypos = None
+ svg.drawLine(
+ leftpixellist[qq],
+ axispos + glinet / 2,
+ rightpixellist[qq],
+ axispos + glinet / 2,
+ glinet,
+ )
+ for i in range(0, widthpixellist[qq]):
+ aa = int(i * (len(thearray[qq]) * 1.0 / widthpixellist[qq]))
+ bb = int((i + 1) * (len(thearray[qq]) * 1.0 / widthpixellist[qq]))
+ if aa == bb:
+ bb += 1
+ temparr = thearray[qq][aa:bb]
+ gyval = sum(temparr) * 1.0 / len(temparr)
+ yvalpixratio = gyval / gmaxy
+ if yvalpixratio > 1:
+ yvalpixratio = 1
+ if yvalpixratio < -1:
+ yvalpixratio = -1
+ if neg:
+ if yvalpixratio < 0:
+ gc1, gc2, gc3 = mingc
+ yvalpix = round(yvalpixratio * (gheight / 2 - glinet / 2))
+ if gtype == "Line":
+ if lastgypos != None:
+ svg.drawLine(
+ leftpixellist[qq] + i - 1,
+ lastgypos,
+ leftpixellist[qq] + i,
+ axispos - yvalpix,
+ 1,
+ mingc,
+ )
+ lastgypos = axispos - yvalpix
+ elif gtype == "Histogram":
+ svg.drawLine(
+ leftpixellist[qq] + i,
+ axispos + glinet / 2,
+ leftpixellist[qq] + i,
+ axispos - yvalpix,
+ 1,
+ mingc,
+ )
+ else:
+ gc1, gc2, gc3 = maxgc
+ yvalpix = round(
+ yvalpixratio * (gheight / 2 - (glinet - glinet / 2))
+ )
+ if gtype == "Line":
+ if lastgypos != None:
+ svg.drawLine(
+ leftpixellist[qq] + i - 1,
+ lastgypos,
+ leftpixellist[qq] + i,
+ axispos - glinet - yvalpix,
+ 1,
+ maxgc,
+ )
+ lastgypos = axispos - glinet - yvalpix
+ elif gtype == "Histogram" and round(yvalpix) != 0.0:
+ svg.drawLine(
+ leftpixellist[qq] + i,
+ axispos - glinet / 2,
+ leftpixellist[qq] + i,
+ axispos - yvalpix,
+ 1,
+ maxgc,
+ )
+ else:
+ yvalpix = round(yvalpixratio * (gheight - glinet))
+ if gtype == "Line":
+ if lastgypos != None:
+ svg.drawLine(
+ leftpixellist[qq] + i - 1,
+ lastgypos,
+ i,
+ leftpixellist[qq] - axispos - glinet - yvalpix,
+ 1,
+ maxgc,
+ )
+ lastgypos = axispos - glinet - 1 - yvalpix
+ elif gtype == "Histogram" and round(yvalpix) != 0.0:
+ svg.drawLine(
+ leftpixellist[qq] + i,
+ axispos,
+ leftpixellist[qq] + i,
+ axispos - yvalpix,
+ 1,
+ maxgc,
+ )
+ axispos += gheight + 2 * ggap + height1 + height2
+ modfig1 = (graphit[3] + 2 * ggap) * len(graphit[0])
+ else:
+ modfig1 = 0
+ # draws the blast gradient legend
+ if drawfig1 and minident != 101:
+ svg.writeString(
+ str(int(round(minident))) + "%", width - 300, hei - columnhei + 480, 64
+ )
+ svg.writeString("100%", width - 300, hei - columnhei + 84, 64)
+ svg.drawGradient(
+ width - 400, hei - columnhei + 20, 40, 460, minblastc, maxblastc
+ )
+ svg.drawGradient2(
+ width - 360, hei - columnhei + 20, 40, 460, minblastci, maxblastci
+ )
+ # draws feature and blast figures
+ for i in range(0, len(secondlist)):
+ # draws the blast figure
+ if i % 2 == 0:
+ if aln == "best blast":
+ shifter = blastmatch[int(i / 2)]
+ genrev1 = reverseList[int(i / 2)]
+ ymod = height1 * i / 2 + height2 * i / 2
+ if graphit != None:
+ ymod += (gheight + 2 * ggap) * (min([len(thearray), i / 2 + 1]))
+ if legend == "Top" or legend == "Top & Bottom":
+ ymod += sum(toplegpos[:3]) + 40
+ length = secondlist[i][0]
+ svg.drawLine(
+ convertPos(length, maxlength, width, 0, aln),
+ ymod + height1 / 2,
+ convertPos(length, maxlength, width, length, aln),
+ ymod + height1 / 2,
+ glt,
+ )
+ for j in secondlist[i][1]:
+ if abortCaptain:
+ return None
+ if (j.strand == "+" and not genrev1) or (j.strand == "-" and genrev1):
+ if type(j.start) == int:
+ if genrev1:
+ x2 = convertPosR(length, maxlength, width, j.start, aln)
+ x1 = convertPosR(length, maxlength, width, j.stop, aln)
+ else:
+ x1 = convertPos(length, maxlength, width, j.start, aln)
+ x2 = convertPos(length, maxlength, width, j.stop, aln)
+ if featDict[j.type][0] == "rect":
+ svg.drawOutRect(
+ x1, ymod, max([x2 - x1, 1]), height1, j.colour, genet
+ )
+ elif featDict[j.type][0] == "arrow":
+ svg.drawRightArrow(
+ x1,
+ ymod,
+ max([x2 - x1, 1]),
+ height1,
+ j.colour,
+ (0, 0, 0),
+ genet,
+ )
+ elif featDict[j.type][0] == "frame":
+ svg.drawRightFrame(
+ x1,
+ ymod,
+ max([x2 - x1, 1]),
+ height1,
+ genet,
+ j.start % 3,
+ j.colour,
+ )
+ elif featDict[j.type][0] == "pointer":
+ svg.drawPointer(x1, ymod, height1, genet, j.colour)
+ else:
+ if genrev1:
+ x2 = convertPosR(length, maxlength, width, j.start[-1], aln)
+ x1 = convertPosR(length, maxlength, width, j.stop[-1], aln)
+ else:
+ x1 = convertPos(length, maxlength, width, j.start[-1], aln)
+ x2 = convertPos(length, maxlength, width, j.stop[-1], aln)
+ if featDict[j.type][0] == "rect":
+ svg.drawOutRect(
+ x1, ymod, max([x2 - x1, 1]), height1, j.colour, genet
+ )
+ elif featDict[j.type][0] == "arrow":
+ svg.drawRightArrow(
+ x1,
+ ymod,
+ max([x2 - x1, 1]),
+ height1,
+ j.colour,
+ (0, 0, 0),
+ genet,
+ )
+ elif featDict[j.type][0] == "frame":
+ svg.drawRightFrame(
+ x1,
+ ymod,
+ max([x2 - x1, 1]),
+ height1,
+ genet,
+ j.start[-1] % 3,
+ j.colour,
+ )
+ elif featDict[j.type][0] == "pointer":
+ svg.drawPointer(x1, ymod, height1, genet, j.colour)
+ for k in range(2, len(j.start) + 1):
+ if genrev1:
+ x4 = convertPosR(
+ length, maxlength, width, j.start[-k], aln
+ )
+ x3 = convertPosR(
+ length, maxlength, width, j.stop[-k], aln
+ )
+ else:
+ x3 = convertPos(
+ length, maxlength, width, j.start[-k], aln
+ )
+ x4 = convertPos(
+ length, maxlength, width, j.stop[-k], aln
+ )
+ if (
+ featDict[j.type][0] == "arrow"
+ or featDict[j.type][0] == "rect"
+ ):
+ if x1 - x4 > 2:
+ svg.drawDash(
+ x4, ymod + height1 / 4, x4, ymod, exont
+ )
+ svg.drawDash(x4, ymod, x1, ymod, exont)
+ svg.drawDash(
+ x1, ymod, x1, ymod + height1 / 4, exont
+ )
+ svg.drawOutRect(
+ x3,
+ ymod + height1 / 4,
+ x4 - x3,
+ height1 / 2,
+ j.colour,
+ genet,
+ )
+ elif featDict[j.type][0] == "frame":
+ if x1 - x4 > 2:
+ svg.drawDash(
+ x4, ymod + height1 / 4, x4, ymod, exont
+ )
+ svg.drawDash(x4, ymod, x1, ymod, exont)
+ svg.drawDash(
+ x1, ymod, x1, ymod + height1 / 4, exont
+ )
+ svg.drawRightFrameRect(
+ x3,
+ ymod,
+ x4 - x3,
+ height1,
+ genet,
+ j.start[-k] % 3,
+ j.colour,
+ )
+ # need to get exons working for other types
+ x1, x2 = x3, x4
+ else:
+ if type(j.start) == int:
+ if genrev1:
+ x2 = convertPosR(length, maxlength, width, j.start, aln)
+ x1 = convertPosR(length, maxlength, width, j.stop, aln)
+ else:
+ x1 = convertPos(length, maxlength, width, j.start, aln)
+ x2 = convertPos(length, maxlength, width, j.stop, aln)
+ if featDict[j.type][0] == "rect":
+ svg.drawOutRect(x1, ymod, x2 - x1, height1, j.colour, genet)
+ elif featDict[j.type][0] == "arrow":
+ svg.drawLeftArrow(
+ x1, ymod, x2 - x1, height1, j.colour, (0, 0, 0), genet
+ )
+ elif featDict[j.type][0] == "frame":
+ svg.drawLeftFrame(
+ x1, ymod, x2 - x1, height1, genet, j.stop % 3, j.colour
+ )
+ elif featDict[j.type][0] == "pointer":
+ svg.drawPointer(x1, ymod, height1, genet, j.colour)
+ else:
+ if genrev1:
+ x2 = convertPosR(length, maxlength, width, j.start[0], aln)
+ x1 = convertPosR(length, maxlength, width, j.stop[0], aln)
+ else:
+ x1 = convertPos(length, maxlength, width, j.start[0], aln)
+ x2 = convertPos(length, maxlength, width, j.stop[0], aln)
+ if featDict[j.type][0] == "rect":
+ svg.drawOutRect(x1, ymod, x2 - x1, height1, j.colour, genet)
+ elif featDict[j.type][0] == "arrow":
+ svg.drawLeftArrow(
+ x1, ymod, x2 - x1, height1, j.colour, (0, 0, 0), genet
+ )
+ elif featDict[j.type][0] == "frame":
+ svg.drawLeftFrame(
+ x1,
+ ymod,
+ x2 - x1,
+ height1,
+ genet,
+ j.stop[0] % 3,
+ j.colour,
+ )
+ elif featDict[j.type][0] == "pointer":
+ svg.drawPointer(x1, ymod, height1, genet, j.colour)
+ for k in range(1, len(j.start)):
+ if genrev1:
+ x4 = convertPosR(
+ length, maxlength, width, j.start[k], aln
+ )
+ x3 = convertPosR(
+ length, maxlength, width, j.stop[k], aln
+ )
+ else:
+ x3 = convertPos(
+ length, maxlength, width, j.start[k], aln
+ )
+ x4 = convertPos(
+ length, maxlength, width, j.stop[k], aln
+ )
+ if (
+ featDict[j.type][0] == "rect"
+ or featDict[j.type][0] == "arrow"
+ ):
+ if x3 - x2 > 2:
+ svg.drawDash(
+ x2,
+ ymod + 3 * height1 / 4,
+ x2,
+ ymod + height1,
+ exont,
+ )
+ svg.drawDash(
+ x2, ymod + height1, x3, ymod + height1, exont
+ )
+ svg.drawDash(
+ x3,
+ ymod + height1,
+ x3,
+ ymod + 3 * height1 / 4,
+ exont,
+ )
+ elif featDict[j.type][0] == "frame":
+ if x3 - x2 > 2:
+ svg.drawDash(
+ x2,
+ ymod + 3 * height1 / 4,
+ x2,
+ ymod + height1,
+ exont,
+ )
+ svg.drawDash(
+ x2, ymod + height1, x3, ymod + height1, exont
+ )
+ svg.drawDash(
+ x3,
+ ymod + height1,
+ x3,
+ ymod + 3 * height1 / 4,
+ exont,
+ )
+ svg.drawLeftFrameRect(
+ x3,
+ ymod,
+ x4 - x3,
+ height1,
+ genet,
+ j.stop[k] % 3,
+ j.colour,
+ )
+ x1, x2 = x3, x4
+ else:
+ # draws teh blast hits
+ genrev2 = reverseList[int((i + 1) / 2)]
+ length1 = secondlist[i - 1][0]
+ length2 = secondlist[i + 1][0]
+ ymod = (height1 * (i - 1) / 2 + height2 * (i - 1) / 2) - 1 + height1
+ if graphit != None:
+ ymod += (gheight + 2 * ggap) * (min([len(thearray), i / 2 + 1]))
+ if legend == "Top" or legend == "Top & Bottom":
+ ymod += sum(toplegpos[:3]) + 40
+ y1 = ymod
+ y2 = y1 + height2 + 1
+ for j in secondlist[i]:
+ if abortCaptain:
+ return None
+ qStart, qEnd, rStart, rEnd, ident = j
+ # is the blast hit inverted
+ if (
+ (rStart < rEnd and not genrev1 and not genrev2)
+ or (rStart > rEnd and not genrev1 and genrev2)
+ or (rStart < rEnd and genrev1 and genrev2)
+ or (rStart > rEnd and genrev1 and not genrev2)
+ ):
+ crisscross = False
+ else:
+ crisscross = True
+ try:
+ ratio = round((ident - minident) / (100 - minident), 2)
+ except:
+ ratio = 1
+ if crisscross:
+ r1 = int(minblastci[0] * (1 - ratio) + maxblastci[0] * ratio)
+ r2 = int(minblastci[1] * (1 - ratio) + maxblastci[1] * ratio)
+ r3 = int(minblastci[2] * (1 - ratio) + maxblastci[2] * ratio)
+ else:
+ r1 = int(minblastc[0] * (1 - ratio) + maxblastc[0] * ratio)
+ r2 = int(minblastc[1] * (1 - ratio) + maxblastc[1] * ratio)
+ r3 = int(minblastc[2] * (1 - ratio) + maxblastc[2] * ratio)
+ if aln == "best blast":
+ shifter = blastmatch[int(i / 2)]
+ if genrev1:
+ x1e = convertPosR(length1, maxlength, width, qStart, aln)
+ x1s = convertPosR(length1, maxlength, width, qEnd, aln)
+ else:
+ x1s = convertPos(length1, maxlength, width, qStart, aln)
+ x1e = convertPos(length1, maxlength, width, qEnd, aln)
+ if aln == "best blast":
+ shifter = blastmatch[int((i + 1) / 2)]
+ if genrev2 and rStart < rEnd:
+ x2e = convertPosR(length2, maxlength, width, rStart, aln)
+ x2s = convertPosR(length2, maxlength, width, rEnd, aln)
+ elif genrev2 and rStart >= rEnd:
+ x2s = convertPosR(length2, maxlength, width, rStart, aln)
+ x2e = convertPosR(length2, maxlength, width, rEnd, aln)
+ elif not genrev2 and rStart < rEnd:
+ x2s = convertPos(length2, maxlength, width, rStart, aln)
+ x2e = convertPos(length2, maxlength, width, rEnd, aln)
+ else:
+ x2e = convertPos(length2, maxlength, width, rStart, aln)
+ x2s = convertPos(length2, maxlength, width, rEnd, aln)
+ if crisscross:
+ svg.drawBlastHit(x1s, y1, x1e, y1, x2s, y2, x2e, y2, (r1, r2, r3))
+ if blastoutline:
+ svg.drawLine(x1s, y1, x2e, y2)
+ svg.drawLine(x1e, y1, x2s, y2)
+ else:
+ svg.drawBlastHit(x1s, y1, x1e, y1, x2e, y2, x2s, y2, (r1, r2, r3))
+ if blastoutline:
+ svg.drawLine(x1s, y1, x2s, y2)
+ svg.drawLine(x1e, y1, x2e, y2)
+ svg.writesvg(filename)
+ return minident
+
+
+# The GUI
+class App:
+ def __init__(self, master):
+ self.pwd = os.getcwd()
+ self.menubar = Menu(master)
+ self.filemenu = Menu(self.menubar, tearoff=0)
+ self.filemenu.add_command(label="New Figure", command=self.defaultoptions)
+ self.filemenu.add_command(label="Save Settings", command=self.saveOptions)
+ self.filemenu.add_command(label="Load Settings", command=self.openOptions)
+ self.filemenu.add_separator()
+ self.filemenu.add_command(label="Preferences", command=self.preferencewindow)
+ self.filemenu.add_separator()
+ self.filemenu.add_command(label="Exit", command=root.quit)
+ self.menubar.add_cascade(label="File", menu=self.filemenu)
+
+ # create more pulldown menus
+ self.confmenu = Menu(self.menubar, tearoff=0)
+ self.confmenu.add_command(label="Figure", command=self.figureoptions)
+ self.confmenu.add_command(label="Annotation", command=self.annotateoptions)
+ self.confmenu.add_command(label="Blast", command=self.blastoptions)
+ self.confmenu.add_command(label="Graph", command=self.graphoptions)
+ self.confmenu.add_command(label="Subregions", command=self.annmod)
+ self.menubar.add_cascade(label="Image", menu=self.confmenu)
+
+ self.blastmenu = Menu(self.menubar, tearoff=0)
+ self.blastmenu.add_command(
+ label="Download Blast Automatically", command=self.downloadBlastAuto
+ )
+ self.blastmenu.add_command(
+ label="Download Blast Manually", command=self.downloadBlastMan
+ )
+ self.blastmenu.add_command(
+ label="Choose Blast Location", command=self.chooseBlastDir
+ )
+ self.menubar.add_cascade(label="Blast", menu=self.blastmenu)
+
+ self.helpmenu = Menu(self.menubar, tearoff=0)
+ self.helpmenu.add_command(label="Help", command=self.openhelpsite)
+ self.helpmenu.add_command(label="Support", command=self.supportwin)
+ self.helpmenu.add_separator()
+ self.helpmenu.add_command(label="About", command=self.openabout)
+ self.helpmenu.add_command(label="Reference", command=self.openref)
+ self.menubar.add_cascade(label="Help", menu=self.helpmenu)
+ master.config(menu=self.menubar)
+ frame1 = Frame(master)
+ frame1.grid(row=0, column=0, padx=40, pady=10)
+ master.geometry("+10+20")
+ self.showit = False
+ self.running = False
+ self.graphshow = False
+ self.cutstate = None
+ self.orderstate = None
+ self.blastlDir = None
+ self.blastnDir = None
+ self.dblDir = None
+ self.dbnDir = None
+ self.workingDir = "test"
+ self.mincutlist = {}
+ self.maxcutlist = {}
+ self.revlist = {}
+ self.entrynum = 0
+ self.theTitle = Label(
+ frame1, text="Easyfig 2.2.3", font="TkDefaultFont 24 bold"
+ )
+ self.theTitle.grid(row=0, column=1, columnspan=3, padx=10, sticky="W")
+ self.annLab = Label(
+ frame1, text="Annotation Files", font="TkDefaultFont 13 bold underline"
+ )
+ self.annLab.grid(row=1, column=2, pady=10)
+ self.scrollbar = Scrollbar(frame1, orient=VERTICAL)
+ self.genlist = DDlistbox(frame1, yscrollcommand=self.scrollbar.set)
+ self.genlist.bind("", self.annmod)
+ self.genlist.config(height=10)
+ self.blastlist = DDlistbox(frame1, yscrollcommand=self.scrollbar.set)
+ self.blastlist.config(height=9)
+ self.scrollbar.config(command=self.yview)
+ self.scrollbar.grid(row=2, column=1, rowspan=9, sticky=NS)
+ self.genlist.grid(row=2, column=2, rowspan=9)
+ self.annLab = Label(
+ frame1, text="Blast Files", font="TkDefaultFont 13 bold underline"
+ )
+ self.annLab.grid(row=1, column=3)
+ self.blastlist.grid(row=2, column=3, rowspan=9)
+ self.addgenbutton = Button(
+ frame1, text="Add feature file", command=self.addfeat
+ )
+ self.addgenbutton.grid(row=11, column=2, sticky=EW)
+ self.addgenbutton = Button(frame1, text="Add folder", command=self.addfolder)
+ self.addgenbutton.grid(row=12, column=2, sticky=EW)
+ self.removegenbutton = Button(
+ frame1, text="Remove feature file", command=self.removefeat
+ )
+ self.removegenbutton.grid(row=13, column=2, sticky=EW)
+
+ self.addblastbutton = Button(
+ frame1, text="Add blast file", command=self.addblast
+ )
+ self.addblastbutton.grid(row=11, column=3, sticky=EW)
+ self.removeblastbutton = Button(
+ frame1, text="Remove blast file", command=self.removeblast
+ )
+ self.removeblastbutton.grid(row=12, column=3, sticky=EW)
+
+ self.spacefiller = Label(frame1, text=" ")
+ self.spacefiller.grid(row=12, column=0)
+ self.blastit = Button(
+ frame1, text="Generate blastn Files", command=self.genBlast
+ )
+ self.blastit.grid(row=14, column=3, sticky="EW")
+ self.blastx = Button(
+ frame1, text="Generate tblastx Files", command=self.genBlastX
+ )
+ self.blastx.grid(row=15, column=3, sticky="EW")
+
+ self.outfile = StringVar(value="")
+ self.outopen = Button(frame1, text="Save As", command=self.getoutfile)
+ self.outopen.grid(row=17, column=2, columnspan=2, sticky=W)
+ self.outfilename = Entry(frame1, textvariable=self.outfile)
+ self.outfilename.grid(row=17, column=2, columnspan=2)
+ self.filetype = StringVar(value="Bitmap (bmp)")
+ self.filetypelabel = Label(frame1, text="File type:")
+ self.filetypelabel.grid(row=18, column=2, columnspan=2, pady=5, sticky=W)
+ self.filetypeentry = OptionMenu(
+ frame1,
+ self.filetype,
+ "Bitmap (bmp)",
+ "Vector file (svg)",
+ "Preview (shrink)",
+ "Preview (1:1)",
+ )
+ self.filetypeentry.grid(row=18, column=2, columnspan=2, pady=5)
+ self.createFigure = Button(
+ frame1,
+ text="Create Figure",
+ font="TkDefaultFont 12 bold",
+ width=20,
+ command=self.makeFigure,
+ )
+ self.createFigure.grid(row=19, column=2, columnspan=2, rowspan=3, sticky="NS")
+
+ self.processLab = Label(frame1, bg="#FFFF99", relief=SUNKEN)
+ self.processLab.grid(
+ row=14, column=1, rowspan=3, columnspan=2, sticky="NSEW", padx=5, pady=5
+ )
+
+ self.gap = Label(frame1, text=" ")
+ self.gap.grid(row=18, column=3)
+ self.gap2 = Label(frame1, text=" ")
+ self.gap2.grid(row=16, column=3)
+ self.gap3 = Label(frame1, text=" ")
+ self.gap3.grid(row=19, column=4)
+ self.gap4 = Label(frame1, text=" ")
+ self.gap4.grid(row=20, column=4)
+ self.gap4 = Label(frame1, text=" ")
+ self.gap4.grid(row=21, column=4)
+
+ self.defaultpreferences()
+ if os.path.exists(".easyfig.pref"):
+ self.opendefault()
+
+ def yview(self, *args):
+ apply(self.genlist.yview, args)
+ apply(self.blastlist.yview, args)
+
+ def addfolder(self):
+ tempfolder = tkFileDialog.askdirectory(
+ title="Please select a directory with feature files."
+ )
+ if tempfolder == () or tempfolder == "":
+ return
+ for i in os.listdir(tempfolder):
+ if self.entrynum == 99:
+ if self.genlist.size() == 99:
+ tkMessageBox.showerror(
+ "Maximum feature files reached.",
+ "At this time easyfig only supports 99 genomes.\nEasyfig_CL does not have a maximum limit.",
+ )
+ return
+ self.renumbergen()
+ filename = tempfolder + "/" + i
+ self.entrynum += 1
+ entryname = "%02d" % self.entrynum + ". " + filename
+ self.genlist.insert(END, entryname)
+ self.mincutlist[entryname[:2]] = "1"
+ self.maxcutlist[entryname[:2]] = "Max"
+ self.revlist[entryname[:2]] = False
+ self.genlist.xview_moveto(1)
+
+ def addfeat(self):
+ if self.entrynum == 99:
+ if self.genlist.size() == 99:
+ tkMessageBox.showerror(
+ "Maximum feature files reached.",
+ "At this time easyfig only supports 99 genomes.\nEasyfig_CL does not have a maximum limit.",
+ )
+ return
+ self.renumbergen()
+ filename = tkFileDialog.askopenfilename(
+ filetypes=[
+ (
+ "genbank/embl/fasta",
+ (
+ "*.gbk",
+ "*.embl",
+ "*.gb",
+ "*.fa",
+ "*.fna",
+ "*.dna",
+ "*.fas",
+ "*.fasta",
+ ),
+ ),
+ ("All files", "*"),
+ ]
+ )
+ if filename == "":
+ return
+ self.entrynum += 1
+ entryname = "%02d" % self.entrynum + ". " + filename
+ self.genlist.insert(END, entryname)
+ self.genlist.xview_moveto(1)
+ self.mincutlist[entryname[:2]] = "1"
+ self.maxcutlist[entryname[:2]] = "Max"
+ self.revlist[entryname[:2]] = False
+
+ def renumbergen(self):
+ try:
+ self.annwindow.destroy()
+ except:
+ pass
+ tempmincutlist = {}
+ tempmaxcutlist = {}
+ temprevlist = {}
+ for i in range(self.genlist.size()):
+ tempgen = self.genlist.get(i)
+ self.genlist.delete(i)
+ self.genlist.insert(i, "%02d" % (i + 1) + tempgen[2:])
+ tempmincutlist["%02d" % (i + 1)] = self.mincutlist[tempgen[:2]]
+ tempmaxcutlist["%02d" % (i + 1)] = self.maxcutlist[tempgen[:2]]
+ temprevlist["%02d" % (i + 1)] = self.revlist[tempgen[:2]]
+ self.mincutlist = tempmincutlist
+ self.maxcutlist = tempmaxcutlist
+ self.revlist = temprevlist
+ self.entrynum = self.genlist.size()
+ self.genlist.xview_moveto(1)
+
+ def removefeat(self):
+ self.genlist.delete(ANCHOR)
+ self.renumbergen()
+
+ def addblast(self):
+ filename = tkFileDialog.askopenfilename()
+ self.blastlist.insert(END, filename)
+ self.blastlist.xview_moveto(1)
+ self.orderstate = None
+ self.cutstate = None
+
+ def removeblast(self):
+ self.blastlist.delete(ANCHOR)
+
+ def defaultoptions(self):
+ try:
+ self.prefwin.destroy()
+ except:
+ pass
+ try:
+ self.figureoptionswindow.destroy()
+ except:
+ pass
+ try:
+ self.blastoptionswindow.destroy()
+ except:
+ pass
+ try:
+ self.annotateoptionswindow.destroy()
+ except:
+ pass
+ try:
+ self.graphoptionswindow.destroy()
+ except:
+ pass
+ try:
+ self.annwindow.destroy()
+ except:
+ pass
+ try:
+ self.doublecutswin.destroy()
+ except:
+ pass
+ self.outfile.set("")
+ self.genlist.delete(0, END)
+ self.blastlist.delete(0, END)
+ self.defaultpreferences()
+ self.entrynum = 0
+ self.cutstate = None
+ self.orderstate = None
+ if os.path.exists(".easyfig.pref"):
+ self.opendefault()
+ else:
+ self.defaultpreferences()
+
+ def defaultpreferences(self):
+ self.filetype.set("Bitmap (bmp)")
+ self.figwidthvar = StringVar(value="5000")
+ self.height1var = StringVar(value="150")
+ self.height2var = StringVar(value="500")
+ self.aln = StringVar(value="centre")
+ self.autodetect = IntVar()
+ self.autodetect.set(1)
+ self.drawfig1 = IntVar()
+ self.drawfig1.set(1)
+ self.drawfig2var = StringVar(value="0")
+
+ self.minlengthvar = StringVar(value="0")
+ self.minevalvar = StringVar(value="0.001")
+ self.minIdentvar = StringVar(value="0")
+ self.minblastc = (200, 200, 200)
+ self.minblastchex = "#C8C8C8"
+ self.minblastci = (200, 200, 200)
+ self.minblastcihex = "#C8C8C8"
+ self.maxblastc = (100, 100, 100)
+ self.maxblastchex = "#646464"
+ self.maxblastci = (100, 100, 100)
+ self.maxblastcihex = "#646464"
+ self.blastoutline = IntVar()
+ self.blastoutline.set(1)
+
+ self.leg = StringVar(value="None")
+ self.leg2 = StringVar(value="None")
+ self.legname = StringVar(value="gene")
+ self.gltvar = StringVar(value="20")
+ self.exontvar = StringVar(value="2")
+ self.genetvar = StringVar(value="1")
+
+ self.genef = IntVar()
+ self.genef.set(1)
+ self.genefcolour = (64, 224, 208)
+ self.genefcolourhex = "#40e0d0"
+ self.genefrect = StringVar(value="arrow")
+
+ self.cdsf = IntVar()
+ self.cdsfcolour = (255, 140, 0)
+ self.cdsfcolourhex = "#ff8c00"
+ self.cdsfrect = StringVar(value="arrow")
+
+ self.trnaf = IntVar()
+ self.trnafcolour = (165, 42, 42)
+ self.trnafcolourhex = "#a52a2a"
+ self.trnafrect = StringVar(value="rect")
+
+ self.miscf = IntVar()
+ self.miscfcolour = (0, 191, 255)
+ self.miscfcolourhex = "#00bfff"
+ self.miscfrect = StringVar(value="rect")
+
+ self.randfeat = StringVar()
+ self.randf = IntVar()
+ self.randfcolour = (72, 61, 139)
+ self.randfcolourhex = "#483d8b"
+ self.randfrect = StringVar(value="arrow")
+
+ self.graphtype = StringVar(value="None")
+ self.allorone = IntVar()
+ self.graphfile = StringVar()
+ self.step = StringVar(value="1000")
+ self.windsize = StringVar(value="1000")
+ self.graphheight = StringVar(value="200")
+ self.maxy = StringVar(value="Auto")
+ self.logit = IntVar()
+ self.histo = StringVar(value="Histogram")
+ self.graphlinet = StringVar(value="1")
+ self.poscol = (255, 0, 0)
+ self.poscolhex = "#FF0000"
+ self.negcol = (0, 0, 255)
+ self.negcolhex = "#0000FF"
+ self.ggap = StringVar(value="10")
+ self.blastnDir = None
+ self.dbnDir = None
+
+ def saveOptions(self):
+ filename = ""
+ filename = tkFileDialog.asksaveasfilename(
+ filetypes=[("easycfg", "*.easycfg"), ("All files", "*")]
+ )
+ if filename == "" or filename == ():
+ return
+ savefile = open(filename, "w")
+ savefile.write("\t".join(self.genlist.get(0, END)) + "\n")
+ for i in self.genlist.get(0, END):
+ savefile.write(
+ i[:2]
+ + "\t"
+ + self.mincutlist[i[:2]]
+ + "\t"
+ + self.maxcutlist[i[:2]]
+ + "\t"
+ + str(self.revlist[i[:2]])
+ + "\n"
+ )
+ savefile.write("\t".join(self.blastlist.get(0, END)) + "\n")
+
+ savefile.write(self.outfile.get() + "\n")
+ savefile.write(self.filetype.get() + "\n")
+
+ savefile.write(self.figwidthvar.get() + "\n")
+ savefile.write(self.height1var.get() + "\n")
+ savefile.write(self.height2var.get() + "\n")
+ savefile.write(self.aln.get() + "\n")
+ savefile.write(str(self.autodetect.get()) + "\n")
+ savefile.write(str(self.drawfig1.get()) + "\n")
+ savefile.write(self.drawfig2var.get() + "\n")
+
+ savefile.write(self.minlengthvar.get() + "\n")
+ savefile.write(self.minevalvar.get() + "\n")
+ savefile.write(self.minIdentvar.get() + "\n")
+ savefile.write(str(self.minblastc[0]) + "\n")
+ savefile.write(str(self.minblastc[1]) + "\n")
+ savefile.write(str(self.minblastc[2]) + "\n")
+ savefile.write(self.minblastchex + "\n")
+ savefile.write(str(self.minblastci[0]) + "\n")
+ savefile.write(str(self.minblastci[1]) + "\n")
+ savefile.write(str(self.minblastci[2]) + "\n")
+ savefile.write(self.minblastcihex + "\n")
+ savefile.write(str(self.maxblastc[0]) + "\n")
+ savefile.write(str(self.maxblastc[1]) + "\n")
+ savefile.write(str(self.maxblastc[2]) + "\n")
+ savefile.write(self.maxblastchex + "\n")
+ savefile.write(str(self.maxblastci[0]) + "\n")
+ savefile.write(str(self.maxblastci[1]) + "\n")
+ savefile.write(str(self.maxblastci[2]) + "\n")
+ savefile.write(self.maxblastcihex + "\n")
+ savefile.write(str(self.blastoutline.get()) + "\n")
+
+ savefile.write(self.leg.get() + "\n")
+ savefile.write(self.leg2.get() + "\n")
+ savefile.write(self.legname.get() + "\n")
+ savefile.write(self.gltvar.get() + "\n")
+ savefile.write(self.exontvar.get() + "\n")
+ savefile.write(self.genetvar.get() + "\n")
+
+ savefile.write(str(self.genef.get()) + "\n")
+ savefile.write(str(self.genefcolour[0]) + "\n")
+ savefile.write(str(self.genefcolour[1]) + "\n")
+ savefile.write(str(self.genefcolour[2]) + "\n")
+ savefile.write(self.genefcolourhex + "\n")
+ savefile.write(self.genefrect.get() + "\n")
+
+ savefile.write(str(self.cdsf.get()) + "\n")
+ savefile.write(str(self.cdsfcolour[0]) + "\n")
+ savefile.write(str(self.cdsfcolour[1]) + "\n")
+ savefile.write(str(self.cdsfcolour[2]) + "\n")
+ savefile.write(self.cdsfcolourhex + "\n")
+ savefile.write(self.cdsfrect.get() + "\n")
+
+ savefile.write(str(self.trnaf.get()) + "\n")
+ savefile.write(str(self.trnafcolour[0]) + "\n")
+ savefile.write(str(self.trnafcolour[1]) + "\n")
+ savefile.write(str(self.trnafcolour[2]) + "\n")
+ savefile.write(self.trnafcolourhex + "\n")
+ savefile.write(self.trnafrect.get() + "\n")
+
+ savefile.write(str(self.miscf.get()) + "\n")
+ savefile.write(str(self.miscfcolour[0]) + "\n")
+ savefile.write(str(self.miscfcolour[1]) + "\n")
+ savefile.write(str(self.miscfcolour[2]) + "\n")
+ savefile.write(self.miscfcolourhex + "\n")
+ savefile.write(self.miscfrect.get() + "\n")
+
+ savefile.write(self.randfeat.get() + "\n")
+ savefile.write(str(self.randf.get()) + "\n")
+ savefile.write(str(self.randfcolour[0]) + "\n")
+ savefile.write(str(self.randfcolour[1]) + "\n")
+ savefile.write(str(self.randfcolour[2]) + "\n")
+ savefile.write(self.randfcolourhex + "\n")
+ savefile.write(self.randfrect.get() + "\n")
+
+ savefile.write(self.graphtype.get() + "\n")
+ savefile.write(str(self.allorone.get()) + "\n")
+ savefile.write(self.graphfile.get() + "\n")
+ savefile.write(self.step.get() + "\n")
+ savefile.write(self.windsize.get() + "\n")
+ savefile.write(self.graphheight.get() + "\n")
+ savefile.write(self.maxy.get() + "\n")
+ savefile.write(str(self.logit.get()) + "\n")
+ savefile.write(self.histo.get() + "\n")
+ savefile.write(self.graphlinet.get() + "\n")
+ savefile.write(str(self.poscol[0]) + "\n")
+ savefile.write(str(self.poscol[1]) + "\n")
+ savefile.write(str(self.poscol[2]) + "\n")
+ savefile.write(self.poscolhex + "\n")
+ savefile.write(str(self.negcol[0]) + "\n")
+ savefile.write(str(self.negcol[1]) + "\n")
+ savefile.write(str(self.negcol[2]) + "\n")
+ savefile.write(self.negcolhex + "\n")
+ savefile.write(self.ggap.get() + "\n")
+ savefile.close()
+
+ def openOptions(self):
+ try:
+ filename = tkFileDialog.askopenfilename(
+ filetypes=[("easycfg", "*.easycfg"), ("All files", "*")]
+ )
+ if filename == "":
+ return
+ openfile = open(filename)
+ templist = openfile.readline().rstrip().split("\t")
+ self.genlist.delete(0, END)
+ if templist == [""]:
+ templist = []
+ for i in templist:
+ self.genlist.insert(END, i)
+ self.genlist.xview_moveto(1)
+ for i in range(len(templist)):
+ name, mincut, maxcut, rev = openfile.readline().rstrip().split("\t")
+ self.mincutlist[name] = mincut
+ self.maxcutlist[name] = maxcut
+ if rev == "True":
+ self.revlist[name] = True
+ else:
+ self.revlist[name] = False
+ templist = openfile.readline().rstrip().split("\t")
+ if templist == [""]:
+ templist = []
+ self.blastlist.delete(0, END)
+ for i in templist:
+ self.blastlist.insert(END, i)
+ self.blastlist.xview_moveto(1)
+ self.outfile.set(openfile.readline().rstrip())
+ self.filetype.set(openfile.readline().rstrip())
+
+ self.figwidthvar.set(openfile.readline().rstrip())
+ self.height1var.set(openfile.readline().rstrip())
+ self.height2var.set(openfile.readline().rstrip())
+ self.aln.set(openfile.readline().rstrip())
+ self.autodetect.set(int(openfile.readline().rstrip()))
+ self.drawfig1.set(int(openfile.readline().rstrip()))
+ self.drawfig2var.set(openfile.readline().rstrip())
+
+ self.minlengthvar.set(openfile.readline().rstrip())
+ self.minevalvar.set(openfile.readline().rstrip())
+ self.minIdentvar.set(openfile.readline().rstrip())
+ x = int(openfile.readline().rstrip())
+ y = int(openfile.readline().rstrip())
+ z = int(openfile.readline().rstrip())
+ self.minblastc = (x, y, z)
+ self.minblastchex = openfile.readline().rstrip()
+ x = int(openfile.readline().rstrip())
+ y = int(openfile.readline().rstrip())
+ z = int(openfile.readline().rstrip())
+ self.minblastci = (x, y, z)
+ self.minblastcihex = openfile.readline().rstrip()
+ x = int(openfile.readline().rstrip())
+ y = int(openfile.readline().rstrip())
+ z = int(openfile.readline().rstrip())
+ self.maxblastc = (x, y, z)
+ self.maxblastchex = openfile.readline().rstrip()
+ x = int(openfile.readline().rstrip())
+ y = int(openfile.readline().rstrip())
+ z = int(openfile.readline().rstrip())
+ self.maxblastci = (x, y, z)
+ self.maxblastcihex = openfile.readline().rstrip()
+ self.blastoutline.set(int(openfile.readline().rstrip()))
+
+ self.leg.set(openfile.readline().rstrip())
+ self.leg2.set(openfile.readline().rstrip())
+ self.legname.set(openfile.readline().rstrip())
+ self.gltvar.set(openfile.readline().rstrip())
+ self.exontvar.set(openfile.readline().rstrip())
+ self.genetvar.set(openfile.readline().rstrip())
+
+ self.genef.set(int(openfile.readline().rstrip()))
+ x = int(openfile.readline().rstrip())
+ y = int(openfile.readline().rstrip())
+ z = int(openfile.readline().rstrip())
+ self.genefcolour = (x, y, z)
+ self.genefcolourhex = openfile.readline().rstrip()
+ self.genefrect.set(openfile.readline().rstrip())
+
+ self.cdsf.set(int(openfile.readline().rstrip()))
+ x = int(openfile.readline().rstrip())
+ y = int(openfile.readline().rstrip())
+ z = int(openfile.readline().rstrip())
+ self.cdsfcolour = (x, y, z)
+ self.cdsfcolourhex = openfile.readline().rstrip()
+ self.cdsfrect.set(openfile.readline().rstrip())
+
+ self.trnaf.set(int(openfile.readline().rstrip()))
+ x = int(openfile.readline().rstrip())
+ y = int(openfile.readline().rstrip())
+ z = int(openfile.readline().rstrip())
+ self.trnafcolour = (x, y, z)
+ self.trnafcolourhex = openfile.readline().rstrip()
+ self.trnafrect.set(openfile.readline().rstrip())
+
+ self.miscf.set(int(openfile.readline().rstrip()))
+ x = int(openfile.readline().rstrip())
+ y = int(openfile.readline().rstrip())
+ z = int(openfile.readline().rstrip())
+ self.miscfcolour = (x, y, z)
+ self.miscfcolourhex = openfile.readline().rstrip()
+ self.miscfrect.set(openfile.readline().rstrip())
+
+ self.randfeat.set(openfile.readline().rstrip())
+ self.randf.set(int(openfile.readline().rstrip()))
+ x = int(openfile.readline().rstrip())
+ y = int(openfile.readline().rstrip())
+ z = int(openfile.readline().rstrip())
+ self.randfcolour = (x, y, z)
+ self.randfcolourhex = openfile.readline().rstrip()
+ self.randfrect.set(openfile.readline().rstrip())
+
+ self.graphtype.set(openfile.readline().rstrip())
+ self.allorone.set(int(openfile.readline().rstrip()))
+ self.graphfile.set(openfile.readline().rstrip())
+ self.step.set(openfile.readline().rstrip())
+ self.windsize.set(openfile.readline().rstrip())
+ self.graphheight.set(openfile.readline().rstrip())
+ self.maxy.set(openfile.readline().rstrip())
+ self.logit.set(openfile.readline().rstrip())
+ self.histo.set(openfile.readline().rstrip())
+ self.graphlinet.set(openfile.readline().rstrip())
+ x = int(openfile.readline().rstrip())
+ y = int(openfile.readline().rstrip())
+ z = int(openfile.readline().rstrip())
+ self.poscol = (x, y, z)
+ self.poscolhex = openfile.readline().rstrip()
+ x = int(openfile.readline().rstrip())
+ y = int(openfile.readline().rstrip())
+ z = int(openfile.readline().rstrip())
+ self.negcol = (x, y, z)
+ self.negcolhex = openfile.readline().rstrip()
+ self.ggap.set(openfile.readline().rstrip())
+ openfile.close()
+ except:
+ tkMessageBox.showerror("Try again.", "Easyfig config file invalid.")
+
+ def opendefault(self):
+ try:
+ if not os.path.exists(".easyfig.pref"):
+ self.defaultpreferences()
+ return
+ preffile = open(".easyfig.pref")
+ gotpref = False
+ for line in preffile:
+ if line.startswith(">"):
+ preflist = line.split("\t")[1:]
+ gotpref = True
+ preffile.close()
+ if not gotpref:
+ self.defaultpreferences()
+ return
+ self.filetype.set(preflist.pop(0))
+
+ self.figwidthvar.set(preflist.pop(0))
+ self.height1var.set(preflist.pop(0))
+ self.height2var.set(preflist.pop(0))
+ self.aln.set(preflist.pop(0))
+ self.autodetect.set(int(preflist.pop(0)))
+ self.drawfig1.set(int(preflist.pop(0)))
+ self.drawfig2var.set(preflist.pop(0))
+
+ self.minlengthvar.set(preflist.pop(0))
+ self.minevalvar.set(preflist.pop(0))
+ self.minIdentvar.set(preflist.pop(0))
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.minblastc = (x, y, z)
+ self.minblastchex = preflist.pop(0)
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.minblastci = (x, y, z)
+ self.minblastcihex = preflist.pop(0)
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.maxblastc = (x, y, z)
+ self.maxblastchex = preflist.pop(0)
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.maxblastci = (x, y, z)
+ self.maxblastcihex = preflist.pop(0)
+ self.blastoutline.set(int(preflist.pop(0)))
+
+ self.leg.set(preflist.pop(0))
+ self.leg2.set(preflist.pop(0))
+ self.legname.set(preflist.pop(0))
+ self.gltvar.set(preflist.pop(0))
+ self.exontvar.set(preflist.pop(0))
+ self.genetvar.set(preflist.pop(0))
+
+ self.genef.set(int(preflist.pop(0)))
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.genefcolour = (x, y, z)
+ self.genefcolourhex = preflist.pop(0)
+ self.genefrect.set(preflist.pop(0))
+
+ self.cdsf.set(int(preflist.pop(0)))
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.cdsfcolour = (x, y, z)
+ self.cdsfcolourhex = preflist.pop(0)
+ self.cdsfrect.set(preflist.pop(0))
+
+ self.trnaf.set(int(preflist.pop(0)))
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.trnafcolour = (x, y, z)
+ self.trnafcolourhex = preflist.pop(0)
+ self.trnafrect.set(preflist.pop(0))
+
+ self.miscf.set(int(preflist.pop(0)))
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.miscfcolour = (x, y, z)
+ self.miscfcolourhex = preflist.pop(0)
+ self.miscfrect.set(preflist.pop(0))
+
+ self.randfeat.set(preflist.pop(0))
+ self.randf.set(int(preflist.pop(0)))
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.randfcolour = (x, y, z)
+ self.randfcolourhex = preflist.pop(0)
+ self.randfrect.set(preflist.pop(0))
+
+ self.graphtype.set(preflist.pop(0))
+ self.allorone.set(int(preflist.pop(0)))
+ self.graphfile.set(preflist.pop(0))
+ self.step.set(preflist.pop(0))
+ self.windsize.set(preflist.pop(0))
+ self.graphheight.set(preflist.pop(0))
+ self.maxy.set(preflist.pop(0))
+ self.logit.set(preflist.pop(0))
+ self.histo.set(preflist.pop(0))
+ self.graphlinet.set(preflist.pop(0))
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.poscol = (x, y, z)
+ self.poscolhex = preflist.pop(0)
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.negcol = (x, y, z)
+ self.negcolhex = preflist.pop(0)
+ self.ggap.set(preflist.pop(0))
+ self.blastnDir = preflist.pop(0)
+ if self.blastnDir == "None":
+ self.blastnDir = None
+ self.dbnDir = preflist.pop(0).rstrip()
+ if self.dbnDir == "None":
+ self.dbnDir = None
+ except:
+ self.defaultpreferences()
+
+ def openhelpsite(self):
+ webbrowser.open_new("https://github.com/mjsull/Easyfig/wiki")
+
+ def openabout(self):
+ try:
+ self.aboutpanel.destroy()
+ except:
+ pass
+ self.aboutpanel = Toplevel()
+ self.frame7 = Frame(self.aboutpanel)
+ self.about1label = Label(
+ self.frame7, text="Easyfig", font="TkDefaultFont 13 bold"
+ )
+ self.about1label.grid(row=0, column=0)
+ self.about2label = Label(
+ self.frame7,
+ text="Easyfig is a Python application for creating linear\n\
+comparison figures of multiple genomic loci\n with an easy-to-use graphical user interface (GUI).\n\n\
+Version 2.2.3\n\nIf Easyfig is used to generate figures for publication,\n\
+please cite our paper:\n\n\
+Sullivan MJ, Petty NK, Beatson SA. (2011)\nEasyfig: a genome comparison visualiser.\nBioinformatics; 27 (7): 1009-1010",
+ )
+ self.about2label.grid(row=1, column=0)
+ self.frame7.grid(padx=10, pady=10)
+
+ def supportwin(self):
+ try:
+ self.supportpanel.destroy()
+ except:
+ pass
+ self.supportpanel = Toplevel()
+ self.frame9 = Frame(self.supportpanel)
+ self.about1label1 = Label(
+ self.frame9, text="Easyfig", font="TkDefaultFont 13 bold"
+ )
+ self.about1label1.grid(row=0, column=0)
+ self.supportlabel2 = Label(
+ self.frame9,
+ text="written by Mitchell Sullivan - mjsull@gmail.com\n\
+To submit a bug please visit https://github.com/mjsull/Easyfig/issues.",
+ )
+ self.supportlabel2.grid(row=1, column=0)
+ self.frame9.grid(padx=10, pady=10)
+
+ def preferencewindow(self):
+ try:
+ self.prefwin.destroy()
+ except:
+ pass
+ self.prefwin = Toplevel()
+ self.frame8 = Frame(self.prefwin)
+ self.prefwin.title("preferences")
+ self.scrollbar3 = Scrollbar(self.frame8)
+ self.preflist = Listbox(self.frame8, yscrollcommand=self.scrollbar3.set)
+ templist = ["easyfig_standard"]
+ validfile = True
+ if os.path.exists(".easyfig.pref"):
+ preffile = open(".easyfig.pref")
+ for line in preffile:
+ if len(line.split("\t")) == 87:
+ templist.append(line.split("\t")[0])
+ else:
+ validfile = False
+ if not validfile:
+ nocompare = tkMessageBox.askquestion(
+ "Preference file not valid",
+ "Do you wish to create a new preference file at "
+ + os.getcwd()
+ + "/.easyfig.pref?",
+ parent=self.frame8,
+ )
+ if nocompare == "no":
+ return
+ else:
+ preffile = open(".easyfig.pref", "w")
+ preffile.close()
+ templist.sort(key=str.lower)
+ for i in templist:
+ self.preflist.insert(END, i)
+ self.preflist.grid(column=1, row=0, rowspan=10)
+ self.scrollbar3.config(command=self.preflist.yview)
+ self.scrollbar3.grid(column=0, row=0, rowspan=10, sticky=NS)
+ self.addprefbut = Button(
+ self.frame8, text="Save preferences as", command=self.addpref
+ )
+ self.addprefbut.grid(column=2, row=0, sticky=EW)
+ self.loadprefbut = Button(
+ self.frame8, text="Load preferences", command=self.loadpref
+ )
+ self.loadprefbut.grid(column=2, row=1, sticky=EW)
+ self.removeprefbut = Button(self.frame8, text="Remove", command=self.removepref)
+ self.removeprefbut.grid(column=2, row=2, sticky=EW)
+ self.setdefaultbut = Button(
+ self.frame8, text="Set as default", command=self.setdefault
+ )
+ self.setdefaultbut.grid(column=2, row=3, sticky=EW)
+ self.closeprefwinbut = Button(
+ self.frame8, text="close", command=self.closeprefwin
+ )
+ self.closeprefwinbut.grid(column=2, row=9, sticky=E)
+ self.frame8.grid(padx=20, pady=20)
+
+ def addpref(self):
+ preffile = open(".easyfig.pref", "a")
+ savename = tkSimpleDialog.askstring(
+ "Input name",
+ "Please choose name to save preferences under.",
+ parent=self.frame8,
+ )
+ if savename == None:
+ return None
+ while savename in self.preflist.get(0, END):
+ savename = tkSimpleDialog.askstring(
+ "Name taken",
+ "Please choose name to save preferences under.",
+ parent=self.frame8,
+ )
+ if savename == None:
+ return None
+ savestring = savename + "\t"
+ savestring += self.filetype.get() + "\t"
+ savestring += self.figwidthvar.get() + "\t"
+ savestring += self.height1var.get() + "\t"
+ savestring += self.height2var.get() + "\t"
+ savestring += self.aln.get() + "\t"
+ savestring += str(self.autodetect.get()) + "\t"
+ savestring += str(self.drawfig1.get()) + "\t"
+ savestring += self.drawfig2var.get() + "\t"
+ savestring += self.minlengthvar.get() + "\t"
+ savestring += self.minevalvar.get() + "\t"
+ savestring += self.minIdentvar.get() + "\t"
+ savestring += str(self.minblastc[0]) + "\t"
+ savestring += str(self.minblastc[1]) + "\t"
+ savestring += str(self.minblastc[2]) + "\t"
+ savestring += self.minblastchex + "\t"
+ savestring += str(self.minblastci[0]) + "\t"
+ savestring += str(self.minblastci[1]) + "\t"
+ savestring += str(self.minblastci[2]) + "\t"
+ savestring += self.minblastcihex + "\t"
+ savestring += str(self.maxblastc[0]) + "\t"
+ savestring += str(self.maxblastc[1]) + "\t"
+ savestring += str(self.maxblastc[2]) + "\t"
+ savestring += self.maxblastchex + "\t"
+ savestring += str(self.maxblastci[0]) + "\t"
+ savestring += str(self.maxblastci[1]) + "\t"
+ savestring += str(self.maxblastci[2]) + "\t"
+ savestring += self.maxblastcihex + "\t"
+ savestring += str(self.blastoutline.get()) + "\t"
+ savestring += self.leg.get() + "\t"
+ savestring += self.leg2.get() + "\t"
+ savestring += self.legname.get() + "\t"
+ savestring += self.gltvar.get() + "\t"
+ savestring += self.exontvar.get() + "\t"
+ savestring += self.genetvar.get() + "\t"
+ savestring += str(self.genef.get()) + "\t"
+ savestring += str(self.genefcolour[0]) + "\t"
+ savestring += str(self.genefcolour[1]) + "\t"
+ savestring += str(self.genefcolour[2]) + "\t"
+ savestring += self.genefcolourhex + "\t"
+ savestring += self.genefrect.get() + "\t"
+ savestring += str(self.cdsf.get()) + "\t"
+ savestring += str(self.cdsfcolour[0]) + "\t"
+ savestring += str(self.cdsfcolour[1]) + "\t"
+ savestring += str(self.cdsfcolour[2]) + "\t"
+ savestring += self.cdsfcolourhex + "\t"
+ savestring += self.cdsfrect.get() + "\t"
+ savestring += str(self.trnaf.get()) + "\t"
+ savestring += str(self.trnafcolour[0]) + "\t"
+ savestring += str(self.trnafcolour[1]) + "\t"
+ savestring += str(self.trnafcolour[2]) + "\t"
+ savestring += self.trnafcolourhex + "\t"
+ savestring += self.trnafrect.get() + "\t"
+ savestring += str(self.miscf.get()) + "\t"
+ savestring += str(self.miscfcolour[0]) + "\t"
+ savestring += str(self.miscfcolour[1]) + "\t"
+ savestring += str(self.miscfcolour[2]) + "\t"
+ savestring += self.miscfcolourhex + "\t"
+ savestring += self.miscfrect.get() + "\t"
+ savestring += self.randfeat.get() + "\t"
+ savestring += str(self.randf.get()) + "\t"
+ savestring += str(self.randfcolour[0]) + "\t"
+ savestring += str(self.randfcolour[1]) + "\t"
+ savestring += str(self.randfcolour[2]) + "\t"
+ savestring += self.randfcolourhex + "\t"
+ savestring += self.randfrect.get() + "\t"
+ savestring += self.graphtype.get() + "\t"
+ savestring += str(self.allorone.get()) + "\t"
+ savestring += self.graphfile.get() + "\t"
+ savestring += self.step.get() + "\t"
+ savestring += self.windsize.get() + "\t"
+ savestring += self.graphheight.get() + "\t"
+ savestring += self.maxy.get() + "\t"
+ savestring += str(self.logit.get()) + "\t"
+ savestring += self.histo.get() + "\t"
+ savestring += self.graphlinet.get() + "\t"
+ savestring += str(self.poscol[0]) + "\t"
+ savestring += str(self.poscol[1]) + "\t"
+ savestring += str(self.poscol[2]) + "\t"
+ savestring += self.poscolhex + "\t"
+ savestring += str(self.negcol[0]) + "\t"
+ savestring += str(self.negcol[1]) + "\t"
+ savestring += str(self.negcol[2]) + "\t"
+ savestring += self.negcolhex + "\t"
+ savestring += self.ggap.get() + "\t"
+ if self.blastnDir == None:
+ savestring += "None\t"
+ else:
+ savestring += self.blastnDir + "\t"
+ if self.dbnDir == None:
+ savestring += "None\n"
+ else:
+ savestring += self.dbnDir + "\n"
+ if savestring.count("\t") == 86:
+ if savestring.startswith(">"):
+ tkMessageBox.showerror(
+ "Try again.", "Please remove > from start of preference name."
+ )
+ else:
+ preffile.write(savestring)
+ self.preflist.insert(END, savename)
+ else:
+ tkMessageBox.showerror(
+ "Try again.", " character in variable, please remove."
+ )
+ preffile.close()
+
+ def loadpref(self):
+ try:
+ prefname = self.preflist.get(ACTIVE)
+ if prefname == "easyfig_standard":
+ self.defaultpreferences()
+ return
+ if not os.path.exists(".easyfig.pref"):
+ tkMessageBox.showerror("Try again.", "Where'd the preference file go?")
+ return
+ preffile = open(".easyfig.pref")
+ for line in preffile:
+ splitline = line.split("\t")
+ if splitline[0] == prefname:
+ preflist = splitline[1:]
+ preffile.close()
+ self.filetype.set(preflist.pop(0))
+
+ self.figwidthvar.set(preflist.pop(0))
+ self.height1var.set(preflist.pop(0))
+ self.height2var.set(preflist.pop(0))
+ self.aln.set(preflist.pop(0))
+ self.autodetect.set(int(preflist.pop(0)))
+ self.drawfig1.set(int(preflist.pop(0)))
+ self.drawfig2var.set(preflist.pop(0))
+
+ self.minlengthvar.set(preflist.pop(0))
+ self.minevalvar.set(preflist.pop(0))
+ self.minIdentvar.set(preflist.pop(0))
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.minblastc = (x, y, z)
+ self.minblastchex = preflist.pop(0)
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.minblastci = (x, y, z)
+ self.minblastcihex = preflist.pop(0)
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.maxblastc = (x, y, z)
+ self.maxblastchex = preflist.pop(0)
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.maxblastci = (x, y, z)
+ self.maxblastcihex = preflist.pop(0)
+ self.blastoutline.set(int(preflist.pop(0)))
+
+ self.leg.set(preflist.pop(0))
+ self.leg2.set(preflist.pop(0))
+ self.legname.set(preflist.pop(0))
+ self.gltvar.set(preflist.pop(0))
+ self.exontvar.set(preflist.pop(0))
+ self.genetvar.set(preflist.pop(0))
+
+ self.genef.set(int(preflist.pop(0)))
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.genefcolour = (x, y, z)
+ self.genefcolourhex = preflist.pop(0)
+ self.genefrect.set(preflist.pop(0))
+
+ self.cdsf.set(int(preflist.pop(0)))
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.cdsfcolour = (x, y, z)
+ self.cdsfcolourhex = preflist.pop(0)
+ self.cdsfrect.set(preflist.pop(0))
+
+ self.trnaf.set(int(preflist.pop(0)))
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.trnafcolour = (x, y, z)
+ self.trnafcolourhex = preflist.pop(0)
+ self.trnafrect.set(preflist.pop(0))
+
+ self.miscf.set(int(preflist.pop(0)))
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.miscfcolour = (x, y, z)
+ self.miscfcolourhex = preflist.pop(0)
+ self.miscfrect.set(preflist.pop(0))
+
+ self.randfeat.set(preflist.pop(0))
+ self.randf.set(int(preflist.pop(0)))
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.randfcolour = (x, y, z)
+ self.randfcolourhex = preflist.pop(0)
+ self.randfrect.set(preflist.pop(0))
+
+ self.graphtype.set(preflist.pop(0))
+ self.allorone.set(int(preflist.pop(0)))
+ self.graphfile.set(preflist.pop(0))
+ self.step.set(preflist.pop(0))
+ self.windsize.set(preflist.pop(0))
+ self.graphheight.set(preflist.pop(0))
+ self.maxy.set(preflist.pop(0))
+ self.logit.set(preflist.pop(0))
+ self.histo.set(preflist.pop(0))
+ self.graphlinet.set(preflist.pop(0))
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.poscol = (x, y, z)
+ self.poscolhex = preflist.pop(0)
+ x = int(preflist.pop(0))
+ y = int(preflist.pop(0))
+ z = int(preflist.pop(0))
+ self.negcol = (x, y, z)
+ self.negcolhex = preflist.pop(0)
+ self.ggap.set(preflist.pop(0))
+ self.blastnDir = preflist.pop(0)
+ if self.blastnDir == "None":
+ self.blastnDir = None
+ self.dbnDir = preflist.pop(0).rstrip()
+ if self.dbnDir == "None":
+ self.dbnDir = None
+ except:
+ self.defaultpreferences()
+ tkMessageBox.showerror(
+ "Preference File Invalid", "Loaded default preferences."
+ )
+ nocompare = tkMessageBox.askquestion(
+ "Preference file not valid",
+ "Do you wish to create a new preference file at "
+ + os.getcwd()
+ + "/.easyfig.pref?",
+ parent=self.frame8,
+ )
+ if nocompare == "no":
+ return
+ else:
+ preffile = open(".easyfig.pref", "w")
+ preffile.close()
+ self.preflist.delete(0, END)
+ self.preflist.insert("easyfig_standard")
+
+ def removepref(self):
+ nocompare = tkMessageBox.askquestion(
+ "Delete?",
+ "Are you sure you wish to delete this preference?",
+ parent=self.frame8,
+ )
+ if nocompare == "no":
+ return
+ preffile = open(".easyfig.pref")
+ preflist = []
+ prefname = self.preflist.get(ACTIVE)
+ self.preflist.delete(ACTIVE)
+ for line in preffile:
+ if not line.split("\t")[0] == prefname:
+ preflist.append(line)
+ preffile.close()
+ preffile = open(".easyfig.pref", "w")
+ for i in preflist:
+ preffile.write(i)
+ preffile.close()
+
+ def setdefault(self):
+ preffile = open(".easyfig.pref")
+ preflist = []
+ prefname = self.preflist.get(ACTIVE)
+ if prefname.startswith(">"):
+ return
+ templist = []
+ for line in preffile:
+ if line.startswith(">"):
+ line = line[1:]
+ elif line.split("\t")[0] == prefname:
+ line = ">" + line
+ templist.append(line.split("\t")[0])
+ preflist.append(line)
+ preffile.close()
+ preffile = open(".easyfig.pref", "w")
+ for i in preflist:
+ preffile.write(i)
+ self.preflist.delete(0, END)
+ templist.append("easyfig_standard")
+ templist.sort(key=str.lower)
+ for i in templist:
+ self.preflist.insert(END, i)
+ preffile.close()
+
+ def closeprefwin(self):
+ self.prefwin.destroy()
+
+ def openref(self):
+ webbrowser.open_new("http://www.ncbi.nlm.nih.gov/pubmed/21278367")
+
+ def pickposcol(self):
+ colour = tkColorChooser.askcolor(self.poscol, parent=self.graphoptionswindow)
+ if colour != None:
+ self.poscol = colour[0]
+ self.poscolhex = colour[1]
+ self.poscollabel.configure(bg=colour[1])
+
+ def picknegcol(self):
+ colour = tkColorChooser.askcolor(self.negcol, parent=self.graphoptionswindow)
+ if colour != None:
+ self.negcol = colour[0]
+ self.negcolhex = colour[1]
+ self.negcollabel.configure(bg=colour[1])
+
+ def getGCcontent(self, filename, mincut, maxcut):
+ try:
+ gen = open(filename)
+ getseq = False
+ getembl = False
+ seq = ""
+ for line in gen:
+ if line.startswith("ORIGIN"):
+ getseq = True
+ elif line.startswith("SQ Sequence"):
+ getembl = True
+ elif line.startswith("//"):
+ getseq = False
+ getembl = False
+ elif getseq:
+ seq += "".join(line.split()[1:])
+ elif getembl:
+ seq += "".join(line.split()[:-1])
+ gen.close()
+ seq = seq.upper()
+ except:
+ tkMessageBox.showerror(
+ "Try again.",
+ "feature file " + filename + " not valid, or does not exist.",
+ )
+ return None
+ if len(seq) == 0:
+ tkMessageBox.showerror(
+ "Try again.", "Sequence not found in feature file " + filename + "."
+ )
+ return None
+ if maxcut == "Max":
+ seq = seq[int(mincut) - 1 :]
+ elif int(maxcut) <= int(mincut):
+ seq = seq[int(mincut) - 1 :] + seq[: int(maxcut) + 1]
+ else:
+ seq = seq[int(mincut) - 1 : int(maxcut) + 1]
+ window1 = int(self.windsize.get()) / 2
+ window2 = int(self.windsize.get()) - window1
+ thearray = []
+ for i in range(0, len(seq), int(self.step.get())):
+ seqstring = seq[max([0, i - window1]) : i + window2]
+ thearray.append(
+ (seqstring.count("G") + seqstring.count("C")) * 1.0 / len(seqstring)
+ - 0.5
+ )
+ return thearray
+
+ def getGCskew(self, filename, mincut, maxcut):
+ try:
+ getseq = False
+ getembl = False
+ seq = ""
+ gen = open(filename)
+ for line in gen:
+ if line.startswith("ORIGIN"):
+ getseq = True
+ elif line.startswith("SQ Sequence"):
+ getembl = True
+ elif line.startswith("//"):
+ getseq = False
+ getembl = False
+ elif getseq:
+ seq += "".join(line.split()[1:])
+ elif getembl:
+ seq += "".join(line.split()[:-1])
+ gen.close()
+ seq = seq.upper()
+ except:
+ tkMessageBox.showerror(
+ "Try again.",
+ "feature file " + filename + " not valid, or does not exist.",
+ )
+ return None
+ if len(seq) == 0:
+ tkMessageBox.showerror(
+ "Try again.", "Sequence not found in feature file " + filename + "."
+ )
+ return None
+ window1 = int(self.windsize.get()) / 2
+ window2 = int(self.windsize.get()) - window1
+ if maxcut == "Max":
+ seq = seq[int(mincut) - 1 :]
+ elif int(maxcut) <= int(mincut):
+ seq = seq[int(mincut) - 1 :] + seq[: int(maxcut) + 1]
+ else:
+ seq = seq[int(mincut) - 1 : int(maxcut) + 1]
+ thearray = []
+ for i in range(0, len(seq), int(self.step.get())):
+ seqstring = seq[max([0, i - window1]) : i + window2]
+ gcount = seqstring.count("G")
+ ccount = seqstring.count("C")
+ try:
+ thearray.append((gcount - ccount) * 1.0 / (gcount + ccount))
+ except:
+ thearray.append(0)
+ return thearray
+
+ def getCoverage(self):
+ # DEFNIITION: takes a file and reads in all contigs, their start positions and the reads located within the contig
+ # REQUIRES: a valid ace file
+ # RETURNS: A list of objects of class contig
+ seq = ""
+ getseq = False
+ getembl = False
+ try:
+ gen = open(self.gen1.get())
+ for line in gen:
+ if line.startswith("ORIGIN"):
+ getseq = True
+ elif line.startswith("SQ Sequence"):
+ getembl = True
+ elif line.startswith("//"):
+ getseq = False
+ getembl = False
+ elif getseq:
+ seq += "".join(line.split()[1:])
+ elif getembl:
+ seq += "".join(line.split()[:-1])
+ gen.close()
+ except:
+ tkMessageBox.showerror(
+ "Try again.", "feature file not valid, or does not exist."
+ )
+ return None
+ if len(seq) == 0:
+ tkMessageBox.showerror("Try again.", "Sequence not found in feature file.")
+ return None
+ seq = seq.lower()
+ if self.gen1maxcut.get() == "Max":
+ seq = seq[int(self.gen1mincut.get()) - 1 :]
+ elif int(self.gen1maxcut) <= int(self.gen1mincut):
+ seq = seq[int(self.gen1mincut) - 1 :] + seq[: int(self.gen1maxcut) + 1]
+ else:
+ seq = seq[int(self.gen1mincut.get()) - 1 : (self.gen1maxcut.get()) + 1]
+ outlist = [0 for i in range(len(seq))]
+ readlist = [] # list of reads to be added to the contig class
+ index = 0 # switches to 1 once program has dealt with the initial contig
+ # iterates through the file determines what information is contained in each line then reads it to the
+ # right locationregular expressions python
+ transtab = string.maketrans("atgc", "tacg")
+ for line in file:
+ # puts name in file and starts reading sequence below
+ if line.startswith("CO "):
+ if index != 0:
+ freqDict = {}
+ for j in readlist:
+ for k in range(j.startpos, (j.startpos + j.readLength)):
+ if k in freqDict:
+ freqDict[k] += 1
+ else:
+ freqDict[k] = 1
+ coverageList = []
+ for j in range(1, len(contigSeq) + 1):
+ if contigSeq[j - 1] != "*":
+ coverageList.append(freqDict[j])
+ contigSeq = contigSeq.lower()
+ thepos = seq.find(contigSeq)
+ if thepos != -1:
+ outlist = (
+ outlist[:thepos]
+ + coverageList
+ + outlist[thepos + len(coverageList) :]
+ )
+ else:
+ contigSeq = contigSeq[::-1]
+ contigSeq = contigSeq.translate(transtab)
+ thepos = seq.find(contigSeq)
+ if thepos != -1:
+ coverageList.reverse()
+ outlist = (
+ outlist[:thepos]
+ + coverageList
+ + outlist[thepos + len(coverageList) :]
+ )
+ readlist = []
+ index = 1
+ contigSeq = ""
+ contigName = line.split()[
+ 1
+ ] # splits the line into a list with elements seperated by whitespace characters
+ # then returns the second element of that list (the name)
+ readnumber = 0 # initiates the read number used to determine where the readsequence will be added
+ # creates a object of class read with the name and location within the contig, leaves sequence as the
+ # empty string to be read in later
+ elif line.startswith("BQ"):
+ index = 2
+ elif line.startswith("AF "):
+ readIt = (
+ line.split()
+ ) # splits the line into a list of strings seperated by whitespace characters
+ readName = readIt[1] # the name of the read
+ readPos = int(readIt[3]) # the position of the read within the contig
+ readInstance = read(
+ readName, readPos, None
+ ) # creates an instance of class read
+ readlist.append(readInstance) # appends to list
+ elif index == 1:
+ contigSeq += line[:-1]
+ elif line.startswith("QA "):
+ readlist[readnumber].startpos = (
+ readlist[readnumber].startpos + int(line.split()[1]) - 1
+ )
+ readlist[readnumber].readLength = (
+ int(line.split()[2]) - int(line.split()[1]) + 1
+ )
+ readnumber += 1
+ freqDict = {}
+ for j in readlist:
+ for k in range(j.startpos, (j.startpos + j.readLength)):
+ if k in freqDict:
+ freqDict[k] += 1
+ else:
+ freqDict[k] = 1
+ coverageList = []
+ for j in range(1, len(contigSeq) + 1):
+ if contigSeq[j - 1] != "*":
+ coverageList.append(freqDict[j])
+ contigSeq = contigSeq.lower()
+ thepos = seq.find(contigSeq)
+ if thepos != -1:
+ outlist = (
+ outlist[:thepos] + coverageList + outlist[thepos + len(coverageList) :]
+ )
+ else:
+ contigSeq = contigSeq[::-1]
+ contigSeq = contigSeq.translate(transtab)
+ thepos = seq.find(contigSeq)
+ if thepos != -1:
+ coverageList.reverse()
+ outlist = (
+ outlist[:thepos]
+ + coverageList
+ + outlist[thepos + len(coverageList) :]
+ )
+ return outlist
+
+ def getCustom(self):
+ try:
+ thearray = []
+ gen = open(self.graphfile.get())
+ templine = gen.readline().rstrip().split("\t")
+ linelen = len(templine)
+ for i in templine:
+ thearray.append([float(i)])
+ for line in gen:
+ templine = line.rstrip().split("\t")
+ for i in range(len(templine)):
+ if templine[i] != "":
+ thearray[i].append(float(templine[i]))
+ return thearray
+ except:
+ tkMessageBox.showerror(
+ "Try again.", "graph file not valid, or does not exist."
+ )
+ return None
+
+ def graphtypechanges(self, something):
+ if something == "None":
+ self.alloroneentry.config(state=DISABLED)
+ self.graphfileentry.config(state=DISABLED)
+ self.graphfilebut.config(state=DISABLED)
+ self.stepentry.config(state=DISABLED)
+ self.windsizeentry.config(state=DISABLED)
+ self.graphheightentry.config(state=DISABLED)
+ self.maxyentry.config(state=DISABLED)
+ self.histoentry.config(state=DISABLED)
+ self.graphlinetentry.config(state=DISABLED)
+ self.poscolbutton.config(state=DISABLED)
+ self.negcolbutton.config(state=DISABLED)
+ self.logitbut.config(state=DISABLED)
+ self.ggapentry.config(state=DISABLED)
+ elif something == "GC Content":
+ self.alloroneentry.config(state=NORMAL)
+ self.graphfileentry.config(state=DISABLED)
+ self.graphfilebut.config(state=DISABLED)
+ self.stepentry.config(state=NORMAL)
+ self.windsizeentry.config(state=NORMAL)
+ self.graphheightentry.config(state=NORMAL)
+ self.maxyentry.config(state=NORMAL)
+ self.histoentry.config(state=NORMAL)
+ self.graphlinetentry.config(state=NORMAL)
+ self.poscolbutton.config(state=NORMAL)
+ self.negcolbutton.config(state=NORMAL)
+ self.logitbut.config(state=DISABLED)
+ self.ggapentry.config(state=NORMAL)
+ elif something == "GC Skew":
+ self.alloroneentry.config(state=NORMAL)
+ self.graphfileentry.config(state=DISABLED)
+ self.graphfilebut.config(state=DISABLED)
+ self.stepentry.config(state=NORMAL)
+ self.windsizeentry.config(state=NORMAL)
+ self.graphheightentry.config(state=NORMAL)
+ self.maxyentry.config(state=NORMAL)
+ self.histoentry.config(state=NORMAL)
+ self.graphlinetentry.config(state=NORMAL)
+ self.poscolbutton.config(state=NORMAL)
+ self.negcolbutton.config(state=NORMAL)
+ self.logitbut.config(state=DISABLED)
+ self.ggapentry.config(state=NORMAL)
+ elif something == "Coverage":
+ self.alloroneentry.config(state=DISABLED)
+ self.graphfileentry.config(state=NORMAL)
+ self.graphfilebut.config(state=NORMAL)
+ self.stepentry.config(state=DISABLED)
+ self.windsizeentry.config(state=NORMAL)
+ self.graphheightentry.config(state=NORMAL)
+ self.maxyentry.config(state=NORMAL)
+ self.histoentry.config(state=NORMAL)
+ self.graphlinetentry.config(state=NORMAL)
+ self.poscolbutton.config(state=NORMAL)
+ self.negcolbutton.config(state=DISABLED)
+ self.logitbut.config(state=NORMAL)
+ self.ggapentry.config(state=NORMAL)
+ elif something == "Custom":
+ self.alloroneentry.config(state=NORMAL)
+ self.graphfileentry.config(state=NORMAL)
+ self.graphfilebut.config(state=NORMAL)
+ self.stepentry.config(state=DISABLED)
+ self.windsizeentry.config(state=DISABLED)
+ self.graphheightentry.config(state=NORMAL)
+ self.maxyentry.config(state=NORMAL)
+ self.histoentry.config(state=NORMAL)
+ self.graphlinetentry.config(state=NORMAL)
+ self.poscolbutton.config(state=NORMAL)
+ self.negcolbutton.config(state=NORMAL)
+ self.logitbut.config(state=NORMAL)
+ self.ggapentry.config(state=NORMAL)
+
+ def figureoptions(self):
+ try:
+ self.figureoptionswindow.destroy()
+ except:
+ pass
+ self.figureoptionswindow = Toplevel()
+ self.figureoptionswindow.title("Figure")
+ self.frame2 = Frame(self.figureoptionswindow)
+ self.mainoptionslab = Label(
+ self.frame2, text="Figure Options", font="TkDefaultFont 13 bold underline"
+ )
+ self.mainoptionslab.grid(row=0, column=0)
+ self.figwidthlabel = Label(self.frame2, text="Width of Figure (pixels):")
+ self.figwidthlabel.grid(row=1, column=0)
+ self.figwidthentry = Entry(self.frame2, textvariable=self.figwidthvar)
+ self.figwidthentry.grid(row=1, column=1)
+ self.gltlabel = Label(self.frame2, text="Thickness of genome line:")
+ self.gltlabel.grid(row=2, column=0)
+ self.gltentry = Entry(self.frame2, textvariable=self.gltvar)
+ self.gltentry.grid(row=2, column=1)
+ self.height1label = Label(self.frame2, text="Height of genes in figure:")
+ self.height1label.grid(row=3, column=0)
+ self.height1entry = Entry(self.frame2, textvariable=self.height1var)
+ self.height1entry.grid(row=3, column=1)
+ self.height2label = Label(self.frame2, text="Height of Blast hits in figure:")
+ self.height2label.grid(row=4, column=0)
+ self.height2entry = Entry(self.frame2, textvariable=self.height2var)
+ self.height2entry.grid(row=4, column=1)
+ self.alnlabel = Label(self.frame2, text="Alignment of genomes:")
+ self.alnlabel.grid(row=5, column=0)
+ self.alnentry = OptionMenu(
+ self.frame2, self.aln, "left", "centre", "right", "best blast"
+ )
+ self.alnentry.config(width=5)
+ self.alnentry.grid(row=5, column=1, sticky=EW)
+ self.legendoptionslab = Label(
+ self.frame2, text="Legend Options", font="TkDefaultFont 13 bold"
+ )
+ self.legendoptionslab.grid(row=6, column=0)
+ self.drawfig1label = Label(self.frame2, text="Draw Blast identity legend?")
+ self.drawfig1label.grid(row=7, column=0)
+ self.drawfig1entry = Checkbutton(self.frame2, variable=self.drawfig1)
+ self.drawfig1entry.grid(row=7, column=1)
+ self.drawfig2label = Label(
+ self.frame2, text="Length of scale legend (in base pairs):"
+ )
+ self.drawfig2label.grid(row=8, column=0)
+ self.drawfig2entry = Entry(self.frame2, textvariable=self.drawfig2var)
+ self.drawfig2entry.grid(row=8, column=1)
+ self.leg2label = Label(self.frame2, text="Feature Legend:")
+ self.leg2label.grid(row=9, column=0)
+ self.leg2entry = OptionMenu(
+ self.frame2, self.leg2, "None", "Single column", "Two columns"
+ )
+ self.leg2entry.grid(row=9, column=1, sticky=EW)
+ self.legnamelabel = Label(self.frame2, text="Get feature name from")
+ self.legnamelabel.grid(row=10, column=0)
+ self.legnameentry = OptionMenu(
+ self.frame2, self.legname, "gene", "product", "locus_tag", "note"
+ )
+ self.legnameentry.grid(row=10, column=1, sticky=EW)
+ self.figureoptionsclosebutton = Button(
+ self.frame2, text="close", command=self.figureoptionsclose
+ )
+ self.figureoptionsclosebutton.grid(row=11, column=1, sticky=E, pady=5)
+ self.figureoptionswindow.geometry("+30+40")
+ self.frame2.grid(padx=30, pady=10)
+
+ def figureoptionsclose(self):
+ self.figureoptionswindow.destroy()
+
+ def blastoptions(self):
+ try:
+ self.blastoptionswindow.destroy()
+ except:
+ pass
+ self.blastoptionswindow = Toplevel()
+ self.blastoptionswindow.title("Blast")
+ self.frame3 = Frame(self.blastoptionswindow)
+ self.blastoptionslab = Label(
+ self.frame3, text="Blast Options", font="TkDefaultFont 13 bold underline"
+ )
+ self.blastoptionslab.grid(row=0, column=0)
+ self.minlengthlabel = Label(self.frame3, text="Min. length:")
+ self.minlengthlabel.grid(row=1, column=0)
+ self.minlengthentry = Entry(self.frame3, textvariable=self.minlengthvar)
+ self.minlengthentry.grid(row=1, column=1, columnspan=4)
+ self.minevallabel = Label(self.frame3, text="Max. e Value:")
+ self.minevallabel.grid(row=2, column=0)
+ self.minevalentry = Entry(self.frame3, textvariable=self.minevalvar)
+ self.minevalentry.grid(row=2, column=1, columnspan=4)
+ self.minIdentlabel = Label(self.frame3, text="Min. Identity value:")
+ self.minIdentlabel.grid(row=3, column=0)
+ self.minIdententry = Entry(self.frame3, textvariable=self.minIdentvar)
+ self.minIdententry.grid(row=3, column=1, columnspan=4)
+ self.blastlabel = Label(self.frame3, text="normal")
+ self.blastlabel.grid(row=4, column=1, columnspan=2)
+ self.blastilabel = Label(self.frame3, text="inverted")
+ self.blastilabel.grid(row=4, column=3, columnspan=2)
+ self.minblastctag = Label(self.frame3, text="Choose minimum blast colour:")
+ self.minblastctag.grid(row=5, column=0)
+ self.minblastcentry = Button(self.frame3, text="...", command=self.getminblastc)
+ self.minblastcentry.grid(row=5, column=2)
+ self.minblastclabel = Label(
+ self.frame3, width=3, bg=self.minblastchex, relief=RIDGE
+ )
+ self.minblastclabel.grid(row=5, column=1)
+ self.minblastcentryi = Button(
+ self.frame3, text="...", command=self.getminblastci
+ )
+ self.minblastcentryi.grid(row=5, column=4)
+ self.minblastclabeli = Label(
+ self.frame3, width=3, bg=self.minblastcihex, relief=RIDGE
+ )
+ self.minblastclabeli.grid(row=5, column=3)
+ self.maxblastctag = Label(self.frame3, text="Choose maximum blast colour:")
+ self.maxblastctag.grid(row=6, column=0)
+ self.maxblastcentry = Button(self.frame3, text="...", command=self.getmaxblastc)
+ self.maxblastcentry.grid(row=6, column=2)
+ self.maxblastclabel = Label(
+ self.frame3, width=3, bg=self.maxblastchex, relief=RIDGE
+ )
+ self.maxblastclabel.grid(row=6, column=1)
+ self.maxblastcentryi = Button(
+ self.frame3, text="...", command=self.getmaxblastci
+ )
+ self.maxblastcentryi.grid(row=6, column=4)
+ self.maxblastclabeli = Label(
+ self.frame3, width=3, bg=self.maxblastcihex, relief=RIDGE
+ )
+ self.maxblastclabeli.grid(row=6, column=3)
+ self.blastoutlinetag = Label(self.frame3, text="Outline blast hits in black:")
+ self.blastoutlinetag.grid(row=7, column=0)
+ self.blastoutlineentry = Checkbutton(self.frame3, variable=self.blastoutline)
+ self.blastoutlineentry.grid(row=7, column=1, columnspan=4)
+ self.autodetectlab = Label(
+ self.frame3, text="Filter small blast hits/annotations:"
+ )
+ self.autodetectlab.grid(row=8, column=0)
+ self.autodetectentry = Checkbutton(self.frame3, variable=self.autodetect)
+ self.autodetectentry.grid(row=8, column=1, columnspan=4)
+ self.blastoptionsclosebutton = Button(
+ self.frame3, text="close", command=self.blastoptionsclose
+ )
+ self.blastoptionsclosebutton.grid(
+ row=9, column=1, columnspan=4, sticky=E, pady=5
+ )
+ self.blastoptionswindow.geometry("+30+40")
+ self.frame3.grid(padx=30, pady=10)
+
+ def blastoptionsclose(self):
+ self.blastoptionswindow.destroy()
+
+ def annotateoptions(self):
+ try:
+ self.annotateoptionswindow.destroy()
+ except:
+ pass
+ self.annotateoptionswindow = Toplevel()
+ self.annotateoptionswindow.title("Annotation")
+ self.frame4 = Frame(self.annotateoptionswindow)
+ self.annotLab = Label(
+ self.frame4,
+ text="Annotation Options",
+ font="TkDefaultFont 13 bold underline",
+ )
+ self.annotLab.grid(row=0, column=0)
+ self.leglabel = Label(self.frame4, text="Feature Labels:")
+ self.leglabel.grid(row=1, column=0)
+ self.leg = StringVar(value="None")
+ self.legentry = OptionMenu(
+ self.frame4, self.leg, "None", "Top", "Bottom", "Top & Bottom"
+ )
+ self.legentry.config(width=5)
+ self.legentry.grid(row=1, column=1, columnspan=4, sticky=EW)
+ self.legnamelabel = Label(self.frame4, text="Get feature name from:")
+ self.legnamelabel.grid(row=2, column=0)
+ self.legnameentry = OptionMenu(
+ self.frame4, self.legname, "gene", "product", "locus_tag", "note"
+ )
+ self.legnameentry.grid(row=2, column=1, columnspan=4, sticky=EW)
+ self.exontlabel = Label(self.frame4, text="Thickness of exon lines:")
+ self.exontlabel.grid(row=3, column=0)
+ self.exontentry = Entry(self.frame4, textvariable=self.exontvar)
+ self.exontentry.grid(row=3, column=1, columnspan=4)
+ self.genetlabel = Label(self.frame4, text="Thickness of gene outlines:")
+ self.genetlabel.grid(row=4, column=0)
+ self.genetentry = Entry(self.frame4, textvariable=self.genetvar)
+ self.genetentry.grid(row=4, column=1, columnspan=4)
+
+ self.featlabel = Label(
+ self.frame4, text="Include following features", font="TkDefaultFont 13 bold"
+ )
+ self.featlabel.grid(row=5, column=0)
+ self.featcolour = Label(
+ self.frame4, text="Colour", font="TkDefaultFont 13 bold"
+ )
+ self.featcolour.grid(row=5, column=1, columnspan=2)
+ self.featshape = Label(self.frame4, text="type", font="TkDefaultFont 13 bold")
+ self.featshape.grid(row=5, column=3, columnspan=2)
+
+ self.geneflabel = Label(self.frame4, text="gene")
+ self.geneflabel.grid(row=6, column=0)
+ self.genefentry = Checkbutton(self.frame4, variable=self.genef)
+ self.genefentry.grid(row=6, column=0, sticky=E)
+ self.genefcolourBut = Button(
+ self.frame4, width=1, height=1, text="...", command=self.pickcolourgene
+ )
+ self.genefcolourBut.grid(row=6, column=2)
+ self.genefcolourlabel = Label(
+ self.frame4, width=3, bg=self.genefcolourhex, relief=RIDGE
+ )
+ self.genefcolourlabel.grid(row=6, column=1)
+ self.genefrectentry = OptionMenu(
+ self.frame4, self.genefrect, "arrow", "rect", "frame", "pointer"
+ )
+ self.genefrectentry.config(width=10)
+ self.genefrectentry.grid(row=6, column=3, columnspan=2, sticky=EW)
+
+ self.cdsflabel = Label(self.frame4, text="CDS")
+ self.cdsflabel.grid(row=7, column=0)
+ self.cdsfentry = Checkbutton(self.frame4, variable=self.cdsf)
+ self.cdsfentry.grid(row=7, column=0, sticky=E)
+ self.cdsfcolourBut = Button(
+ self.frame4, width=1, height=1, text="...", command=self.pickcolourcds
+ )
+ self.cdsfcolourBut.grid(row=7, column=2)
+ self.cdsfcolourlabel = Label(
+ self.frame4, width=3, bg=self.cdsfcolourhex, relief=RIDGE
+ )
+ self.cdsfcolourlabel.grid(row=7, column=1)
+ self.cdsfrectentry = OptionMenu(
+ self.frame4, self.cdsfrect, "arrow", "rect", "frame", "pointer"
+ )
+ self.cdsfrectentry.config(width=6)
+ self.cdsfrectentry.grid(row=7, column=3, columnspan=2, sticky=EW)
+
+ self.trnaflabel = Label(self.frame4, text="tRNA")
+ self.trnaflabel.grid(row=8, column=0)
+ self.trnafentry = Checkbutton(self.frame4, variable=self.trnaf)
+ self.trnafentry.grid(row=8, column=0, sticky=E)
+ self.trnafcolourBut = Button(
+ self.frame4, width=1, height=1, text="...", command=self.pickcolourtrna
+ )
+ self.trnafcolourBut.grid(row=8, column=2)
+ self.trnafcolourlabel = Label(
+ self.frame4, width=3, bg=self.trnafcolourhex, relief=RIDGE
+ )
+ self.trnafcolourlabel.grid(row=8, column=1)
+ self.trnafrectentry = OptionMenu(
+ self.frame4, self.trnafrect, "arrow", "rect", "frame", "pointer"
+ )
+ self.trnafrectentry.config(width=6)
+ self.trnafrectentry.grid(row=8, column=3, columnspan=2, sticky=EW)
+
+ self.miscflabel = Label(self.frame4, text="misc_feature")
+ self.miscflabel.grid(row=9, column=0)
+ self.miscfentry = Checkbutton(self.frame4, variable=self.miscf)
+ self.miscfentry.grid(row=9, column=0, sticky=E)
+ self.miscfcolourBut = Button(
+ self.frame4, width=1, height=1, text="...", command=self.pickcolourmisc
+ )
+ self.miscfcolourBut.grid(row=9, column=2)
+ self.miscfcolourlabel = Label(
+ self.frame4, width=3, bg=self.miscfcolourhex, relief=RIDGE
+ )
+ self.miscfcolourlabel.grid(row=9, column=1)
+ self.miscfrectentry = OptionMenu(
+ self.frame4, self.miscfrect, "arrow", "rect", "frame", "pointer"
+ )
+ self.miscfrectentry.config(width=6)
+ self.miscfrectentry.grid(row=9, column=3, columnspan=2, sticky=EW)
+
+ self.randflabel = Entry(self.frame4, textvariable=self.randfeat)
+ self.randflabel.grid(row=10, column=0)
+ self.randfentry = Checkbutton(self.frame4, variable=self.randf)
+ self.randfentry.grid(row=10, column=0, sticky=E)
+ self.randfcolourBut = Button(
+ self.frame4, width=1, height=1, text="...", command=self.pickcolourrand
+ )
+ self.randfcolourBut.grid(row=10, column=2)
+ self.randfcolourlabel = Label(
+ self.frame4, width=3, bg=self.randfcolourhex, relief=RIDGE
+ )
+ self.randfcolourlabel.grid(row=10, column=1)
+ self.randfrectentry = OptionMenu(
+ self.frame4, self.randfrect, "arrow", "rect", "frame", "pointer"
+ )
+ self.randfrectentry.config(width=6)
+ self.randfrectentry.grid(row=10, column=3, columnspan=2, sticky=EW)
+ self.annotateoptionsclosebutton = Button(
+ self.frame4, text="close", command=self.annotateoptionsclose
+ )
+ self.annotateoptionsclosebutton.grid(
+ row=11, column=3, columnspan=2, sticky=E, pady=5
+ )
+ self.annotateoptionswindow.geometry("+30+40")
+ self.frame4.grid(padx=30, pady=10)
+
+ def annotateoptionsclose(self):
+ self.annotateoptionswindow.destroy()
+
+ def graphoptions(self):
+ try:
+ self.graphoptionswindow.destroy()
+ except:
+ pass
+ self.graphoptionswindow = Toplevel()
+ self.graphoptionswindow.title("Graph")
+ self.frame5 = Frame(self.graphoptionswindow)
+ self.graphlabel = Label(
+ self.frame5, text="Graph options", font="TkDefaultFont 13 bold"
+ )
+ self.graphlabel.grid(row=0, column=0)
+
+ self.graphtypelabel = Label(self.frame5, text="Graph:")
+ self.graphtypelabel.grid(row=1, column=0)
+ self.graphtypeentry = OptionMenu(
+ self.frame5,
+ self.graphtype,
+ "None",
+ "GC Content",
+ "GC Skew",
+ "Coverage",
+ "Custom",
+ command=self.graphtypechanges,
+ )
+ self.graphtypeentry.grid(row=1, column=1)
+
+ self.alloronelabel = Label(self.frame5, text="Multiple graphs:")
+ self.alloronelabel.grid(row=2, column=0)
+ self.alloroneentry = Checkbutton(
+ self.frame5, variable=self.allorone, state=DISABLED
+ )
+ self.alloroneentry.grid(row=2, column=1)
+
+ self.graphfilelabel = Label(self.frame5, text="Input file:")
+ self.graphfilelabel.grid(row=3, column=0)
+ self.graphfileentry = Entry(
+ self.frame5, textvariable=self.graphfile, state=DISABLED
+ )
+ self.graphfileentry.grid(row=3, column=1)
+ self.graphfilebut = Button(
+ self.frame5,
+ width=1,
+ height=1,
+ text="...",
+ command=self.opengraphfile,
+ state=DISABLED,
+ )
+ self.graphfilebut.grid(row=3, column=2)
+
+ self.steplabel = Label(self.frame5, text="Step size:")
+ self.steplabel.grid(row=4, column=0)
+ self.stepentry = Entry(self.frame5, textvariable=self.step, state=DISABLED)
+ self.stepentry.grid(row=4, column=1)
+
+ self.windsizelabel = Label(self.frame5, text="Window size:")
+ self.windsizelabel.grid(row=5, column=0)
+ self.windsizeentry = Entry(
+ self.frame5, textvariable=self.windsize, state=DISABLED
+ )
+ self.windsizeentry.grid(row=5, column=1)
+
+ self.graphheightlabel = Label(self.frame5, text="Graph Height:")
+ self.graphheightlabel.grid(row=6, column=0)
+ self.graphheightentry = Entry(
+ self.frame5, textvariable=self.graphheight, state=DISABLED
+ )
+ self.graphheightentry.grid(row=6, column=1)
+
+ self.maxylabel = Label(self.frame5, text="Maximum Y:")
+ self.maxylabel.grid(row=7, column=0)
+ self.maxyentry = Entry(self.frame5, textvariable=self.maxy, state=DISABLED)
+ self.maxyentry.grid(row=7, column=1)
+
+ self.logitlabel = Label(self.frame5, text="Log scale (log10):")
+ self.logitlabel.grid(row=8, column=0)
+ self.logitbut = Checkbutton(self.frame5, variable=self.logit, state=DISABLED)
+ self.logitbut.grid(row=8, column=1)
+
+ self.histolabel = Label(self.frame5, text="Graph Type:")
+ self.histolabel.grid(row=9, column=0)
+ self.histoentry = OptionMenu(self.frame5, self.histo, "Histogram", "Line")
+ self.histoentry.config(state=DISABLED)
+ self.histoentry.grid(row=9, column=1)
+
+ self.graphlinetlabel = Label(self.frame5, text="Axis line thickness:")
+ self.graphlinetlabel.grid(row=10, column=0)
+ self.graphlinetentry = Entry(
+ self.frame5, textvariable=self.graphlinet, state=DISABLED
+ )
+ self.graphlinetentry.grid(row=10, column=1)
+
+ self.poslabel = Label(self.frame5, text="Positive value colour:")
+ self.poslabel.grid(row=11, column=0)
+ self.poscollabel = Label(self.frame5, width=3, bg=self.poscolhex, relief=RIDGE)
+ self.poscollabel.grid(row=11, column=1, sticky=EW)
+ self.poscolbutton = Button(
+ self.frame5,
+ width=1,
+ height=1,
+ text="...",
+ command=self.pickposcol,
+ state=DISABLED,
+ )
+ self.poscolbutton.grid(row=11, column=2)
+
+ self.neglabel = Label(self.frame5, text="Negative value colour:")
+ self.neglabel.grid(row=12, column=0)
+ self.negcollabel = Label(self.frame5, width=3, bg=self.negcolhex, relief=RIDGE)
+ self.negcollabel.grid(row=12, column=1, sticky=EW)
+ self.negcolbutton = Button(
+ self.frame5,
+ width=1,
+ height=1,
+ text="...",
+ command=self.picknegcol,
+ state=DISABLED,
+ )
+ self.negcolbutton.grid(row=12, column=2)
+
+ self.ggaplabel = Label(self.frame5, text="Gap between graph and figure:")
+ self.ggaplabel.grid(row=13, column=0)
+ self.ggapentry = Entry(self.frame5, textvariable=self.ggap, state=DISABLED)
+ self.ggapentry.grid(row=13, column=1)
+
+ self.graphoptionsclosebutton = Button(
+ self.frame5, text="close", command=self.graphoptionsclose
+ )
+ self.graphoptionsclosebutton.grid(
+ row=14, column=1, columnspan=2, sticky=E, pady=5
+ )
+ self.graphoptionswindow.geometry("+30+40")
+ self.graphtypechanges(self.graphtype.get())
+ self.frame5.grid(padx=30, pady=10)
+
+ def graphoptionsclose(self):
+ self.graphoptionswindow.destroy()
+
+ def opengraphfile(self):
+ filename = tkFileDialog.askopenfilename(parent=self.graphoptionswindow)
+ self.graphfile.set(filename)
+
+ def pickcolourgene(self):
+ colour = tkColorChooser.askcolor(
+ self.genefcolour, parent=self.annotateoptionswindow
+ )
+ if colour != None:
+ self.genefcolour = colour[0]
+ self.genefcolourhex = colour[1]
+ self.genefcolourlabel.configure(bg=colour[1])
+
+ def pickcolourcds(self):
+ colour = tkColorChooser.askcolor(
+ self.cdsfcolour, parent=self.annotateoptionswindow
+ )
+ if colour != None:
+ self.cdsfcolour = colour[0]
+ self.cdsfcolourhex = colour[1]
+ self.cdsfcolourlabel.configure(bg=colour[1])
+
+ def pickcolourtrna(self):
+ colour = tkColorChooser.askcolor(
+ self.trnafcolour, parent=self.annotateoptionswindow
+ )
+ if colour != None:
+ self.trnafcolour = colour[0]
+ self.trnafcolourhex = colour[1]
+ self.trnafcolourlabel.configure(bg=colour[1])
+
+ def pickcolourrand(self):
+ colour = tkColorChooser.askcolor(
+ self.randfcolour, parent=self.annotateoptionswindow
+ )
+ if colour != None:
+ self.randfcolour = colour[0]
+ self.randfcolourhex = colour[1]
+ self.randfcolourlabel.configure(bg=colour[1])
+
+ def pickcolourmisc(self):
+ colour = tkColorChooser.askcolor(
+ self.miscfcolour, parent=self.annotateoptionswindow
+ )
+ if colour != None:
+ self.miscfcolour = colour[0]
+ self.miscfcolourhex = colour[1]
+ self.miscfcolourlabel.configure(bg=colour[1])
+
+ def getminblastc(self):
+ colour = tkColorChooser.askcolor(self.minblastc, parent=self.blastoptionswindow)
+ if colour != None:
+ self.minblastc = colour[0]
+ self.minblastchex = colour[1]
+ self.minblastclabel.configure(bg=colour[1])
+
+ def getmaxblastc(self):
+ colour = tkColorChooser.askcolor(self.maxblastc, parent=self.blastoptionswindow)
+ if colour != None:
+ self.maxblastc = colour[0]
+ self.maxblastchex = colour[1]
+ self.maxblastclabel.configure(bg=colour[1])
+
+ def getminblastci(self):
+ colour = tkColorChooser.askcolor(
+ self.minblastci, parent=self.blastoptionswindow
+ )
+ if colour != None:
+ self.minblastci = colour[0]
+ self.minblastcihex = colour[1]
+ self.minblastclabeli.configure(bg=colour[1])
+
+ def getmaxblastci(self):
+ colour = tkColorChooser.askcolor(
+ self.maxblastci, parent=self.blastoptionswindow
+ )
+ if colour != None:
+ self.maxblastci = colour[0]
+ self.maxblastcihex = colour[1]
+ self.maxblastclabeli.configure(bg=colour[1])
+
+ def makeFigure(self):
+ global abortCaptain
+ if self.outfile.get() == "" and not self.filetype.get().startswith("Preview"):
+ self.getoutfile()
+ if self.outfile.get() == "" and not self.filetype.get().startswith("Preview"):
+ return None
+ try:
+ if self.thegenblast.isAlive():
+ tkMessageBox.showerror("Please wait", "BLAST already running.")
+ return None
+ except:
+ pass
+ if self.running:
+ abortCaptain = True
+ else:
+ abortCaptain = False
+ self.running = True
+ self.createFigure.config(text="Cancel Figure")
+ try:
+ self.minlength = int(self.minlengthvar.get())
+ except:
+ tkMessageBox.showerror(
+ "Try again.", "Please enter a valid integer for minimum length."
+ )
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ try:
+ self.mineval = float(self.minevalvar.get())
+ except:
+ tkMessageBox.showerror(
+ "Try again.",
+ "Please enter a valid floating point number for minimum e value.",
+ )
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ try:
+ self.minIdent = float(self.minIdentvar.get())
+ except:
+ tkMessageBox.showerror(
+ "Try again.",
+ "Please enter a valid floating point number for minimum identity.",
+ )
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ try:
+ self.figwidth = int(self.figwidthvar.get())
+ except:
+ tkMessageBox.showerror(
+ "Try again.", "Please enter a valid integer for figure width."
+ )
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ try:
+ self.height1 = int(self.height1var.get())
+ except:
+ tkMessageBox.showerror(
+ "Try again.", "Please enter a valid integer for height of genes."
+ )
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ try:
+ self.height2 = int(self.height2var.get())
+ except:
+ tkMessageBox.showerror(
+ "Try again.",
+ "Please enter a valid integer for height of blast matches.",
+ )
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ try:
+ self.glt = int(self.gltvar.get())
+ except:
+ tkMessageBox.showerror(
+ "Try again.",
+ "Please enter a valid integer for genome line thickness.",
+ )
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ try:
+ self.exont = int(self.exontvar.get())
+ except:
+ tkMessageBox.showerror(
+ "Try again.",
+ "Please enter a valid integer for exon line thickeness.",
+ )
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ try:
+ self.genet = int(self.genetvar.get())
+ except:
+ tkMessageBox.showerror(
+ "Try again.",
+ "Please enter a valid integer for exon line thickeness.",
+ )
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ self.featDict = {}
+ if self.genef.get() == 1:
+ self.featDict["gene"] = (self.genefrect.get(), self.genefcolour)
+ if self.cdsf.get() == 1:
+ self.featDict["CDS"] = (self.cdsfrect.get(), self.cdsfcolour)
+ if self.trnaf.get() == 1:
+ self.featDict["tRNA"] = (self.trnafrect.get(), self.trnafcolour)
+ if self.miscf.get() == 1:
+ self.featDict["misc_feature"] = (self.miscfrect.get(), self.miscfcolour)
+ if self.randf.get() == 1:
+ self.featDict[self.randfeat.get()] = (
+ self.randfrect.get(),
+ self.randfcolour,
+ )
+ self.reverseList = []
+ self.minmaxlist = []
+ for i in self.genlist.get(0, END):
+ self.reverseList.append(self.revlist[i[:2]])
+ try:
+ if self.maxcutlist[i[:2]] == "Max":
+ self.minmaxlist.append((int(self.mincutlist[i[:2]]), "Max"))
+ else:
+ self.minmaxlist.append(
+ (int(self.mincutlist[i[:2]]), int(self.maxcutlist[i[:2]]))
+ )
+ except:
+ tkMessageBox.showerror(
+ "Try again.",
+ "Please enter a valid integer cut off points for annotation file "
+ + i[:2]
+ + ".",
+ )
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ if self.graphtype.get() != "None" and (
+ self.leg.get() == "Top" or self.leg.get() == "Top & Bottom"
+ ):
+ tkMessageBox.showerror(
+ "Try again.",
+ "Please Choose either the graph or the legend to be displayed above the figure.",
+ )
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ if self.leg.get() != "None" and self.leg2.get() != "None":
+ tkMessageBox.showerror(
+ "Try again.",
+ "Please Choose either feature labels or a feature legend.",
+ )
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ else:
+ if self.leg.get() == "None":
+ self.theleg = self.leg2.get()
+ else:
+ self.theleg = self.leg.get()
+ self.inputlist = []
+ self.graphlist = []
+ getit = True
+ nocompare = False
+ if self.genlist.size() > 1 and self.blastlist.size() == 0:
+ nocompare = tkMessageBox.askquestion(
+ "No blast files.",
+ "Only gene figures will be drawn, continue?\n(To create a comparison figure please generate or manually input a blast file)",
+ )
+ if nocompare == "no":
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ else:
+ nocompare = True
+ if self.genlist.size() > 0:
+ if self.graphtype.get() == "GC Content":
+ self.graphlist.append(
+ self.getGCcontent(
+ self.genlist.get(0)[4:],
+ self.mincutlist[self.genlist.get(0)[:2]],
+ self.maxcutlist[self.genlist.get(0)[:2]],
+ )
+ )
+ elif self.graphtype.get() == "GC Skew":
+ self.graphlist.append(
+ self.getGCskew(
+ self.genlist.get(0)[4:],
+ self.mincutlist[self.genlist.get(0)[:2]],
+ self.maxcutlist[self.genlist.get(0)[:2]],
+ )
+ )
+ self.inputlist.append(self.genlist.get(0)[4:])
+ tempfile = open(self.genlist.get(0)[4:])
+ getline = True
+ line = tempfile.readline()
+ while getline and line != "":
+ if (
+ line.startswith("FT source")
+ or line.startswith(" source")
+ or line.startswith("ORIGIN")
+ or line.startswith("SQ Sequence")
+ or line.startswith(">")
+ ):
+ getline = False
+ line = tempfile.readline()
+ if getline:
+ self.genlengths = [
+ tkSimpleDialog.askinteger(
+ "Length not in file",
+ "Please enter the length of genome in file 1",
+ )
+ ]
+ else:
+ self.genlengths = [None]
+ tempfile.close()
+ else:
+ tkMessageBox.showerror(
+ "Try again.", "Please enter at least one feature file."
+ )
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ if self.genlist.size() - 1 == self.blastlist.size() or nocompare:
+ for i in range(self.genlist.size() - 1):
+ self.inputlist.append(self.blastlist.get(i))
+ if (
+ self.graphtype.get() == "GC Content"
+ and self.allorone.get() == 1
+ ):
+ self.graphlist.append(
+ self.getGCcontent(
+ self.genlist.get(i + 1)[4:],
+ self.mincutlist[self.genlist.get(i + 1)[:2]],
+ self.maxcutlist[self.genlist.get(i + 1)[:2]],
+ )
+ )
+ elif self.graphtype.get() == "GC Skew" and self.allorone.get() == 1:
+ self.graphlist.append(
+ self.getGCcontent(
+ self.genlist.get(i + 1)[4:],
+ self.mincutlist[self.genlist.get(i + 1)[:2]],
+ self.maxcutlist[self.genlist.get(i + 1)[:2]],
+ )
+ )
+ self.inputlist.append(self.genlist.get(i + 1)[4:])
+ tempfile = open(self.genlist.get(i + 1)[4:])
+ getline = True
+ line = tempfile.readline()
+ while getline and line != "":
+ if (
+ line.startswith("FT source")
+ or line.startswith(" source")
+ or line.startswith("ORIGIN")
+ or line.startswith("SQ Sequence")
+ or line.startswith(">")
+ ):
+ getline = False
+ line = tempfile.readline()
+ if getline:
+ self.genlengths.append(
+ tkSimpleDialog.askinteger(
+ "Length not in file",
+ "Please enter the length of genome in file "
+ + str(i + 1)
+ + ".",
+ )
+ )
+ else:
+ self.genlengths.append(None)
+ tempfile.close()
+ else:
+ if self.blastlist.size() >= self.genlist.size():
+ tkMessageBox.showerror("Try again.", "Too many blast files.")
+ else:
+ tkMessageBox.showerror("Try again.", "Too few blast files.")
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ try:
+ self.drawfig2 = int(self.drawfig2var.get())
+ if self.drawfig2 == 0:
+ self.drawfig2 = False
+ except:
+ tkMessageBox.showerror(
+ "Try again.", "Please enter a valid integer for length of figure 2."
+ )
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ self.compress = False
+ if self.drawfig1.get() == 1:
+ self.vardrawfig1 = True
+ else:
+ self.vardrawfig1 = False
+ if self.blastoutline.get() == 1:
+ self.varblastoutline = True
+ else:
+ self.varblastoutline = False
+
+ if self.graphtype.get() == "None":
+ self.vargraphit = None
+ elif self.graphtype.get() == "GC Content":
+ self.vargraphit = [
+ self.graphlist,
+ self.poscol,
+ self.negcol,
+ int(self.graphheight.get()),
+ int(self.graphlinet.get()),
+ self.histo.get(),
+ self.maxy.get(),
+ int(self.ggap.get()),
+ ]
+ if None in self.vargraphit[0]:
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ elif self.graphtype.get() == "GC Skew":
+ self.vargraphit = [
+ self.graphlist,
+ self.poscol,
+ self.negcol,
+ int(self.graphheight.get()),
+ int(self.graphlinet.get()),
+ self.histo.get(),
+ self.maxy.get(),
+ int(self.ggap.get()),
+ ]
+ if None in self.vargraphit[0] == None:
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ elif self.graphtype.get() == "Coverage":
+ self.vargraphit = [
+ [self.getCoverage()],
+ self.poscol,
+ self.negcol,
+ int(self.graphheight.get()),
+ int(self.graphlinet.get()),
+ self.histo.get(),
+ self.maxy.get(),
+ int(self.ggap.get()),
+ ]
+ if None in self.vargraphit[0]:
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ elif self.graphtype.get() == "Custom":
+ tempcustom = self.getCustom()
+ if self.allorone.get() != 1:
+ tempcustom = [tempcustom[0]]
+ self.vargraphit = [
+ tempcustom,
+ self.poscol,
+ self.negcol,
+ int(self.graphheight.get()),
+ int(self.graphlinet.get()),
+ self.histo.get(),
+ self.maxy.get(),
+ int(self.ggap.get()),
+ ]
+ if None in self.vargraphit[0]:
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ if self.cutstate != None and self.cutstate != (
+ str(self.mincutlist),
+ str(self.maxcutlist),
+ ):
+ tkMessageBox.showerror(
+ "Try again.",
+ "Please generate blast files again, blast files do not match modified annotation files.",
+ )
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ if self.orderstate != None and self.orderstate != self.genlist.get(0, END):
+ tkMessageBox.showerror(
+ "Try again.",
+ "Please generate blast files again, order of annotation files has been changed.",
+ )
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ getit = True
+ for i in self.inputlist:
+ if not os.path.exists(i):
+ if not i == "" and not nocompare:
+ getit = False
+ if not getit:
+ tkMessageBox.showerror("Try again.", "A selected file does not exist.")
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+ return None
+ else:
+ self.thethread = threading.Thread(target=self.makeFigure2)
+ self.thethread.start()
+ self.thethread2 = threading.Thread(target=self.dotdotdot)
+ self.thethread2.start()
+
+ def dotdotdot(self):
+ while self.thethread.isAlive():
+ time.sleep(0.5)
+ self.processLab.config(text="Drawing figure..")
+ time.sleep(0.5)
+ self.processLab.config(text="Drawing figure...")
+ time.sleep(0.5)
+ self.processLab.config(text="Drawing figure.")
+ if self.theminblast == 101:
+ self.processLab.config(text="Drawing figure...\ncomplete.")
+ elif self.theminblast == None:
+ self.processLab.config(text="Drawing figure...\nfailed.")
+ else:
+ self.processLab.config(text="Drawing figure...\ncomplete.")
+ self.running = False
+ self.createFigure.config(text="Create Figure")
+
+ def makeFigure2(self):
+ if self.filetype.get() == "Bitmap (bmp)":
+ if self.outfile.get()[-4:].lower() != ".bmp":
+ theoutfile = self.outfile.get() + ".bmp"
+ else:
+ theoutfile = self.outfile.get()
+ self.theminblast = draw(
+ theoutfile,
+ self.minlength,
+ self.mineval,
+ self.minIdent,
+ self.inputlist,
+ self.figwidth,
+ self.height1,
+ self.height2,
+ self.minblastc,
+ self.maxblastc,
+ self.minblastci,
+ self.maxblastci,
+ self.vardrawfig1,
+ self.drawfig2,
+ False,
+ self.compress,
+ self.reverseList,
+ self.featDict,
+ self.glt,
+ self.exont,
+ self.genet,
+ self.genlengths,
+ self.aln.get(),
+ self.vargraphit,
+ self.varblastoutline,
+ self.minmaxlist,
+ self.autodetect.get() == 1,
+ self.theleg,
+ self.legname.get(),
+ )
+ elif self.filetype.get() == "Vector file (svg)":
+ if self.outfile.get()[-4:].lower() != ".svg":
+ theoutfile = self.outfile.get() + ".svg"
+ else:
+ theoutfile = self.outfile.get()
+ self.theminblast = drawsvg(
+ theoutfile,
+ self.minlength,
+ self.mineval,
+ self.minIdent,
+ self.inputlist,
+ self.figwidth,
+ self.height1,
+ self.height2,
+ self.minblastc,
+ self.maxblastc,
+ self.minblastci,
+ self.maxblastci,
+ self.vardrawfig1,
+ self.drawfig2,
+ False,
+ self.compress,
+ self.reverseList,
+ self.featDict,
+ self.glt,
+ self.exont,
+ self.genet,
+ self.genlengths,
+ self.aln.get(),
+ self.vargraphit,
+ self.varblastoutline,
+ self.minmaxlist,
+ self.autodetect.get() == 1,
+ self.theleg,
+ self.legname.get(),
+ )
+ else:
+ self.theminblast = self.getPreview()
+
+ def getPreview(self):
+ try:
+ self.prevwindow.destroy()
+ except:
+ pass
+ theoutfile = None
+ if self.filetype.get() == "Preview (1:1)":
+ testit, self.theminblast, width, height = draw(
+ theoutfile,
+ self.minlength,
+ self.mineval,
+ self.minIdent,
+ self.inputlist,
+ self.figwidth,
+ self.height1,
+ self.height2,
+ self.minblastc,
+ self.maxblastc,
+ self.minblastci,
+ self.maxblastci,
+ self.vardrawfig1,
+ self.drawfig2,
+ False,
+ self.compress,
+ self.reverseList,
+ self.featDict,
+ self.glt,
+ self.exont,
+ self.genet,
+ self.genlengths,
+ self.aln.get(),
+ self.vargraphit,
+ self.varblastoutline,
+ self.minmaxlist,
+ self.autodetect.get() == 1,
+ self.theleg,
+ self.legname.get(),
+ 1,
+ )
+ else:
+ testit, self.theminblast, width, height = draw(
+ theoutfile,
+ self.minlength,
+ self.mineval,
+ self.minIdent,
+ self.inputlist,
+ self.figwidth,
+ self.height1,
+ self.height2,
+ self.minblastc,
+ self.maxblastc,
+ self.minblastci,
+ self.maxblastci,
+ self.vardrawfig1,
+ self.drawfig2,
+ False,
+ self.compress,
+ self.reverseList,
+ self.featDict,
+ self.glt,
+ self.exont,
+ self.genet,
+ self.genlengths,
+ self.aln.get(),
+ self.vargraphit,
+ self.varblastoutline,
+ self.minmaxlist,
+ self.autodetect.get() == 1,
+ self.theleg,
+ self.legname.get(),
+ 2,
+ )
+ self.prevwindow = Toplevel()
+ self.prevwindow.title("Preview")
+ self.prevframe = Frame(self.prevwindow)
+ self.prevwindow.grid_rowconfigure(0, weight=1)
+ self.prevwindow.grid_columnconfigure(0, weight=1)
+ self.prevwindow.geometry("+30+40")
+ self.prevframe.grid(row=0, column=0, sticky=NSEW)
+ self.prevframe.grid_rowconfigure(0, weight=1)
+ self.prevframe.grid_columnconfigure(0, weight=1)
+ xscrollbar = Scrollbar(self.prevframe, orient=HORIZONTAL)
+ xscrollbar.grid(row=1, column=0, sticky=E + W)
+ yscrollbar = Scrollbar(self.prevframe)
+ yscrollbar.grid(row=0, column=1, sticky=N + S)
+ self.canvas = Canvas(
+ self.prevframe,
+ bd=0,
+ bg="#000000",
+ scrollregion=(0, 0, width, height),
+ xscrollcommand=xscrollbar.set,
+ yscrollcommand=yscrollbar.set,
+ )
+ test = PhotoImage(data=testit)
+ self.canvas.create_image(0, 0, image=test, anchor=NW)
+ self.canvas.grid(row=0, column=0, sticky=NSEW)
+ self.canvas.image = test
+ xscrollbar.config(command=self.canvas.xview)
+ yscrollbar.config(command=self.canvas.yview)
+ # label = Label(self.prevframe, image=test)
+ # label.image = test
+ # label.grid()
+ # self.canvas.image = test
+ return self.theminblast
+
+ def gbk2fasta(self, genbank, out, mincut, maxcut):
+ getseq = False
+ getembl = False
+ getmultifa = False
+ seq = ""
+ try:
+ mincut = int(mincut)
+ if mincut < 1:
+ mincut = 1
+ if maxcut != "Max":
+ maxcut = int(maxcut)
+ if maxcut < 1:
+ maxcut = 1
+ except:
+ tkMessageBox.showerror("Try again.", "Annotation slice values not valid.")
+ try:
+ gen = open(genbank)
+ outfile = open(out, "w")
+ for line in gen:
+ if line.startswith("ORIGIN"):
+ getseq = True
+ elif line.startswith("SQ Sequence"):
+ getembl = True
+ elif line.startswith(">"):
+ if getmultifa:
+ seq += "qqq"
+ else:
+ getmultifa = True
+ elif line.startswith("//"):
+ getseq = False
+ getembl = False
+ elif getseq:
+ seq += "".join(line.split()[1:])
+ elif getembl:
+ seq += "".join(line.split()[:-1])
+ elif getmultifa:
+ seq += line.rstrip()
+ if getmultifa:
+ getset = set(seq)
+ rightchars = set("atgcATGCqnNuUyYkKmMsSwWbBdDhHvVxXrR-")
+ isitgood = True
+ for i in getset:
+ if not i in rightchars:
+ isitgood = False
+ if not isitgood:
+ tkMessageBox.showerror(
+ "Try again.",
+ "Annotation file contains invalid characters.\
+ Check genbank/EMBL contains no lines starting with > or that\
+ fasta file contains only valid nucleotides",
+ )
+ return 0
+ if "/" in out:
+ outfile.write(">" + out.split("/")[1] + "\n")
+ else:
+ outfile.write(">" + out + "\n")
+ if maxcut == "Max":
+ maxcut = len(seq)
+ if mincut == 1 and maxcut == len(seq):
+ if getmultifa:
+ seq = seq.replace("qqq", "n" * int(len(seq) / 500))
+ outfile.write(seq)
+ elif mincut < maxcut:
+ seq = seq[mincut - 1 : maxcut]
+ if getmultifa:
+ seq = seq.replace("qqq", "n" * int(len(seq) / 500))
+ outfile.write(seq)
+ else:
+ seq = seq[mincut - 1 :] + seq[:maxcut]
+ if getmultifa:
+ seq = seq.replace("qqq", "n" * int(len(seq) / 500))
+ outfile.write(seq)
+ if len(seq) == 0:
+ tkMessageBox.showerror(
+ "Try again.", "There is no sequence in " + genbank + "."
+ )
+ return 0
+ else:
+ return 1
+ except:
+ tkMessageBox.showerror("Try again.", genbank + " does not exist.")
+ return 0
+
+ def genBlast(self):
+ try:
+ if self.thegenblast.isAlive():
+ tkMessageBox.showerror("Please wait", "BLAST already running.")
+ return None
+ except:
+ pass
+ try:
+ if self.thethread.isAlive():
+ tkMessageBox.showerror("Please wait", "easyfig creating figure.")
+ return None
+ except:
+ pass
+ try:
+ if self.thedlblast.isAlive():
+ tkMessageBox.showerror("Please wait", "Blast is downloading.")
+ return None
+ except:
+ pass
+ self.processLab.config(text="Performing blastn...")
+ self.workingDir = tkFileDialog.askdirectory(
+ title="Please select a working directory."
+ )
+ if self.workingDir == ():
+ self.processLab.config(text="Performing blastn...\nCancelled.")
+ return None
+ os.chdir(self.workingDir)
+ index = 0
+ if self.genlist.size() < 2:
+ tkMessageBox.showerror(
+ "Try again.",
+ "easyfig needs at least 2 genbank files to create blast files.",
+ )
+ self.processLab.config(text="Performing blastn...\nCancelled.")
+ return None
+ else:
+ thegenlist = self.genlist.get(0, END)
+ for i in thegenlist:
+ index += 1
+ temp = self.gbk2fasta(
+ i[4:],
+ str(index) + ".easyfig.fa",
+ self.mincutlist[i[:2]],
+ self.maxcutlist[i[:2]],
+ )
+ if temp == 0:
+ return None
+ self.cutstate = (str(self.mincutlist), str(self.maxcutlist))
+ self.orderstate = self.genlist.get(0, END)
+ if self.blastnDir == None:
+ pass
+ elif self.blastnDir[-11:] == "tblastx.exe":
+ if os.path.exists(self.blastnDir[:-11] + "blastn.exe"):
+ self.blastnDir = self.blastnDir[:-11] + "blastn.exe"
+ else:
+ self.blastnDir = None
+ elif self.blastnDir[-7:] == "tblastx":
+ if os.path.exists(self.blastnDir[:-7] + "blastn"):
+ self.blastnDir = self.blastnDir[:-7] + "blastn"
+ else:
+ self.blastnDir = None
+ if self.dbnDir != None:
+ if not os.path.exists(self.dbnDir):
+ self.dbnDir = None
+ if self.blastnDir != None:
+ if not os.path.exists(self.blastnDir):
+ self.blastnDir = None
+ if self.dbnDir != None:
+ pass
+ elif isNewBlastDB():
+ self.dbnDir = "makeblastdb"
+ elif isLegBlastDB():
+ self.dblDir = "formatdb"
+ elif os.path.exists("~/bin/makeblastdb"):
+ self.dbnDir = "~/bin/makeblastdb"
+ elif os.path.exists("/usr/local/ncbi/bin/makeblastdb"):
+ self.blastnDir = "/usr/local/ncbi/bin/makeblastdb"
+ elif os.path.exists("/usr/local/bin/makeblastdb"):
+ self.dbnDir = "/usr/local/bin/makeblastdb"
+ elif os.path.exists(self.pwd + "/makeblastdb"):
+ self.dbnDir = self.pwd + "/makeblastdb"
+ elif os.path.exists("/usr/local/ncbi/blast/bin/makeblastdb"):
+ self.dbnDir = "/usr/local/ncbi/blast/bin/makeblastdb"
+ elif os.path.exists("/usr/local/bin/formatdb"):
+ self.dblDir = "/usr/local/bin/formatdb"
+ elif os.path.exists("~/bin/formatdb"):
+ self.dblDir = "~/bin/formatdb"
+ elif os.path.exists(self.pwd + "/formatdb"):
+ self.dblDir = self.pwd + "/formatdb"
+ elif os.path.exists(self.pwd + "/makeblastdb.exe"):
+ self.dbnDir = self.pwd + "/makeblastdb.exe"
+ elif os.path.exists(self.pwd + "/formatdb.exe"):
+ self.dblDir = self.pwd + "/formatdb.exe"
+ else:
+ folderlist = []
+ for letter in string.uppercase:
+ if os.path.exists(letter + ":/program files/ncbi/"):
+ folders = os.listdir(letter + ":/program files/ncbi/")
+ for f in folders:
+ if f.upper().startswith("BLAST"):
+ folderlist.append(letter + ":/program files/ncbi/" + f)
+ folderlist.sort(reverse=True)
+ blastgot = False
+ if len(folderlist) > 0:
+ for f in folderlist:
+ if not blastgot and os.path.exists(f + "/bin/makeblastdb.exe"):
+ blastgot = True
+ self.dblDir = '"' + f + '/bin/makeblastdb"'
+ if self.blastnDir != None:
+ pass
+ elif isNewBlastn():
+ self.blastnDir = "blastn"
+ elif isLegBlastall():
+ self.blastlDir = "blastall"
+ elif os.path.exists("~/bin/blastn"):
+ self.blastnDir = "~/bin/blastn"
+ elif os.path.exists("/usr/local/ncbi/bin/blastn"):
+ self.blastnDir = "/usr/local/ncbi/bin/blastn"
+ elif os.path.exists("/usr/local/bin/blastn"):
+ self.blastnDir = "/usr/local/bin/blastn"
+ elif os.path.exists(self.pwd + "/blastn"):
+ self.blastnDir = self.pwd + "/blastn"
+ elif os.path.exists("/usr/local/ncbi/blast/bin/blastn"):
+ self.blastnDir = "/usr/local/ncbi/blast/bin/blastn"
+ elif os.path.exists("/usr/local/bin/blastall"):
+ self.blastlDir = "/usr/local/bin/blastall"
+ elif os.path.exists("~/bin/blastall"):
+ self.blastlDir = "~/bin/blastall"
+ elif os.path.exists(self.pwd + "/blastall"):
+ self.blastlDir = self.pwd + "/blastall"
+ elif os.path.exists(self.pwd + "/blastall.exe"):
+ self.blastlDir = self.pwd + "/blastall.exe"
+ elif os.path.exists(self.pwd + "/blastn.exe"):
+ self.blastnDir = self.pwd + "/blastn.exe"
+ else:
+ folderlist = []
+ for letter in string.uppercase:
+ if os.path.exists(letter + ":/program files/ncbi/"):
+ folders = os.listdir(letter + ":/program files/ncbi/")
+ for f in folders:
+ if f.upper().startswith("BLAST"):
+ folderlist.append(letter + ":/program files/ncbi/" + f)
+ folderlist.sort(reverse=True)
+ blastgot = False
+ if len(folderlist) > 0:
+ for f in folderlist:
+ if not blastgot and os.path.exists(f + "/bin/blastn.exe"):
+ blastgot = True
+ self.blastnDir = '"' + f + '/bin/blastn"'
+ if (
+ self.blastnDir == None
+ and self.blastlDir == None
+ or self.dbnDir == None
+ and self.dblDir == None
+ ):
+ dlblast = tkMessageBox.askquestion(
+ "Blast not found", "Do you wish to download Blast?"
+ )
+ if dlblast != "no":
+ self.thedlblast = threading.Thread(target=self.downloadBlast)
+ self.thedlblast.start()
+ return None
+ tempdir = tkFileDialog.askdirectory(
+ title="Please select a directory with blastn and makeblastdb."
+ )
+ if tempdir == ():
+ tempdir = ""
+ if os.path.exists(tempdir + "/blastn.exe") and os.path.exists(
+ tempdir + "/makeblastdb.exe"
+ ):
+ self.blastnDir = tempdir + "/blastn.exe"
+ self.dbnDir = tempdir + "/makeblastdb.exe"
+ elif os.path.exists(tempdir + "/blastn") and os.path.exists(
+ tempdir + "/makeblastdb"
+ ):
+ self.blastnDir = tempdir + "/blastn"
+ self.dbnDir = tempdir + "/makeblastdb"
+ else:
+ self.processLab.config(
+ text="Performing blastn...\nInvadild directory.\nBlast not found."
+ )
+ self.blastnDir = None
+ self.dbnDir = None
+ return None
+ if self.workingDir == "":
+ self.processLab.config(text="Performing blastn...\nCancelled.")
+ return None
+ self.thegenblast = threading.Thread(target=self.genBlast2)
+ self.thegenblast.start()
+ self.thegenblast2 = threading.Thread(target=self.genBlastDot)
+ self.thegenblast2.start()
+
+ def genBlastDot(self):
+ while self.thegenblast.isAlive():
+ time.sleep(0.5)
+ self.processLab.config(text="Performing blastn.")
+ time.sleep(0.5)
+ self.processLab.config(text="Performing blastn..")
+ time.sleep(0.5)
+ self.processLab.config(text="Performing blastn...")
+ if self.blastlist.size() == self.genlist.size() - 1:
+ self.processLab.config(text="Performing blastn...\ncomplete.")
+ else:
+ self.processLab.config(
+ text="Blast has failed, please check genbank files and rerun."
+ )
+
+ def genBlast2(self):
+ self.blastlist.delete(0, END)
+ the_tempdb_dir = os.path.abspath(".") + "/tempdb"
+ for i in range(self.genlist.size() - 1):
+ if self.dbnDir != None:
+ subprocess.Popen(
+ self.dbnDir
+ + " -dbtype nucl -out "
+ + the_tempdb_dir
+ + " -in "
+ + str(i + 2)
+ + ".easyfig.fa",
+ shell=True,
+ ).wait()
+ elif self.dblDir != None:
+ subprocess.Popen(
+ self.dblDir
+ + " -p F -t tempdb -n tempdb -i "
+ + str(i + 2)
+ + ".easyfig.fa",
+ shell=True,
+ ).wait()
+ if self.blastnDir:
+ subprocess.Popen(
+ self.blastnDir
+ + " -task blastn -db "
+ + the_tempdb_dir
+ + " -outfmt 6 -query "
+ + str(i + 1)
+ + ".easyfig.fa -out "
+ + str(i + 1)
+ + str(i + 2)
+ + ".easyfig.out",
+ shell=True,
+ ).wait()
+ elif self.blastlDir:
+ subprocess.Popen(
+ self.blastlDir
+ + " -p blastn -d "
+ + the_tempdb_dir
+ + " -F F -m 8 -a 8 -i "
+ + str(i + 1)
+ + ".easyfig.fa -o "
+ + str(i + 1)
+ + str(i + 2)
+ + ".easyfig.out",
+ shell=True,
+ ).wait()
+ self.blastlist.insert(
+ END, self.workingDir + "/" + str(i + 1) + str(i + 2) + ".easyfig.out"
+ )
+ self.blastlist.xview_moveto(1)
+ if os.path.exists("tempdb.nhr"):
+ os.remove("tempdb.nhr")
+ if os.path.exists("tempdb.nin"):
+ os.remove("tempdb.nin")
+ if os.path.exists("error.log"):
+ os.remove("error.log")
+ if os.path.exists("tempdb.nsq"):
+ os.remove("tempdb.nsq")
+ if os.path.exists("formatdb.log"):
+ os.remove("formatdb.log")
+ os.chdir(self.pwd)
+
+ def genBlastX(self):
+ try:
+ if self.thegenblast.isAlive():
+ tkMessageBox.showerror("Please wait", "BLAST already running.")
+ return None
+ except:
+ pass
+ try:
+ if self.thethread.isAlive():
+ tkMessageBox.showerror("Please wait", "easyfig creating figure.")
+ return None
+ except:
+ pass
+ try:
+ if self.thedlblast.isAlive():
+ tkMessageBox.showerror("Please wait", "Blast is downloading.")
+ return None
+ except:
+ pass
+ self.workingDir = tkFileDialog.askdirectory(
+ title="Please select a working directory."
+ )
+ if self.workingDir == ():
+ self.processLab.config(text="Performing tblastx...\nCancelled.")
+ return
+ os.chdir(self.workingDir)
+ index = 0
+ if self.genlist.size() < 2:
+ tkMessageBox.showerror(
+ "Try again.",
+ "easyfig needs at least 2 genbank files to create blast files.",
+ )
+ else:
+ thegenlist = self.genlist.get(0, END)
+ for i in thegenlist:
+ index += 1
+ temp = self.gbk2fasta(
+ i[4:],
+ str(index) + ".easyfig.fa",
+ self.mincutlist[i[:2]],
+ self.maxcutlist[i[:2]],
+ )
+ if temp == 0:
+ return None
+ self.cutstate = (str(self.mincutlist), str(self.maxcutlist))
+ self.orderstate = self.genlist.get(0, END)
+ if self.blastnDir == None:
+ pass
+ elif self.blastnDir[-10:] == "blastn.exe":
+ if os.path.exists(self.blastnDir[:-10] + "tblastx.exe"):
+ self.blastnDir = self.blastnDir[:-10] + "tblastx.exe"
+ else:
+ self.blastnDir = None
+ elif self.blastnDir[-6:] == "blastn":
+ if os.path.exists(self.blastnDir[:-6] + "tblastx"):
+ self.blastnDir = self.blastnDir[:-6] + "tblastx"
+ else:
+ self.blastnDir = None
+ if self.dbnDir != None:
+ if not os.path.exists(self.dbnDir):
+ self.dbnDir = None
+ if self.blastnDir != None:
+ if not os.path.exists(self.blastnDir):
+ self.blastnDir = None
+ if self.dbnDir != None:
+ pass
+ elif isNewBlastDB():
+ self.dbnDir = "makeblastdb"
+ elif isLegBlastDB():
+ self.dblDir = "formatdb"
+ elif os.path.exists("~/bin/makeblastdb"):
+ self.dbnDir = "~/bin/makeblastdb"
+ elif os.path.exists("/usr/local/bin/makeblastdb"):
+ self.dbnDir = "/usr/local/bin/makeblastdb"
+ elif os.path.exists("./makeblastdb"):
+ self.dbnDir = "./makeblastdb"
+ elif os.path.exists("/usr/local/ncbi/bin/makeblastdb"):
+ self.blastnDir = "/usr/local/ncbi/bin/makeblastdb"
+ elif os.path.exists("/usr/local/ncbi/blast/bin/makeblastdb"):
+ self.dbnDir = "/usr/local/ncbi/blast/bin/makeblastdb"
+ elif os.path.exists("/usr/local/bin/formatdb"):
+ self.dblDir = "/usr/local/bin/formatdb"
+ elif os.path.exists("~/bin/formatdb"):
+ self.dblDir = "~/bin/formatdb"
+ elif os.path.exists("./formatdb"):
+ self.dblDir = "./formatdb"
+ elif os.path.exists("./makeblastdb.exe"):
+ self.dbnDir = "./makeblastdb.exe"
+ elif os.path.exists("./formatdb.exe"):
+ self.dblDir = "./formatdb.exe"
+ else:
+ folderlist = []
+ for letter in string.uppercase:
+ if os.path.exists(letter + ":/program files/ncbi/"):
+ folders = os.listdir(letter + ":/program files/ncbi/")
+ for f in folders:
+ if f.upper().startswith("BLAST"):
+ folderlist.append(letter + ":/program files/ncbi/" + f)
+ folderlist.sort(reverse=True)
+ blastgot = False
+ if len(folderlist) > 0:
+ for f in folderlist:
+ if not blastgot and os.path.exists(f + "/bin/makeblastdb.exe"):
+ blastgot = True
+ self.dblDir = '"' + f + '/bin/makeblastdb"'
+ if self.blastnDir != None:
+ pass
+ elif isNewTblastx():
+ self.blastnDir = "tblastx"
+ elif isLegBlastall():
+ self.blastlDir = "blastall"
+ elif os.path.exists("~/bin/tblastx"):
+ self.blastnDir = "~/bin/tblastx"
+ elif os.path.exists("/usr/local/ncbi/bin/tblastx"):
+ self.blastnDir = "/usr/local/ncbi/bin/tblastx"
+ elif os.path.exists("/usr/local/bin/tblastx"):
+ self.blastnDir = "/usr/local/bin/tblastx"
+ elif os.path.exists("./tblastx"):
+ self.blastnDir = "./tblastx"
+ elif os.path.exists("/usr/local/ncbi/blast/bin/tblastx"):
+ self.blastnDir = "/usr/local/ncbi/blast/bin/tblastx"
+ elif os.path.exists("/usr/local/bin/blastall"):
+ self.blastlDir = "/usr/local/bin/blastall"
+ elif os.path.exists("~/bin/blastall"):
+ self.blastlDir = "~/bin/blastall"
+ elif os.path.exists("./blastall"):
+ self.blastlDir = "./blastall"
+ elif os.path.exists("./tblastx.exe"):
+ self.blastnDir = "./tblastx.exe"
+ else:
+ folderlist = []
+ for letter in string.uppercase:
+ if os.path.exists(letter + ":/program files/ncbi/"):
+ folders = os.listdir(letter + ":/program files/ncbi/")
+ for f in folders:
+ if f.upper().startswith("BLAST"):
+ folderlist.append(letter + ":/program files/ncbi/" + f)
+ folderlist.sort(reverse=True)
+ blastgot = False
+ if len(folderlist) > 0:
+ for f in folderlist:
+ if not blastgot and os.path.exists(f + "/bin/tblastx.exe"):
+ blastgot = True
+ self.blastnDir = '"' + f + '/bin/tblastx.exe"'
+ if (
+ self.blastnDir == None
+ and self.blastlDir == None
+ or self.dbnDir == None
+ and self.dbl == None
+ ):
+ dlblast = tkMessageBox.askquestion(
+ "Blast not found", "Do you wish to download Blast?"
+ )
+ if dlblast:
+ self.thedlblast = threading.Thread(target=self.downloadBlast)
+ self.thedlblast.start()
+ return None
+ tempdir = tkFileDialog.askdirectory(
+ title="Please select a directory with tblastx and makeblastdb."
+ )
+ if os.path.exists(tempdir + "/tblastx.exe") and os.path.exists(
+ tempdir + "/makeblastdb.exe"
+ ):
+ self.blastnDir = tempdir + "/tblastx.exe"
+ self.dbnDir = tempdir + "/makeblastdb.exe"
+ elif os.path.exists(tempdir + "/tblastx") and os.path.exists(
+ tempdir + "/makeblastdb"
+ ):
+ self.blastnDir = tempdir + "/tblastx"
+ self.dbnDir = tempdir + "/makeblastdb"
+ else:
+ self.processLab.config(
+ text="Performing blastn...\nInvadild directory.\nBlast not found."
+ )
+ return None
+ if self.workingDir == "":
+ self.processLab.config(text="Performing blastn...\nCancelled.")
+ return None
+ self.thegenblast = threading.Thread(target=self.genBlastX2)
+ self.thegenblast.start()
+ self.thegenblast2 = threading.Thread(target=self.genBlastXdot)
+ self.thegenblast2.start()
+
+ def genBlastXdot(self):
+ while self.thegenblast.isAlive():
+ time.sleep(0.5)
+ self.processLab.config(text="Performing tblastx.")
+ time.sleep(0.5)
+ self.processLab.config(text="Performing tblastx..")
+ time.sleep(0.5)
+ self.processLab.config(text="Performing tblastx...")
+ self.processLab.config(text="Performing tblastx...\ncomplete.")
+
+ def genBlastX2(self):
+ self.blastlist.delete(0, END)
+ for i in range(self.genlist.size() - 1):
+ if self.dbnDir != None:
+ subprocess.Popen(
+ self.dbnDir
+ + " -dbtype nucl -out tempdb -in "
+ + str(i + 2)
+ + ".easyfig.fa",
+ shell=True,
+ ).wait()
+ elif self.dblDir != None:
+ subprocess.Popen(
+ self.dblDir
+ + " -p F -t tempdb -n tempdb -i "
+ + str(i + 2)
+ + ".easyfig.fa",
+ shell=True,
+ ).wait()
+ if self.blastnDir:
+ subprocess.Popen(
+ self.blastnDir
+ + " -db tempdb -outfmt 6 -query "
+ + str(i + 1)
+ + ".easyfig.fa -out "
+ + str(i + 1)
+ + str(i + 2)
+ + ".easyfig.out",
+ shell=True,
+ ).wait()
+ elif self.blastlDir:
+ subprocess.Popen(
+ self.blastlDir
+ + " -p tblastx -d tempdb -F F -m 8 -a 8 -i "
+ + str(i + 1)
+ + ".easyfig.fa -o "
+ + str(i + 1)
+ + str(i + 2)
+ + ".easyfig.out",
+ shell=True,
+ ).wait()
+ self.blastlist.insert(
+ END, self.workingDir + "/" + str(i + 1) + str(i + 2) + ".easyfig.out"
+ )
+ self.blastlist.xview_moveto(1)
+ if os.path.exists("tempdb.nhr"):
+ os.remove("tempdb.nhr")
+ if os.path.exists("tempdb.nin"):
+ os.remove("tempdb.nin")
+ if os.path.exists("error.log"):
+ os.remove("error.log")
+ if os.path.exists("tempdb.nsq"):
+ os.remove("tempdb.nsq")
+ if os.path.exists("formatdb.log"):
+ os.remove("formatdb.log")
+ os.chdir(self.pwd)
+
+ def annmod(self, event=None):
+ try:
+ self.annwindow.destroy()
+ except:
+ pass
+ self.annwindow = Toplevel()
+ self.frame6 = Frame(self.annwindow)
+ self.annwindow.title("Subregions")
+ self.frangelab = Label(self.frame6, text="Range", font="TkDefaultFont 13 bold")
+ self.frangelab.grid(row=0, column=2, columnspan=3)
+ self.ffilelab = Label(
+ self.frame6, text="Ann. file", font="TkDefaultFont 13 bold"
+ )
+ self.ffilelab.grid(row=1, column=1, pady=10)
+ self.fminlab = Label(self.frame6, text="Min", font="TkDefaultFont 13 bold")
+ self.fminlab.grid(row=1, column=2, pady=10)
+ self.fdotdot = Label(self.frame6, text=" .. ")
+ self.fdotdot.grid(row=1, column=3)
+ self.fmaxlab = Label(self.frame6, text="Max", font="TkDefaultFont 13 bold")
+ self.fmaxlab.grid(row=1, column=4, pady=10)
+ self.frevlab = Label(self.frame6, text="Reverse", font="TkDefaultFont 13 bold")
+ self.frevlab.grid(row=1, column=5, pady=10)
+ self.scrollbar2 = Scrollbar(self.frame6, orient=VERTICAL)
+ self.fgenlist = Listbox(
+ self.frame6, yscrollcommand=self.scrollbar2.set, exportselection=0
+ )
+ self.fgenlist.bind("", self.setselectedcuts)
+ self.fgenlist.bind("", self.doublecuts)
+ self.fgenlist.bind("", self.onmousewheel)
+ self.fgenlist.bind("", self.onmousewheel)
+ self.fgenlist.bind("", self.onmousewheel)
+ self.fgenlist.grid(row=2, column=1)
+ self.fgenminlist = Listbox(
+ self.frame6, yscrollcommand=self.scrollbar2.set, exportselection=0
+ )
+ self.fgenminlist.config(width=7)
+ self.fgenminlist.bind("", self.setselectedcuts)
+ self.fgenminlist.bind("", self.doublecuts)
+ self.fgenminlist.bind("", self.onmousewheel)
+ self.fgenminlist.bind("", self.onmousewheel)
+ self.fgenminlist.bind("", self.onmousewheel)
+ self.fgenminlist.grid(row=2, column=2)
+ self.fgenmaxlist = Listbox(
+ self.frame6, yscrollcommand=self.scrollbar2.set, exportselection=0
+ )
+ self.fgenmaxlist.config(width=7)
+ self.fgenmaxlist.bind("", self.setselectedcuts)
+ self.fgenmaxlist.bind("", self.doublecuts)
+ self.fgenmaxlist.bind("", self.onmousewheel)
+ self.fgenmaxlist.bind("", self.onmousewheel)
+ self.fgenmaxlist.bind("", self.onmousewheel)
+ self.fgenmaxlist.grid(row=2, column=4)
+ self.fgenrevlist = Listbox(
+ self.frame6, yscrollcommand=self.scrollbar2.set, exportselection=0
+ )
+ self.fgenrevlist.config(width=5)
+ self.fgenrevlist.bind("", self.setselectedcuts)
+ self.fgenrevlist.bind("", self.doublecuts)
+ self.fgenrevlist.bind("", self.onmousewheel)
+ self.fgenrevlist.bind("", self.onmousewheel)
+ self.fgenrevlist.bind("", self.onmousewheel)
+ self.fgenrevlist.grid(row=2, column=5)
+ self.scrollbar2.config(command=self.yview2)
+ self.scrollbar2.grid(row=2, column=0, sticky=NS)
+ annlist = self.genlist.get(0, END)
+ annlistpostemp = self.genlist.curselection()
+ for i in annlist:
+ self.fgenlist.insert(END, i)
+ self.fgenminlist.insert(END, self.mincutlist[i[:2]])
+ self.fgenmaxlist.insert(END, self.maxcutlist[i[:2]])
+ if self.revlist[i[:2]]:
+ self.fgenrevlist.insert(END, "yes")
+ else:
+ self.fgenrevlist.insert(END, "no")
+ self.fgenlist.xview_moveto(1)
+ self.genmincut = StringVar()
+ self.genmaxcut = StringVar()
+ self.genrev = IntVar()
+ self.mincutentry = Entry(self.frame6, textvariable=self.genmincut)
+ self.mincutentry.config(width=7)
+ self.mincutentry.grid(row=3, column=2)
+ self.maxcutentry = Entry(self.frame6, textvariable=self.genmaxcut)
+ self.maxcutentry.config(width=7)
+ self.maxcutentry.grid(row=3, column=4)
+ self.genrentry = Checkbutton(self.frame6, variable=self.genrev)
+ self.genrentry.grid(row=3, column=5)
+ if len(annlist) > 0 and annlistpostemp != ():
+ self.fgenlist.selection_set(annlistpostemp)
+ self.fgenminlist.selection_set(annlistpostemp)
+ self.fgenmaxlist.selection_set(annlistpostemp)
+ self.fgenrevlist.selection_set(annlistpostemp)
+ self.fgenlist.see(annlistpostemp)
+ self.fgenminlist.see(annlistpostemp)
+ self.fgenmaxlist.see(annlistpostemp)
+ self.fgenrevlist.see(annlistpostemp)
+ self.genmincut.set(self.fgenminlist.get(annlistpostemp))
+ self.genmaxcut.set(self.fgenmaxlist.get(annlistpostemp))
+ if self.fgenrevlist.get(annlistpostemp) == "yes":
+ self.genrev.set(1)
+ else:
+ self.genrev.set(0)
+ self.changecutsbutton = Button(
+ self.frame6, text=" change cutoffs ", command=self.changecuts
+ )
+ self.changecutsbutton.grid(row=3, column=1, pady=10)
+ self.annwindowclosebutton = Button(
+ self.frame6, text="close", command=self.annwindowclose
+ )
+ self.annwindowclosebutton.grid(
+ row=12, column=4, columnspan=2, sticky=E, pady=10
+ )
+ self.annwindow.geometry("+30+40")
+ self.frame6.grid(padx=30, pady=10)
+
+ def changecuts(self):
+ thepost = self.fgenlist.curselection()
+ if thepost == ():
+ tkMessageBox.showerror("Try again.", "Please select genome to change.")
+ return
+ else:
+ thepost = int(thepost[0])
+ self.fgenminlist.delete(thepost)
+ self.fgenminlist.insert(thepost, self.genmincut.get())
+ self.mincutlist[self.fgenlist.get(thepost)[:2]] = self.genmincut.get()
+ self.fgenmaxlist.delete(thepost)
+ self.fgenmaxlist.insert(thepost, self.genmaxcut.get())
+ self.maxcutlist[self.fgenlist.get(thepost)[:2]] = self.genmaxcut.get()
+ self.fgenrevlist.delete(thepost)
+ if self.genrev.get() == 1:
+ self.fgenrevlist.insert(thepost, "yes")
+ self.revlist[self.fgenlist.get(thepost)[:2]] = True
+ else:
+ self.fgenrevlist.insert(thepost, "no")
+ self.revlist[self.fgenlist.get(thepost)[:2]] = False
+ if not thepost == self.fgenlist.size() - 1:
+ self.fgenlist.selection_clear(0, END)
+ self.fgenlist.selection_set(thepost + 1, thepost + 1)
+ self.fgenlist.see(thepost + 1)
+ self.fgenminlist.selection_clear(0, END)
+ self.fgenminlist.selection_set(thepost + 1, thepost + 1)
+ self.fgenminlist.see(thepost + 1)
+ self.fgenmaxlist.selection_clear(0, END)
+ self.fgenmaxlist.selection_set(thepost + 1, thepost + 1)
+ self.fgenmaxlist.see(thepost + 1)
+ self.fgenrevlist.selection_clear(0, END)
+ self.fgenrevlist.selection_set(thepost + 1, thepost + 1)
+ self.fgenrevlist.see(thepost + 1)
+
+ def yview2(self, *args):
+ apply(self.fgenlist.yview, args)
+ apply(self.fgenminlist.yview, args)
+ apply(self.fgenmaxlist.yview, args)
+ apply(self.fgenrevlist.yview, args)
+
+ def onmousewheel(self, event):
+ return "break"
+
+ def setselectedcuts(self, event):
+ selected = self.fgenlist.nearest(event.y)
+ tempypos = self.fgenlist.yview()[0]
+ self.fgenminlist.yview_moveto(tempypos)
+ self.fgenmaxlist.yview_moveto(tempypos)
+ self.fgenrevlist.yview_moveto(tempypos)
+ self.fgenlist.selection_clear(0, END)
+ self.fgenlist.selection_set(selected, selected)
+ self.fgenminlist.selection_clear(0, END)
+ self.fgenminlist.selection_set(selected, selected)
+ self.fgenmaxlist.selection_clear(0, END)
+ self.fgenmaxlist.selection_set(selected, selected)
+ self.fgenrevlist.selection_clear(0, END)
+ self.fgenrevlist.selection_set(selected, selected)
+ self.genmincut.set(self.fgenminlist.get(selected))
+ self.genmaxcut.set(self.fgenmaxlist.get(selected))
+ if self.fgenrevlist.get(selected) == "yes":
+ self.genrev.set(1)
+ else:
+ self.genrev.set(0)
+
+ def doublecuts(self, event):
+ try:
+ self.doublecutswin.destroy()
+ except:
+ pass
+ self.doublecutsel = self.fgenlist.nearest(event.y)
+ self.doublecutswin = Toplevel(self.frame6)
+ self.doublecutswin.title("Change subregion")
+ self.frame10 = Frame(self.doublecutswin)
+ self.dublabel1 = Label(
+ self.frame10,
+ text="Modify file " + self.fgenlist.get(self.doublecutsel)[:3],
+ font="TkDefaultFont 13 bold",
+ )
+ self.dublabel1.grid(row=0, column=0, pady=5)
+ self.dublabel2 = Label(self.frame10, text="Min Cutoff:")
+ self.dublabel2.grid(row=1, column=0)
+ self.dublabel3 = Label(self.frame10, text="Max Cutoff:")
+ self.dublabel3.grid(row=2, column=0)
+ self.dublabel4 = Label(self.frame10, text="Reverse:")
+ self.dublabel4.grid(row=3, column=0)
+ self.dublabel2str = StringVar(value=self.fgenminlist.get(self.doublecutsel))
+ self.dublabel3str = StringVar(value=self.fgenmaxlist.get(self.doublecutsel))
+ if self.fgenrevlist.get(self.doublecutsel) == "yes":
+ self.dublabel4int = IntVar(value=1)
+ else:
+ self.dublabel4int = IntVar(value=0)
+ self.dublabel2ent = Entry(self.frame10, textvariable=self.dublabel2str)
+ self.dublabel2ent.grid(row=1, column=1)
+ self.dublabel3ent = Entry(self.frame10, textvariable=self.dublabel3str)
+ self.dublabel3ent.grid(row=2, column=1)
+ self.dublabel4ent = Checkbutton(self.frame10, variable=self.dublabel4int)
+ self.dublabel4ent.grid(row=3, column=1)
+ self.doublecutsclosebut = Button(
+ self.frame10, text="Save & Close", command=self.doublecutsclose
+ )
+ self.doublecutsclosebut.grid(row=4, column=1, sticky=E)
+ self.doublecutswin.geometry("+40+50")
+ self.frame10.grid(padx=20, pady=20)
+
+ def doublecutsclose(self):
+ self.fgenminlist.delete(self.doublecutsel)
+ self.fgenminlist.insert(self.doublecutsel, self.dublabel2str.get())
+ self.mincutlist[
+ self.fgenlist.get(self.doublecutsel)[:2]
+ ] = self.dublabel2str.get()
+ self.fgenmaxlist.delete(self.doublecutsel)
+ self.fgenmaxlist.insert(self.doublecutsel, self.dublabel3str.get())
+ self.maxcutlist[
+ self.fgenlist.get(self.doublecutsel)[:2]
+ ] = self.dublabel3str.get()
+ self.fgenrevlist.delete(self.doublecutsel)
+ if self.dublabel4int.get() == 1:
+ self.fgenrevlist.insert(self.doublecutsel, "yes")
+ self.revlist[self.fgenlist.get(self.doublecutsel)[:2]] = True
+ else:
+ self.fgenrevlist.insert(self.doublecutsel, "no")
+ self.revlist[self.fgenlist.get(self.doublecutsel)[:2]] = False
+ self.doublecutswin.destroy()
+
+ def annwindowclose(self):
+ self.annwindow.destroy()
+
+ def openFile1(self):
+ filename = tkFileDialog.askopenfilename(
+ filetypes=[
+ (
+ "genbank/embl/fasta",
+ (
+ "*.gbk",
+ "*.embl",
+ "*.gb",
+ "*.fa",
+ "*.fna",
+ "*.dna",
+ "*.fas",
+ "*.fasta",
+ ),
+ ),
+ ("All files", "*"),
+ ]
+ )
+ self.gen1.set(filename)
+
+ def openFile2(self):
+ filename = tkFileDialog.askopenfilename(
+ filetypes=[
+ (
+ "genbank/embl/fasta",
+ (
+ "*.gbk",
+ "*.embl",
+ "*.gb",
+ "*.fa",
+ "*.fna",
+ "*.dna",
+ "*.fas",
+ "*.fasta",
+ ),
+ ),
+ ("All files", "*"),
+ ]
+ )
+ self.gen2.set(filename)
+
+ def openFile3(self):
+ filename = tkFileDialog.askopenfilename(
+ filetypes=[
+ (
+ "genbank/embl/fasta",
+ (
+ "*.gbk",
+ "*.embl",
+ "*.gb",
+ "*.fa",
+ "*.fna",
+ "*.dna",
+ "*.fas",
+ "*.fasta",
+ ),
+ ),
+ ("All files", "*"),
+ ]
+ )
+ self.gen3.set(filename)
+
+ def openFile4(self):
+ filename = tkFileDialog.askopenfilename(
+ filetypes=[
+ (
+ "genbank/embl/fasta",
+ (
+ "*.gbk",
+ "*.embl",
+ "*.gb",
+ "*.fa",
+ "*.fna",
+ "*.dna",
+ "*.fas",
+ "*.fasta",
+ ),
+ ),
+ ("All files", "*"),
+ ]
+ )
+ self.gen4.set(filename)
+
+ def openFile5(self):
+ filename = tkFileDialog.askopenfilename(
+ filetypes=[
+ (
+ "genbank/embl/fasta",
+ (
+ "*.gbk",
+ "*.embl",
+ "*.gb",
+ "*.fa",
+ "*.fna",
+ "*.dna",
+ "*.fas",
+ "*.fasta",
+ ),
+ ),
+ ("All files", "*"),
+ ]
+ )
+ self.gen5.set(filename)
+
+ def openFile6(self):
+ filename = tkFileDialog.askopenfilename(
+ filetypes=[
+ (
+ "genbank/embl/fasta",
+ (
+ "*.gbk",
+ "*.embl",
+ "*.gb",
+ "*.fa",
+ "*.fna",
+ "*.dna",
+ "*.fas",
+ "*.fasta",
+ ),
+ ),
+ ("All files", "*"),
+ ]
+ )
+ self.gen6.set(filename)
+
+ def openFile7(self):
+ filename = tkFileDialog.askopenfilename(
+ filetypes=[
+ (
+ "genbank/embl/fasta",
+ (
+ "*.gbk",
+ "*.embl",
+ "*.gb",
+ "*.fa",
+ "*.fna",
+ "*.dna",
+ "*.fas",
+ "*.fasta",
+ ),
+ ),
+ ("All files", "*"),
+ ]
+ )
+ self.gen7.set(filename)
+
+ def openFile8(self):
+ filename = tkFileDialog.askopenfilename(
+ filetypes=[
+ (
+ "genbank/embl/fasta",
+ (
+ "*.gbk",
+ "*.embl",
+ "*.gb",
+ "*.fa",
+ "*.fna",
+ "*.dna",
+ "*.fas",
+ "*.fasta",
+ ),
+ ),
+ ("All files", "*"),
+ ]
+ )
+ self.gen8.set(filename)
+
+ def openFile9(self):
+ filename = tkFileDialog.askopenfilename(
+ filetypes=[
+ (
+ "genbank/embl/fasta",
+ (
+ "*.gbk",
+ "*.embl",
+ "*.gb",
+ "*.fa",
+ "*.fna",
+ "*.dna",
+ "*.fas",
+ "*.fasta",
+ ),
+ ),
+ ("All files", "*"),
+ ]
+ )
+ self.gen9.set(filename)
+
+ def openFile0(self):
+ filename = tkFileDialog.askopenfilename(
+ filetypes=[
+ (
+ "genbank/embl/fasta",
+ (
+ "*.gbk",
+ "*.embl",
+ "*.gb",
+ "*.fa",
+ "*.fna",
+ "*.dna",
+ "*.fas",
+ "*.fasta",
+ ),
+ ),
+ ("All files", "*"),
+ ]
+ )
+ self.gen0.set(filename)
+
+ def openBlast1(self):
+ filename = tkFileDialog.askopenfilename()
+ self.blast1.set(filename)
+
+ def openBlast2(self):
+ filename = tkFileDialog.askopenfilename()
+ self.blast2.set(filename)
+
+ def openBlast3(self):
+ filename = tkFileDialog.askopenfilename()
+ self.blast3.set(filename)
+
+ def openBlast4(self):
+ filename = tkFileDialog.askopenfilename()
+ self.blast4.set(filename)
+
+ def openBlast5(self):
+ filename = tkFileDialog.askopenfilename()
+ self.blast5.set(filename)
+
+ def openBlast6(self):
+ filename = tkFileDialog.askopenfilename()
+ self.blast6.set(filename)
+
+ def openBlast7(self):
+ filename = tkFileDialog.askopenfilename()
+ self.blast7.set(filename)
+
+ def openBlast8(self):
+ filename = tkFileDialog.askopenfilename()
+ self.blast8.set(filename)
+
+ def openBlast9(self):
+ filename = tkFileDialog.askopenfilename()
+ self.blast9.set(filename)
+
+ def getoutfile(self):
+ if self.filetype.get() == "Bitmap (bmp)":
+ filename = tkFileDialog.asksaveasfilename(
+ filetypes=[("bmp", "*.bmp"), ("All files", "*")]
+ )
+ else:
+ filename = tkFileDialog.asksaveasfilename(
+ filetypes=[("svg", "*.svg"), ("All files", "*")]
+ )
+ self.outfile.set(filename)
+
+ def handleDownload(self, block):
+ self.downloadFile.write(block)
+ if (
+ self.thecount * 100 / self.totalBytes
+ != (self.thecount + len(block)) * 100 / self.totalBytes
+ ):
+ try:
+ self.processLab.config(
+ text="Finding Blast... Done\nDownloading... "
+ + str((self.thecount + len(block)) * 100 / self.totalBytes)
+ + "%"
+ )
+ except:
+ pass
+ self.thecount += len(block)
+
+ def downloadBlastAuto(self):
+ self.thedlblast = threading.Thread(target=self.downloadBlast)
+ self.thedlblast.start()
+
+ def downloadBlastMan(self):
+ theplatform = platform.system()
+ architecture = platform.architecture()[0]
+ if theplatform == "Linux" and architecture == "32bit":
+ ok = tkMessageBox.askokcancel(
+ "Downloading Blast Manually",
+ "Easyfig suggests downloading\nand extracting\nncbi-blast-x.x.x+-ia32-linux.tar.gz\n\
+clicking ok will bring up\nthe download location\nin your browser.",
+ )
+ if ok:
+ webbrowser.open_new(
+ "ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/"
+ )
+ elif theplatform == "Linux" and architecture == "64bit":
+ ok = tkMessageBox.askokcancel(
+ "Downloading Blast Manually",
+ "Easyfig suggests downloading\nand extracting\nncbi-blast-x.x.x+-x64-linux.tar.gz\n\
+clicking ok will bring up\nthe download location\nin your browser.",
+ )
+ if ok:
+ webbrowser.open_new(
+ "ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/"
+ )
+ elif theplatform == "Windows" and architecture == "32bit":
+ ok = tkMessageBox.askokcancel(
+ "Downloading Blast Manually",
+ "Easyfig suggests downloading\nand running\nncbi-blast-x.x.x+-win32.exe\n\
+clicking ok will bring up\nthe download location\nin your browser.",
+ )
+ if ok:
+ webbrowser.open_new(
+ "ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/"
+ )
+ elif theplatform == "Windows" and architecture == "64bit":
+ ok = tkMessageBox.askokcancel(
+ "Downloading Blast Manually",
+ "Easyfig suggests downloading\nand running\nncbi-blast-x.x.x+-win64.exe\n\
+clicking ok will bring up\nthe download location\nin your browser.",
+ )
+ if ok:
+ webbrowser.open_new(
+ "ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/"
+ )
+ elif theplatform == "Darwin":
+ ok = tkMessageBox.askokcancel(
+ "Downloading Blast Manually",
+ "Easyfig suggests downloading\nand running\nncbi-blast-x.x.x+.dmg\n\
+clicking ok will bring up\nthe download location\nin your browser.",
+ )
+ if ok:
+ webbrowser.open_new(
+ "ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/"
+ )
+ else:
+ ok = tkMessageBox.askokcancel(
+ "Downloading Blast Manually",
+ "Easyfig suggests downloading\nand compiling\nncbi-blast-x.x.x+.src.tar.gz\n\
+clicking ok will bring up\nthe download location\nin your browser.",
+ )
+ if ok:
+ webbrowser.open_new(
+ "ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/"
+ )
+
+ def chooseBlastDir(self):
+ tempdir = tkFileDialog.askdirectory(
+ title="Please select a directory with blastn and makeblastdb."
+ )
+ if tempdir == () or tempdir == "":
+ return
+ if os.path.exists(tempdir + "/blastn.exe") and os.path.exists(
+ tempdir + "/makeblastdb.exe"
+ ):
+ self.blastnDir = tempdir + "/blastn.exe"
+ self.dbnDir = tempdir + "/makeblastdb.exe"
+ elif os.path.exists(tempdir + "/blastn") and os.path.exists(
+ tempdir + "/makeblastdb"
+ ):
+ self.blastnDir = tempdir + "/blastn"
+ self.dbnDir = tempdir + "/makeblastdb"
+ else:
+ tkMessageBox.showerror("Try again.", "Blast not found in Directory.")
+ self.blastnDir = None
+ self.dbnDir = None
+
+ def downloadBlast(self):
+ theplatform = platform.system()
+ architecture = platform.architecture()[0]
+ self.processLab.config(text="Finding Blast...")
+ try:
+ ftp = FTP("ftp.ncbi.nlm.nih.gov")
+ ftp.login()
+ ftp.cwd("blast/executables/blast+/LATEST/")
+ files = []
+ ftp.dir(files.append)
+ except:
+ self.processLab.config(
+ text="Unable to Create FTP \nconnection.\nPlease dowload manually."
+ )
+ return
+ filename = None
+ try:
+ true_platform = os.environ["PROCESSOR_ARCHITEW6432"]
+ if true_platform == "AMD64":
+ architecture = "64bit"
+ except KeyError:
+ pass
+ for line in files:
+ if (
+ theplatform == "Linux"
+ and architecture == "32bit"
+ and line.split()[8][-17:] == "ia32-linux.tar.gz"
+ ):
+ filename = line.split()[8]
+ self.totalBytes = int(line.split()[4])
+ elif (
+ theplatform == "Linux"
+ and architecture == "64bit"
+ and line.split()[8][-16:] == "x64-linux.tar.gz"
+ ):
+ filename = line.split()[8]
+ self.totalBytes = int(line.split()[4])
+ elif (
+ theplatform == "Windows"
+ and architecture == "32bit"
+ and line.split()[8][-17:] == "ia32-win32.tar.gz"
+ ):
+ filename = line.split()[8]
+ self.totalBytes = int(line.split()[4])
+ elif (
+ theplatform == "Windows"
+ and architecture == "64bit"
+ and line.split()[8][-16:] == "x64-win64.tar.gz"
+ ):
+ filename = line.split()[8]
+ self.totalBytes = int(line.split()[4])
+ elif (
+ theplatform == "Darwin"
+ and line.split()[8][-23:] == "universal-macosx.tar.gz"
+ ):
+ filename = line.split()[8]
+ self.totalBytes = int(line.split()[4])
+ if filename == None:
+ self.processLab.config(
+ text="Unable to download blast.\nPlease dowload manually."
+ )
+ return
+ self.thecount = 0
+ try:
+ self.downloadFile = open(filename, "wb")
+ except:
+ self.processLab.config(
+ text="Unable to download blast.\nPlease dowload manually."
+ )
+ return
+ ftp.retrbinary("RETR " + filename, self.handleDownload)
+ self.downloadFile.close()
+ self.processLab.config(text="Downloading... Complete\nExtracting file...")
+ try:
+ tfile = tarfile.open(filename, "r:gz")
+ tfile.extractall()
+ except:
+ self.processLab.config(
+ text="Unable to download blast.\nPlease dowload manually."
+ )
+ return
+ filenamedir = filename.split("+")[0] + "+"
+ if theplatform == "Windows":
+ try:
+ shutil.move(filenamedir + "/bin/makeblastdb.exe", self.pwd)
+ except:
+ pass
+ try:
+ shutil.move(filenamedir + "/bin/blastn.exe", self.pwd)
+ except:
+ pass
+ try:
+ shutil.move(filenamedir + "/bin/tblastx.exe", self.pwd)
+ except:
+ pass
+ else:
+ try:
+ shutil.move(filenamedir + "/bin/makeblastdb", self.pwd)
+ except:
+ pass
+ try:
+ shutil.move(filenamedir + "/bin/blastn", self.pwd)
+ except:
+ pass
+ try:
+ shutil.move(filenamedir + "/bin/tblastx", self.pwd)
+ except:
+ pass
+ tfile.close()
+ shutil.rmtree(filenamedir)
+ os.remove(filename)
+ if os.path.exists(self.pwd + "/blastn") or os.path.exists(
+ self.pwd + "/blastn.exe"
+ ):
+ self.processLab.config(text="Extracting file... Done\nBLAST+ installed.")
+ else:
+ self.processLab.config(
+ text="Unable to download blast.\nPlease dowload manually."
+ )
+
+
+def gbk2fasta(genbank, out, mincut, maxcut):
+ getseq = False
+ getembl = False
+ getmultifa = False
+ seq = ""
+ try:
+ mincut = int(mincut)
+ if mincut < 1:
+ mincut = 1
+ if maxcut != "Max":
+ maxcut = int(maxcut)
+ if maxcut < 1:
+ maxcut = 1
+ except:
+ print("Annotation slice values not valid.")
+ try:
+ gen = open(genbank)
+ outfile = open(out, "w")
+ for line in gen:
+ if line.startswith("ORIGIN"):
+ getseq = True
+ elif line.startswith("SQ Sequence"):
+ getembl = True
+ elif line.startswith(">"):
+ if getmultifa:
+ seq += "qqq"
+ else:
+ getmultifa = True
+ elif line.startswith("//"):
+ getseq = False
+ getembl = False
+ elif getseq:
+ seq += "".join(line.split()[1:])
+ elif getembl:
+ seq += "".join(line.split()[:-1])
+ elif getmultifa:
+ seq += line.rstrip()
+ if getmultifa:
+ getset = set(seq)
+ rightchars = set("atgcATGCqnNuUyYkKmMsSwWbBdDhHvVxXrR-")
+ isitgood = True
+ for i in getset:
+ if not i in rightchars:
+ isitgood = False
+ if not isitgood:
+ print(
+ "Annotation file contains invalid characters. Check genbank/EMBL contains no lines starting with > or that fasta file contains only valid nucleotides"
+ )
+ return 0
+ if "/" in out:
+ outfile.write(">" + out.split("/")[1] + "\n")
+ else:
+ outfile.write(">" + out + "\n")
+ if maxcut == "Max":
+ maxcut = len(seq)
+ if mincut == 1 and maxcut == len(seq):
+ if getmultifa:
+ seq = seq.replace("qqq", "n" * int(len(seq) / 500))
+ outfile.write(seq)
+ elif mincut < maxcut:
+ seq = seq[mincut - 1 : maxcut]
+ if getmultifa:
+ seq = seq.replace("qqq", "n" * int(len(seq) / 500))
+ outfile.write(seq)
+ else:
+ seq = seq[mincut - 1 :] + seq[:maxcut]
+ if getmultifa:
+ seq = seq.replace("qqq", "n" * int(len(seq) / 500))
+ outfile.write(seq)
+ if len(seq) == 0:
+ print("There is no sequence in " + genbank + ".")
+ return 0
+ else:
+ return 1
+ except:
+ print(genbank + " does not exist.")
+ return 0
+
+
+def getGCcontent(filename, windsize, step, mincut, maxcut):
+ try:
+ gen = open(filename)
+ getseq = False
+ getembl = False
+ seq = ""
+ for line in gen:
+ if line.startswith("ORIGIN"):
+ getseq = True
+ elif line.startswith("SQ Sequence"):
+ getembl = True
+ elif line.startswith("//"):
+ getseq = False
+ getembl = False
+ elif getseq:
+ seq += "".join(line.split()[1:])
+ elif getembl:
+ seq += "".join(line.split()[:-1])
+ gen.close()
+ seq = seq.upper()
+ except:
+ print("Annotation file " + filename + " not valid.")
+ return None
+ if len(seq) == 0:
+ print("Annotation file " + filename + " not valid.")
+ return None
+ if maxcut == "Max":
+ seq = seq[int(mincut) - 1 :]
+ elif int(maxcut) <= int(mincut):
+ seq = seq[int(mincut) - 1 :] + seq[: int(maxcut) + 1]
+ else:
+ seq = seq[int(mincut) - 1 : int(maxcut) + 1]
+ window1 = int(windsize) / 2
+ window2 = int(windsize) - window1
+ thearray = []
+ for i in range(0, len(seq), int(step)):
+ seqstring = seq[max([0, i - window1]) : i + window2]
+ thearray.append(
+ (seqstring.count("G") + seqstring.count("C")) * 1.0 / len(seqstring) - 0.5
+ )
+ return thearray
+
+
+def getGCskew(filename, windsize, step, mincut, maxcut):
+ try:
+ getseq = False
+ getembl = False
+ seq = ""
+ gen = open(filename)
+ for line in gen:
+ if line.startswith("ORIGIN"):
+ getseq = True
+ elif line.startswith("SQ Sequence"):
+ getembl = True
+ elif line.startswith("//"):
+ getseq = False
+ getembl = False
+ elif getseq:
+ seq += "".join(line.split()[1:])
+ elif getembl:
+ seq += "".join(line.split()[:-1])
+ gen.close()
+ seq = seq.upper()
+ except:
+ print("Annotation file " + filename + " not valid.")
+ return None
+ if len(seq) == 0:
+ print("Annotation file " + filename + " not valid.")
+ return None
+ if maxcut == "Max":
+ seq = seq[int(mincut) - 1 :]
+ elif int(maxcut) <= int(mincut):
+ seq = seq[int(mincut) - 1 :] + seq[: int(maxcut) + 1]
+ else:
+ seq = seq[int(mincut) - 1 : int(maxcut) + 1]
+ window1 = int(windsize) / 2
+ window2 = int(windsize) - window1
+ thearray = []
+ for i in range(0, len(seq), int(step)):
+ seqstring = seq[max([0, i - window1]) : i + window2]
+ gcount = seqstring.count("G")
+ ccount = seqstring.count("C")
+ try:
+ thearray.append((gcount - ccount) * 1.0 / (gcount + ccount))
+ except:
+ thearray.append(0)
+ return thearray
+
+
+def getCoverage(filename, filename2, mincut, maxcut):
+ # DEFNIITION: takes a file and reads in all contigs, their start positions and the reads located within the contig
+ # REQUIRES: a valid ace file
+ # RETURNS: A list of objects of class contig
+ seq = ""
+ getseq = False
+ getembl = False
+ try:
+ gen = open(filename)
+ for line in gen:
+ if line.startswith("ORIGIN"):
+ getseq = True
+ elif line.startswith("SQ Sequence"):
+ getembl = True
+ elif line.startswith("//"):
+ getseq = False
+ getembl = False
+ elif getseq:
+ seq += "".join(line.split()[1:])
+ elif getembl:
+ seq += "".join(line.split()[:-1])
+ gen.close()
+ except:
+ print("Annotation file " + filename + " not valid.")
+ return None
+ if len(seq) == 0:
+ print("Annotation file " + filename + " not valid.")
+ return None
+ seq = seq.lower()
+ if maxcut == "Max":
+ seq = seq[int(mincut) - 1 :]
+ elif int(maxcut) <= int(mincut):
+ seq = seq[int(mincut) - 1 :] + seq[: int(maxcut) + 1]
+ else:
+ seq = seq[int(mincut) - 1 : int(maxcut) + 1]
+ outlist = [0 for i in range(len(seq))]
+ readlist = [] # list of reads to be added to the contig class
+ index = 0 # switches to 1 once program has dealt with the initial contig
+ # iterates through the file determines what information is contained in each line then reads it to the
+ # right locationregular expressions python
+ transtab = string.maketrans("atgc", "tacg")
+ acefile = open(filename2)
+ for line in acefile:
+ # puts name in file and starts reading sequence below
+ if line.startswith("CO "):
+ if index != 0:
+ freqDict = {}
+ for j in readlist:
+ for k in range(j.startpos, (j.startpos + j.readLength)):
+ if k in freqDict:
+ freqDict[k] += 1
+ else:
+ freqDict[k] = 1
+ coverageList = []
+ for j in range(1, len(contigSeq) + 1):
+ if contigSeq[j - 1] != "*":
+ coverageList.append(freqDict[j])
+ contigSeq = contigSeq.lower()
+ thepos = seq.find(contigSeq)
+ if thepos != -1:
+ outlist = (
+ outlist[:thepos]
+ + coverageList
+ + outlist[thepos + len(coverageList) :]
+ )
+ else:
+ contigSeq = contigSeq[::-1]
+ contigSeq = contigSeq.translate(transtab)
+ thepos = seq.find(contigSeq)
+ if thepos != -1:
+ coverageList.reverse()
+ outlist = (
+ outlist[:thepos]
+ + coverageList
+ + outlist[thepos + len(coverageList) :]
+ )
+ readlist = []
+ index = 1
+ contigSeq = ""
+ contigName = line.split()[
+ 1
+ ] # splits the line into a list with elements seperated by whitespace characters
+ # then returns the second element of that list (the name)
+ readnumber = 0 # initiates the read number used to determine where the readsequence will be added
+ # creates a object of class read with the name and location within the contig, leaves sequence as the
+ # empty string to be read in later
+ elif line.startswith("BQ"):
+ index = 2
+ elif line.startswith("AF "):
+ readIt = (
+ line.split()
+ ) # splits the line into a list of strings seperated by whitespace characters
+ readName = readIt[1] # the name of the read
+ readPos = int(readIt[3]) # the position of the read within the contig
+ readInstance = read(
+ readName, readPos, None
+ ) # creates an instance of class read
+ readlist.append(readInstance) # appends to list
+ elif index == 1:
+ contigSeq += line[:-1]
+ elif line.startswith("QA "):
+ readlist[readnumber].startpos = (
+ readlist[readnumber].startpos + int(line.split()[1]) - 1
+ )
+ readlist[readnumber].readLength = (
+ int(line.split()[2]) - int(line.split()[1]) + 1
+ )
+ readnumber += 1
+ freqDict = {}
+ for j in readlist:
+ for k in range(j.startpos, (j.startpos + j.readLength)):
+ if k in freqDict:
+ freqDict[k] += 1
+ else:
+ freqDict[k] = 1
+ coverageList = []
+ for j in range(1, len(contigSeq) + 1):
+ if contigSeq[j - 1] != "*":
+ coverageList.append(freqDict[j])
+ contigSeq = contigSeq.lower()
+ thepos = seq.find(contigSeq)
+ if thepos != -1:
+ outlist = (
+ outlist[:thepos] + coverageList + outlist[thepos + len(coverageList) :]
+ )
+ else:
+ contigSeq = contigSeq[::-1]
+ contigSeq = contigSeq.translate(transtab)
+ thepos = seq.find(contigSeq)
+ if thepos != -1:
+ coverageList.reverse()
+ outlist = (
+ outlist[:thepos] + coverageList + outlist[thepos + len(coverageList) :]
+ )
+ return outlist
+
+
+def getCustom(filename):
+ try:
+ thearray = []
+ gen = open(filename)
+ templine = gen.readline().rstrip().split("\t")
+ linelen = len(templine)
+ for i in templine:
+ thearray.append([float(i)])
+ for line in gen:
+ templine = line.rstrip().split("\t")
+ for i in range(len(templine)):
+ if templine[i] != "":
+ thearray[i].append(float(templine[i]))
+ return thearray
+ except:
+ print(filename + " not valid graph file.")
+ return None
+
+
+def genBlast(inlist, cutlist):
+ try:
+ os.mkdir("temp_easyfig")
+ except:
+ pass
+ num = 1
+ outlist = []
+ for i in inlist:
+ gbk2fasta(
+ i,
+ "temp_easyfig/" + str(num) + ".easyfig.fa",
+ cutlist[num - 1][0],
+ cutlist[num - 1][1],
+ )
+ num += 1
+ for i in range(len(inlist) - 1):
+ if isNewBlastDB():
+ subprocess.Popen(
+ "makeblastdb -dbtype nucl -out temp_easyfig/tempdb -in temp_easyfig/"
+ + str(i + 2)
+ + ".easyfig.fa",
+ shell=True,
+ ).wait()
+ print(
+ "makeblastdb -dbtype nucl -out temp_easyfig/tempdb -in temp_easyfig/"
+ + str(i + 2)
+ + ".easyfig.fa"
+ )
+ elif isLegBlastDB():
+ subprocess.Popen(
+ "formatdb -p F -t tempdb -n temp_easyfig/tempdb -i temp_easyfig/"
+ + str(i + 2)
+ + ".easyfig.fa",
+ shell=True,
+ ).wait()
+ else:
+ print("Could not find BLAST.")
+ sys.exit()
+ if isNewBlastn():
+ subprocess.Popen(
+ "blastn -task blastn -db temp_easyfig/tempdb -outfmt 6 -query temp_easyfig/"
+ + str(i + 1)
+ + ".easyfig.fa -out temp_easyfig/"
+ + str(i + 1)
+ + str(i + 2)
+ + ".easyfig.out",
+ shell=True,
+ ).wait()
+ elif isLegBlastall():
+ subprocess.Popen(
+ "blastall -p blastn -d temp_easyfig/tempdb -F F -m 8 -a 8 -i temp_easyfig/"
+ + str(i + 1)
+ + ".easyfig.fa -o temp_easyfig/"
+ + str(i + 1)
+ + str(i + 2)
+ + ".easyfig.out",
+ shell=True,
+ ).wait()
+ else:
+ print("Could not find BLAST.")
+ sys.exit()
+ outlist.append(inlist[i])
+ outlist.append("temp_easyfig/" + str(i + 1) + str(i + 2) + ".easyfig.out")
+ outlist.append(inlist[-1])
+ return outlist
+
+
+def genTBlastX(inlist, cutlist):
+ pwd = os.getcwd()
+ if os.path.exists("temp_easyfig"):
+ print("please run from a directory without the folder temp_easyfig")
+ sys.exit()
+ os.mkdir("temp_easyfig")
+ os.chdir("temp_easyfig")
+ num = 1
+ outlist = []
+ for i in inlist:
+ if i[0] in ["/", "\\", "~"]:
+ thepath = i
+ else:
+ thepath = "../" + i
+ gbk2fasta(
+ thepath, str(num) + ".easyfig.fa", cutlist[num - 1][0], cutlist[num - 1][1]
+ )
+ num += 1
+ for i in range(len(inlist) - 1):
+ if isNewBlastDB():
+ subprocess.Popen(
+ "makeblastdb -dbtype nucl -out tempdb -in "
+ + str(i + 2)
+ + ".easyfig.fa",
+ shell=True,
+ ).wait()
+ elif isLegBlastDB():
+ subprocess.Popen(
+ "formatdb -p F -t tempdb -n tempdb -i " + str(i + 2) + ".easyfig.fa",
+ shell=True,
+ ).wait()
+ else:
+ print("Could not find BLAST.")
+ sys.exit()
+ if isNewTblastx():
+ subprocess.Popen(
+ "tblastx -db tempdb -outfmt 6 -query "
+ + str(i + 1)
+ + ".easyfig.fa -out "
+ + str(i + 1)
+ + str(i + 2)
+ + ".easyfig.out",
+ shell=True,
+ ).wait()
+ elif isLegBlastall():
+ subprocess.Popen(
+ "blastall -p tblastx -d tempdb -F F -m 8 -a 8 -i "
+ + str(i + 1)
+ + ".easyfig.fa -o "
+ + str(i + 1)
+ + str(i + 2)
+ + ".easyfig.out",
+ shell=True,
+ ).wait()
+ else:
+ print("Could not find BLAST.")
+ sys.exit()
+ outlist.append(inlist[i])
+ outlist.append(os.getcwd() + "/" + str(i + 1) + str(i + 2) + ".easyfig.out")
+ os.chdir(pwd)
+ outlist.append(inlist[-1])
+ return outlist
+
+
+global abortCaptain
+
+
+minlength = 0
+mineval = 0.001
+minIdent = 0
+inputlist = []
+width = 5000
+height1 = 50
+height2 = 100
+minblastc = (200, 200, 200)
+maxblastc = (100, 100, 100)
+minblastci = (200, 200, 200)
+maxblastci = (100, 100, 100)
+drawfig1 = False
+drawfig2 = False
+drawfig3 = False
+compress = True
+reverseList = []
+featDict = {}
+glt = 5
+exont = 2
+genet = 1
+featlengths = []
+aln = "centre"
+graphit = None
+blastoutline = True
+minmaxlist = []
+getgc = False
+getgcskew = False
+getcoverage = False
+getcustom = False
+windsize = 1000
+step = 1000
+graphit = None
+multigraph = True
+loggraph = False
+gtype = "Histogram"
+axisthick = 1
+pvc = (255, 0, 0)
+nvc = (0, 0, 255)
+ggap = 10
+gheight = 50
+blastit = True
+tblastit = False
+blastfiles = None
+lastflag = 1
+filename = None
+svg = False
+filter = False
+keep_blast = False
+nofeat = False
+gmaxy = "Auto"
+legend = "None"
+legname = "gene"
+abortCaptain = False
+
+if (
+ len(sys.argv) >= 2
+ and sys.argv[1] != "--help"
+ and sys.argv[1] != "-h"
+ and sys.argv[1] != "-help"
+):
+ for i in range(1, len(sys.argv)):
+ if sys.argv[i][:1] == "-":
+ lastflag = i + 2
+ if sys.argv[i] == "-o":
+ filename = sys.argv[i + 1]
+ elif sys.argv[i] == "-e":
+ mineval = float(sys.argv[i + 1])
+ elif sys.argv[i] == "-min_length":
+ minlength = int(sys.argv[i + 1])
+ elif sys.argv[i] == "-i":
+ minIdent = float(sys.argv[i + 1])
+ elif sys.argv[i] == "-width":
+ width = int(sys.argv[i + 1])
+ elif sys.argv[i] == "-ann_height":
+ height1 = int((sys.argv[i + 1]))
+ elif sys.argv[i] == "-blast_height":
+ height2 = int((sys.argv[i + 1]))
+ elif sys.argv[i] == "-f1":
+ if (
+ sys.argv[i + 1] == "T"
+ or sys.argv[i + 1] == "t"
+ or sys.argv[i + 1] == "True"
+ or sys.argv[i + 1] == "true"
+ ):
+ drawfig1 = True
+ elif (
+ sys.argv[i + 1] == "F"
+ or sys.argv[i + 1] == "f"
+ or sys.argv[i + 1] == "False"
+ or sys.argv[i + 1] == "false"
+ ):
+ drawfig1 = False
+ elif sys.argv[i] == "-f2":
+ drawfig2 = int(sys.argv[i + 1])
+ elif sys.argv[i] == "-f3":
+ drawfig3 = sys.argv[i + 1]
+ elif sys.argv[i] == "-uncomp":
+ if (
+ sys.argv[i + 1] == "T"
+ or sys.argv[i + 1] == "t"
+ or sys.argv[i + 1] == "True"
+ or sys.argv[i + 1] == "true"
+ ):
+ compress = False
+ elif sys.argv[i] == "-blastn":
+ blastit = True
+ lastflag -= 1
+ elif sys.argv[i] == "-tblastx":
+ tblastit = True
+ blastit = False
+ lastflag -= 1
+ elif sys.argv[i] == "-blast_files":
+ blastit = False
+ blastfiles = i
+ elif sys.argv[i] == "-blast_col":
+ if sys.argv[i + 1].isdigit():
+ lastflag = i + 7
+ t1 = int(sys.argv[i + 1])
+ t2 = int(sys.argv[i + 2])
+ t3 = int(sys.argv[i + 3])
+ t4 = int(sys.argv[i + 4])
+ t5 = int(sys.argv[i + 5])
+ t6 = int(sys.argv[i + 6])
+ else:
+ if sys.argv[i + 1] == "blue":
+ t1, t2, t3, t4, t5, t6 = 30, 144, 255, 25, 25, 112
+ elif sys.argv[i + 1] == "red":
+ t1, t2, t3, t4, t5, t6 = 200, 100, 0, 255, 0, 0
+ elif sys.argv[i + 1] == "gray":
+ t1, t2, t3, t4, t5, t6 = 20, 20, 20, 175, 175, 175
+ minblastc = (t1, t2, t3)
+ maxblastc = (t4, t5, t6)
+ elif sys.argv[i] == "-blast_col_inv":
+ if sys.argv[i + 1].isdigit():
+ lastflag = i + 7
+ t1 = int(sys.argv[i + 1])
+ t2 = int(sys.argv[i + 2])
+ t3 = int(sys.argv[i + 3])
+ t4 = int(sys.argv[i + 4])
+ t5 = int(sys.argv[i + 5])
+ t6 = int(sys.argv[i + 6])
+ else:
+ if sys.argv[i + 1] == "blue":
+ t1, t2, t3, t4, t5, t6 = 30, 144, 255, 25, 25, 112
+ elif sys.argv[i + 1] == "red":
+ t1, t2, t3, t4, t5, t6 = 200, 100, 0, 255, 0, 0
+ minblastci = (t1, t2, t3)
+ maxblastci = (t4, t5, t6)
+ elif sys.argv[i] == "-f":
+ r, g, b = 64, 224, 208
+ arrow = "arrow"
+ feat = sys.argv[i + 1]
+ if feat == "F":
+ nofeat = True
+ if len(sys.argv) > i + 2 and sys.argv[i + 2].isdigit():
+ r = int(sys.argv[i + 2])
+ g = int(sys.argv[i + 3])
+ b = int(sys.argv[i + 4])
+ if len(sys.argv) > i + 5 and (
+ sys.argv[i + 5] == "arrow"
+ or sys.argv[i + 5] == "rect"
+ or sys.argv[i + 5] == "frame"
+ or sys.argv[i + 5] == "pointer"
+ ):
+ arrow = sys.argv[i + 5]
+ lastflag = i + 6
+ else:
+ lastflag = i + 5
+ if len(sys.argv) > i + 2 and (
+ sys.argv[i + 2] == "arrow"
+ or sys.argv[i + 2] == "rect"
+ or sys.argv[i + 2] == "frame"
+ or sys.argv[i + 2] == "pointer"
+ ):
+ arrow = sys.argv[i + 2]
+ lastflag = i + 3
+ featDict[feat] = (arrow, (r, g, b))
+ elif sys.argv[i] == "-glt":
+ glt = int(sys.argv[i + 1])
+ elif sys.argv[i] == "-exont":
+ exont = int(sys.argv[i + 1])
+ elif sys.argv[i] == genet:
+ genet = int(sys.argv[i + 1])
+ elif sys.argv[i] == "-aln":
+ aln = sys.argv[i + 1]
+ if aln == "best":
+ aln = "best blast"
+ elif sys.argv[i] == "-bo":
+ if (
+ sys.argv[i + 1] == "T"
+ or sys.argv[i + 1] == "t"
+ or sys.argv[i + 1] == "True"
+ or sys.argv[i + 1] == "true"
+ ):
+ blastoutline = True
+ else:
+ blastoutline = False
+ elif sys.argv[i] == "-G":
+ if sys.argv[i + 1] == "GCContent":
+ getgc = True
+ elif sys.argv[i + 1] == "GCSkew":
+ getgcskew = True
+ elif sys.argv[i + 1] == "Coverage":
+ getcoverage = True
+ gfilename = sys.arv[i + 2]
+ lastflag += 1
+ elif sys.argv[i + 1] == "Custom":
+ getcustom = True
+ gfilename = sys.argv[i + 2]
+ lastflag += 1
+ else:
+ print(sys.argv[i + 1] + " not a valid graph type")
+ elif sys.argv[i] == "-wind_size":
+ windsize = int(sys.argv[i + 1])
+ elif sys.argv[i] == "-step":
+ step = int(sys.argv[i + 1])
+ elif sys.argv[i] == "-line":
+ if (
+ sys.argv[i + 1] == "T"
+ or sys.argv[i + 1] == "t"
+ or sys.argv[i + 1] == "True"
+ or sys.argv[i + 1] == "true"
+ ):
+ gtype = "Line"
+ elif sys.argv[i] == "-axis_t":
+ axisthick = sys.argv[i + 1]
+ elif sys.argv[i] == "-pos_col":
+ lastflag = i + 4
+ r = int(sys.argv[i + 1])
+ g = int(sys.argv[i + 2])
+ b = int(sys.argv[i + 3])
+ pvc = (r, g, b)
+ elif sys.argv[i] == "-neg_col":
+ lastflag = i + 4
+ r = int(sys.argv[i + 1])
+ g = int(sys.argv[i + 2])
+ b = int(sys.argv[i + 3])
+ nvc = (r, g, b)
+ elif sys.argv[i] == "-g_height":
+ gheight = int(sys.argv[i + 1])
+ elif sys.argv[i] == "-gap":
+ ggap = int(sys.argv[i + 1])
+ elif sys.argv[i] == "-y_max":
+ gmaxy = int(sys.argv[i + 1])
+ elif sys.argv[i] == "-A":
+ if (
+ sys.argv[i + 1] == "T"
+ or sys.argv[i + 1] == "t"
+ or sys.argv[i + 1] == "True"
+ or sys.argv[i + 1] == "true"
+ ):
+ auto = True
+ else:
+ auto = False
+ elif sys.argv[i] == "-svg":
+ svg = True
+ lastflag -= 1
+ elif sys.argv[i] == "-keep":
+ keep_blast = True
+ lastflag -= 1
+ elif sys.argv[i] == "-filter":
+ filter = True
+ lastflag -= 1
+ elif sys.argv[i] == "-legend":
+ if sys.argv[i + 1] == "single":
+ legend = "Single column"
+ elif sys.argv[i + 1] == "double":
+ legend = "Two columns"
+ elif sys.argv[i + 1] == "top":
+ legend = "Top"
+ elif sys.argv[i + 1] == "bottom":
+ legend = "Bottom"
+ elif sys.argv[i + 1] == "both":
+ legend = "Top & Bottom"
+ else:
+ print(
+ "Legend options are (case sensitive), using None."
+ )
+ elif sys.argv[i] == "-leg_name":
+ legname = sys.argv[i + 1]
+ inlist = sys.argv[lastflag + 1 :]
+ if blastfiles != None and lastflag == blastfiles + 2:
+ allthestuff = sys.argv[blastfiles + 1 :]
+ allthestuff2 = []
+ for i in allthestuff:
+ if i != "R" and i != "Max" and not i.isdigit():
+ allthestuff2.append(i)
+ inlist = allthestuff[len(allthestuff2) / 2 :]
+ last = inlist[0]
+ inlist = inlist[1:]
+ else:
+ last = sys.argv[lastflag]
+ templist = []
+ revlist = []
+ cutlist = []
+ rev = False
+ cuts = [None, None]
+ for i in inlist:
+ if i == "R" or i == "Max" or i.isdigit():
+ if os.path.exists(i):
+ sys.stderr.write(
+ 'Cannot tell if "'
+ + i
+ + '" is an file or argument (the file exists and this is also the argument to trim or reverse genome).\
+ \nPlease rename file (if file) or remove file from directory (if argument).\n'
+ )
+ sys.exit()
+ if i == "R":
+ rev = True
+ getit = True
+ elif i.isdigit():
+ if cuts[0] == None:
+ cuts[0] = int(i)
+ else:
+ cuts[1] = int(i)
+ elif i == "Max":
+ cuts[1] = i
+ else:
+ revlist.append(rev)
+ if cuts == [None, None]:
+ cuts = [1, "Max"]
+ cutlist.append(tuple(cuts))
+ templist.append(last)
+ rev = False
+ cuts = [None, None]
+ last = i
+ revlist.append(rev)
+ if cuts == [None, None]:
+ cuts = [1, "Max"]
+ cutlist.append(tuple(cuts))
+ for i in cutlist:
+ if None in i:
+ sys.stderr.write(
+ "Please provide a start coordinate and end coordinate for genome cuts. (Only a single coordinate was provided)\n"
+ )
+ sys.exit()
+ templist.append(last)
+ if getgc:
+ thearray = []
+ for j in range(len(templist)):
+ mincut, maxcut = cutlist[j]
+ thearray.append(getGCcontent(templist[j], windsize, step, mincut, maxcut))
+ graphit = [thearray, pvc, nvc, gheight, axisthick, gtype, gmaxy, ggap]
+ elif getgcskew:
+ thearray = []
+ for j in range(len(templist)):
+ mincut, maxcut = cutlist[j]
+ thearray.append(getGCskew(templist[j], windsize, step, mincut, maxcut))
+ graphit = [thearray, pvc, nvc, gheight, axisthick, gtype, gmaxy, ggap]
+ elif getcustom:
+ thearray = getcustom(gfilename)
+ graphit = [thearray, pvc, nvc, gheight, axisthick, gtype, gmaxy, ggap]
+ elif getcoverage:
+ thearray = [getCoverage(templist[0], gfilename, cutlist[0][0], cutlist[0][1])]
+ graphit = [thearray, pvc, nvc, gheight, axisthick, gtype, gmaxy, ggap]
+ if blastit:
+ inlist = genBlast(templist, cutlist)
+ elif tblastit:
+ inlist = genTBlastX(templist, cutlist)
+ elif blastfiles != None:
+ inlist = []
+ tempfiles = sys.argv[blastfiles + 1 :]
+ for i in templist[:-1]:
+ inlist.append(i)
+ inlist.append(tempfiles.pop(0))
+ inlist.append(templist[-1])
+ else:
+ "Please choolse -blastn or -tblastx flags to generate blast files, or use -blast_files to use previously generated files."
+ if filename == None:
+ print("Please choose a file to write to (-o tag) and try agian.")
+ sys.exit()
+ if featDict == {} and not nofeat:
+ featDict = {"CDS": ("arrow", (64, 224, 208))}
+ if svg:
+ x = drawsvg(
+ filename,
+ minlength,
+ mineval,
+ minIdent,
+ inlist,
+ width,
+ height1,
+ height2,
+ minblastc,
+ maxblastc,
+ minblastci,
+ maxblastci,
+ drawfig1,
+ drawfig2,
+ drawfig3,
+ compress,
+ revlist,
+ featDict,
+ glt,
+ exont,
+ genet,
+ featlengths,
+ aln,
+ graphit,
+ blastoutline,
+ cutlist,
+ filter,
+ legend,
+ legname,
+ )
+ else:
+ x = draw(
+ filename,
+ minlength,
+ mineval,
+ minIdent,
+ inlist,
+ width,
+ height1,
+ height2,
+ minblastc,
+ maxblastc,
+ minblastci,
+ maxblastci,
+ drawfig1,
+ drawfig2,
+ drawfig3,
+ compress,
+ revlist,
+ featDict,
+ glt,
+ exont,
+ genet,
+ featlengths,
+ aln,
+ graphit,
+ blastoutline,
+ cutlist,
+ filter,
+ legend,
+ legname,
+ )
+ if (blastit or tblastit) and not keep_blast:
+ shutil.rmtree("temp_easyfig")
+ print("Minimum blast hit reported: " + str(x) + "%")
+
+elif len(sys.argv) == 1:
+ from Tkinter import *
+ import tkFileDialog
+ import tkMessageBox
+ import tkSimpleDialog
+ import tkColorChooser
+
+ class DDlistbox(Listbox):
+ def __init__(self, master, **kw):
+ kw["selectmode"] = SINGLE
+ Listbox.__init__(self, master, kw)
+ self.bind("", self.setCurrent)
+ self.bind("", self.shiftSelection)
+ self.curIndex = None
+
+ def setCurrent(self, event):
+ self.curIndex = self.nearest(event.y)
+
+ def shiftSelection(self, event):
+ i = self.nearest(event.y)
+ if i < self.curIndex:
+ x = self.get(i)
+ self.delete(i)
+ self.insert(i + 1, x)
+ self.curIndex = i
+ elif i > self.curIndex:
+ x = self.get(i)
+ self.delete(i)
+ self.insert(i - 1, x)
+ self.curIndex = i
+
+ abortCaptain = False
+ root = Tk()
+ root.title("Easyfig.py")
+ root.option_add("*Font", "TkDefaultFont 12")
+ app = App(root)
+ root.mainloop()
+else:
+ print(
+ """
+Easyfig.py Written by: Mitchell Sullivan mjsull@gmail.com
+Supervisor: Dr. Scott Beatson University of Queensland 03.12.2010
+
+License: GPLv3
+
+Version 2.2.3
+
+Usage: Easyfig.py [options] GenBank/EMBL/fasta GenBank/EMBL/fasta GenBank/EMBL/fasta ...
+
+This script should work on 1 to an infinite amount of GenBank/EMBL files (given enough memory)
+
+Adding 2 integers after the annotation file will crop the annotation file.
+Adding a R after the annotation file will reverse compliment it.
+
+WARNING: Will overwrite output file without warning.
+WARNING: Will delete temp_easyfig folder if -keep flag not given.
+
+***************************************************************
+GenBank or EMBL file must have source line, or Sequence.
+' source 1..' or 'FT source 1..'
+
+for GenBank / EMBL
+
+***************************************************************
+
+The GenBank file preceding the blast file should always be the query
+the GenBank file after the blast file should always be the reference
+In it's present state only 'CDS' features will be recorded
+
+Options:
+-o Specify output file.
+-blastn Generate blastn files automatically. Requires blastall or blast+
+ in the path, Annotation file must have nucleotide sequence. [Default]
+-tblastx Generate tblastx files automatically. Requires blastall or blast+
+ in the path, Annotation file must have nucleotide sequence.
+-blast_files List of previously generated blast files, ordered. Query must be
+ annotation file on top, reference annotation file on bottom.
+-svg Create Scalable Vector Graphics (svg) file instead of bmp.
+-filter Filter small blast hits or annotations (< 4 pixels wide). [F]
+
+
+GENERAL OPTIONS:
+-width width of figure in pixels. [5000]
+-ann_height height of annotations in figure (pixels). [50]
+-blast_height height of blast hits in figure (pixels). [100]
+-f1 draw colour gradient figure for blast hits. [F]
+-f2 draw scale figure base pairs long. [0]
+-uncomp Do not compress figure. [F]
+-f [r g b] [arrow/rect/pointer/frame]
+ Draw features of type (case sensitive) in the
+ color r g b with illustration type arrow, rectangle,
+ pointer or frame. Default light blue arrows.
+ EXAMPLE: -f CDS 255 0 0 rect will draw all CDS features as
+ a red rectangle.
+ if none specified easyFig automatically draws CDS features.
+ If you want a figure with no features drawn use -f F
+-glt Genome line is pixels thick [5]
+-exont exon lines joining introns are pixels thick. [1]
+-genet outline of features is pixels thick. [1]
+-aln [centre]
+ Alignment of genomes
+ best aligns feature file perpendicular to best blast hit.
+-legend
+ Single: Gene names in single column
+ Double: Gene names in two columns
+ Top: Top feature file genes labelled above figure
+ Bottom: Bottom feature file genes labelled below figure
+ Both: Top and bottom feature files genes labelled above
+ and below genome.
+ None: No legend or gene labelling
+-leg_name Where to get feature name from [gene]
+
+BLAST OPTIONS:
+-e maxmimum e value of blast hits to be drawn. [0.001]
+-i minimum identity value of blast hits to be drawn. [0]
+-min_length minimum length of blast hits to be drawn. [0]
+-blast_col changes blast hits to gradient of red or blue
+ alternitively
+ defines color gradient for blast hits
+ worst blast hit reported will be color int1 int2 int3
+ where int 1 2 3 is the RGB of color range[0-255]
+ 100% identity blast hits will be color int4 int5 int6
+ [default 20 20 20 175 175 175]
+
+-blast_col_inv Colour for inverted blast hits.
+-bo Black outline of blast hits. [T]
+-keep Don't delete blast output (temp_easyfig/)
+
+GRAPH OPTIONS:
+-G
+ Plot GC Content, GC Skew, Coverage or Custom graph.
+ if Coverage or Custom filename for ace or custom file needs
+ to be provided. Details on how to make custom graph files
+ in manual.
+-wind_size Window size for calculating GC content/GC skew. [1000]
+-step Step size for calculating GC content/GC skew. [1000]
+-line Draw graph as a line graph. [T]
+-axis_t Thickness of X axis. [1]
+-pos_col RGB colour of positive values in graph. [Red]
+-neg_col RGB colour of negative values in graph. [Blue]
+-g_height height of graph in pixels. [50]
+-gap gap between graph and annotations. [10]
+-y_max Maximum y value [Default: max Y calculated.]
+
+
+EXAMPLES:
+
+Easyfig.py -filter -o outfile.bmp genbank1.gbk genbank2.gbk genbank3.gbk
+
+Easiest way to generate a simple comparison file between three (or more) annotation
+files. Shows CDS features as red arrows.
+
+Easyfig.py -o outfile.bmp -e 0.00001 -f gene frame 0 0 255 -G GCContent ann1.embl ann2.gbk ann3.gbk ann4.embl
+
+Generate a blastn comparison between 4 annotation files, Display genes as blue
+arrows in frame. Only report blast hits under 0.00001 expect value.
+Display the GC content of each file as a graph.
+
+Easyfig.py -tblastx -o outfile.svg -svg ann1.embl 1 10000 ann2.embl 1 10000 R
+
+Show a tblastx comparison of the first 10000 base pairs of ann1.embl and ann2.embl
+Reverse compliment ann2.embl. Writes as a SVG file.
+
+
+this script uses a modified version of Paul McGuire's (http://www.geocities.com/ptmcg/ RIP (geocities, not paul))
+bmp.py - module for constructing simple BMP graphics files
+"""
+ )
diff -r 2139c39b727e -r afce956686a1 cpt-macros.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cpt-macros.xml Mon Jun 05 02:41:13 2023 +0000
@@ -0,0 +1,115 @@
+
+
+
+ python
+ biopython
+ requests
+ cpt_gffparser
+
+
+
+
+
+
+
+ 10.1371/journal.pcbi.1008214
+ @unpublished{galaxyTools,
+ author = {E. Mijalis, H. Rasche},
+ title = {CPT Galaxy Tools},
+ year = {2013-2017},
+ note = {https://github.com/tamu-cpt/galaxy-tools/}
+ }
+
+
+
+
+ 10.1371/journal.pcbi.1008214
+
+ @unpublished{galaxyTools,
+ author = {E. Mijalis, H. Rasche},
+ title = {CPT Galaxy Tools},
+ year = {2013-2017},
+ note = {https://github.com/tamu-cpt/galaxy-tools/}
+ }
+
+
+
+
+
+
+ 10.1371/journal.pcbi.1008214
+
+ @unpublished{galaxyTools,
+ author = {C. Ross},
+ title = {CPT Galaxy Tools},
+ year = {2020-},
+ note = {https://github.com/tamu-cpt/galaxy-tools/}
+ }
+
+
+
+
+
+
+ 10.1371/journal.pcbi.1008214
+
+ @unpublished{galaxyTools,
+ author = {E. Mijalis, H. Rasche},
+ title = {CPT Galaxy Tools},
+ year = {2013-2017},
+ note = {https://github.com/tamu-cpt/galaxy-tools/}
+ }
+
+
+ @unpublished{galaxyTools,
+ author = {A. Criscione},
+ title = {CPT Galaxy Tools},
+ year = {2019-2021},
+ note = {https://github.com/tamu-cpt/galaxy-tools/}
+ }
+
+
+
+
+
+
+ 10.1371/journal.pcbi.1008214
+
+ @unpublished{galaxyTools,
+ author = {A. Criscione},
+ title = {CPT Galaxy Tools},
+ year = {2019-2021},
+ note = {https://github.com/tamu-cpt/galaxy-tools/}
+ }
+
+
+
+
+
+
+ 10.1371/journal.pcbi.1008214
+
+ @unpublished{galaxyTools,
+ author = {C. Maughmer},
+ title = {CPT Galaxy Tools},
+ year = {2017-2020},
+ note = {https://github.com/tamu-cpt/galaxy-tools/}
+ }
+
+
+
+
+
+
+ @unpublished{galaxyTools,
+ author = {C. Maughmer},
+ title = {CPT Galaxy Tools},
+ year = {2017-2020},
+ note = {https://github.com/tamu-cpt/galaxy-tools/}
+ }
+
+
+
+
diff -r 2139c39b727e -r afce956686a1 cpt_easyfig/Easyfig.py
--- a/cpt_easyfig/Easyfig.py Fri Jun 17 12:35:15 2022 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,20334 +0,0 @@
-#!/usr/bin/env python
-# easyFig.py Written by: Mitchell Sullivan mjsull@gmail.com
-# Supervisor: Dr. Scott Beatson and Dr. Nico Petty University of Queensland
-# Version 2.2.3 08.11.2016
-# License: GPLv3
-
-import os
-import subprocess
-from math import ceil, hypot
-import threading
-import time
-import struct
-import base64
-import string
-from ftplib import FTP
-import tarfile
-import platform
-import shutil
-import webbrowser
-import operator
-import sys
-
-
-def colorstr(rgb):
- return "#%x%x%x" % (int(rgb[0] / 16), int(rgb[1] / 16), int(rgb[2] / 16))
-
-
-def binar(s):
- transdict = {
- "0": "0000",
- "1": "0001",
- "2": "0010",
- "3": "0011",
- "4": "0100",
- "5": "0101",
- "6": "0110",
- "7": "0111",
- "8": "1000",
- "9": "1001",
- "a": "1010",
- "b": "1011",
- "c": "1100",
- "d": "1101",
- "e": "1110",
- "f": "1111",
- }
- outstring = ""
- for i in s:
- outstring += transdict[i]
- return outstring
-
-
-class scalableVectorGraphics:
- def __init__(self, height, width):
- self.height = height
- self.width = width
- self.out = """
-")
- outfile.close()
-
- def drawRightArrow(self, x, y, wid, ht, fc, oc=(0, 0, 0), lt=1):
- if lt > ht / 2:
- lt = ht / 2
- x1 = x + wid
- y1 = y + ht / 2
- x2 = x + wid - ht / 2
- ht -= 1
- if wid > ht / 2:
- self.out += ' \n'
- % (
- x,
- y + ht / 4,
- x2,
- y + ht / 4,
- x2,
- y,
- x1,
- y1,
- x2,
- y + ht,
- x2,
- y + 3 * ht / 4,
- x,
- y + 3 * ht / 4,
- )
- )
- else:
- self.out += ' \n' % (
- x,
- y,
- x,
- y + ht,
- x + wid,
- y1,
- )
-
- def drawLeftArrow(self, x, y, wid, ht, fc, oc=(0, 0, 0), lt=1):
- if lt > ht / 2:
- lt = ht / 2
- x1 = x + wid
- y1 = y + ht / 2
- x2 = x + ht / 2
- ht -= 1
- if wid > ht / 2:
- self.out += ' \n'
- % (
- x1,
- y + ht / 4,
- x2,
- y + ht / 4,
- x2,
- y,
- x,
- y1,
- x2,
- y + ht,
- x2,
- y + 3 * ht / 4,
- x1,
- y + 3 * ht / 4,
- )
- )
- else:
- self.out += ' \n' % (
- x,
- y1,
- x1,
- y + ht,
- x1,
- y,
- )
-
- def drawBlastHit(self, x1, y1, x2, y2, x3, y3, x4, y4, fill=(0, 0, 255), lt=0):
- self.out += ' \n' % (
- x1,
- y1,
- x2,
- y2,
- x3,
- y3,
- x4,
- y4,
- )
-
- def drawGradient(self, x1, y1, wid, hei, minc, maxc):
- self.out += ' \n \n'
- self.out += ' \n' % colorstr(maxc)
- self.out += ' \n' % colorstr(minc)
- self.out += " \n \n"
- self.out += ' \n' % (
- x1,
- y1,
- wid,
- hei,
- )
-
- def drawGradient2(self, x1, y1, wid, hei, minc, maxc):
- self.out += ' \n \n'
- self.out += ' \n' % colorstr(maxc)
- self.out += ' \n' % colorstr(minc)
- self.out += " \n\n"
- self.out += ' \n' % (
- x1,
- y1,
- wid,
- hei,
- )
-
- def drawOutRect(self, x1, y1, wid, hei, fill, lt=1):
- self.out += ' \n' % (
- x1,
- y1,
- wid,
- hei,
- )
-
- def drawRightFrame(self, x, y, wid, ht, lt, frame, fill):
- if lt > ht / 2:
- lt = ht / 2
- if frame == 1:
- y1 = y + ht / 2
- y2 = y + ht * 3 / 8
- y3 = y + ht * 1 / 4
- elif frame == 2:
- y1 = y + ht * 3 / 8
- y2 = y + ht * 1 / 4
- y3 = y + ht * 1 / 8
- elif frame == 0:
- y1 = y + ht * 1 / 4
- y2 = y + ht * 1 / 8
- y3 = y + 1
- x1 = x
- x2 = x + wid - ht / 8
- x3 = x + wid
- if wid > ht / 8:
- self.out += ' \n' % (
- x1,
- y1,
- x2,
- y1,
- x3,
- y2,
- x2,
- y3,
- x1,
- y3,
- )
- else:
- self.out += ' \n' % (
- x1,
- y1,
- x3,
- y2,
- x1,
- y3,
- )
-
- def drawRightFrameRect(self, x, y, wid, ht, lt, frame, fill):
- if lt > ht / 2:
- lt = ht / 2
- if frame == 1:
- y1 = y + ht / 4
- elif frame == 2:
- y1 = y + ht / 8
- elif frame == 0:
- y1 = y + 1
- hei = ht / 4
- x1 = x
- self.out += ' \n' % (
- x1,
- y1,
- wid,
- hei,
- )
-
- def drawLeftFrame(self, x, y, wid, ht, lt, frame, fill):
- if lt > ht / 2:
- lt = ht / 2
- if frame == 1:
- y1 = y + ht
- y2 = y + ht * 7 / 8
- y3 = y + ht * 3 / 4
- elif frame == 2:
- y1 = y + ht * 7 / 8
- y2 = y + ht * 3 / 4
- y3 = y + ht * 5 / 8
- elif frame == 0:
- y1 = y + ht * 3 / 4
- y2 = y + ht * 5 / 8
- y3 = y + ht / 2
- x1 = x + wid
- x2 = x + ht / 8
- x3 = x
- if wid > ht / 8:
- self.out += ' \n' % (
- x1,
- y1,
- x2,
- y1,
- x3,
- y2,
- x2,
- y3,
- x1,
- y3,
- )
- else:
- self.out += ' \n' % (
- x1,
- y1,
- x3,
- y2,
- x1,
- y3,
- )
-
- def drawLeftFrameRect(self, x, y, wid, ht, lt, frame, fill):
- if lt > ht / 2:
- lt = ht / 2
- if frame == 1:
- y1 = y + ht * 3 / 4
- elif frame == 2:
- y1 = y + ht * 5 / 8
- elif frame == 0:
- y1 = y + ht / 2
- hei = ht / 4
- x1 = x
- self.out += ' \n' % (
- x1,
- y1,
- wid,
- hei,
- )
-
- def drawPointer(self, x, y, ht, lt, fill):
- x1 = x - int(round(0.577350269 * ht / 2))
- x2 = x + int(round(0.577350269 * ht / 2))
- y1 = y + ht / 2
- y2 = y + 1
- self.out += ' \n' % (
- x1,
- y2,
- x2,
- y2,
- x,
- y1,
- )
-
- def drawDash(self, x1, y1, x2, y2, exont):
- self.out += ' \n' % exont
-
- def writeString(
- self, thestring, x, y, size, ital=False, bold=False, rotate=0, justify="left"
- ):
- if rotate != 0:
- x, y = y, x
- self.out += " " + thestring + "\n"
-
-
-# class of blast hit data
-class BlastHit:
- def __init__(
- self,
- query,
- ref,
- ident,
- length,
- mismatch,
- gaps,
- qStart,
- qEnd,
- rStart,
- rEnd,
- eValue,
- bitscore,
- ):
- self.query = query
- self.ref = ref
- self.ident = float(ident)
- self.length = int(length)
- self.mismatch = int(mismatch)
- self.gaps = int(gaps)
- self.qStart = int(qStart)
- self.qEnd = int(qEnd)
- self.rStart = int(rStart)
- self.rEnd = int(rEnd)
- self.eValue = float(eValue)
- self.bitscore = float(bitscore)
-
-
-# class for feature data
-class feature:
- def __init__(self, start, stop, type, strand, colour, name):
- self.start = start
- self.stop = stop
- self.type = type
- self.strand = strand
- self.colour = colour
- self.name = name
-
- def length(self):
- if type(self.start) == int:
- return self.stop - self.start
- else:
- return self.stop[-1] - self.start[0]
-
-
-# method for converting base pair position into pixel position
-def convertPos(length, maxlength, width, pos, aln):
- if aln == "centre":
- return int(((((maxlength - length) * 1.0 / 2) + pos) * 1.0 / maxlength) * width)
- elif aln == "left":
- return int(((pos * 1.0 / maxlength) * width))
- elif aln == "right":
- return int(((((maxlength - length) * 1.0) + pos) * 1.0 / maxlength) * width)
- elif aln == "best blast":
- return int((((pos + shifter) * 1.0 / maxlength) * width))
-
-
-# method for converting base pair position into pixel position if the genome has been reversed
-def convertPosR(length, maxlength, width, pos, aln):
- if aln == "centre":
- return int(
- width
- - (((((maxlength - length) * 1.0 / 2) + pos) * 1.0 / maxlength) * width)
- )
- elif aln == "left":
- return int(
- width - (((((maxlength - length) * 1.0) + pos) * 1.0 / maxlength) * width)
- )
- elif aln == "right":
- return int(width - ((pos * 1.0 / maxlength) * width))
- elif aln == "best blast":
- return int(
- width
- - (
- ((((maxlength - length) * 1.0) + pos - shifter) * 1.0 / maxlength)
- * width
- )
- )
-
-
-""" Functions and classes for the bmp module.
-This section of the code uses a modified version of Paul McGuire's
-(http://www.geocities.com/ptmcg/) (RIP geocities/under constuction gifs)
-bmp.py - module for constructing simple BMP graphics files
-It is freely avaiable under the following license
-
-
-license for all code contained:
-
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-"""
-
-
-def shortToString(i):
- hi = (i & 0xFF00) >> 8
- lo = i & 0x00FF
- return chr(lo) + chr(hi)
-
-
-def longToString(i):
- hi = (int(i) & 0x7FFF0000) >> 16
- lo = int(i) & 0x0000FFFF
- return shortToString(lo) + shortToString(hi)
-
-
-# class
-class Color(object):
- """class for specifying s while drawing BitMap elements"""
-
- __slots__ = ["red", "grn", "blu"]
- __shade = 32
-
- def __init__(self, r=0, g=0, b=0):
- self.red = r
- self.grn = g
- self.blu = b
-
- def __setattr__(self, name, value):
- if hasattr(self, name):
- raise AttributeError("Color is immutable")
- else:
- object.__setattr__(self, name, value)
-
- def __str__(self):
- return "R:%d G:%d B:%d" % (self.red, self.grn, self.blu)
-
- def __hash__(self):
- return (int(self.blu)) + (int(self.grn) << 8) + (int(self.red) << 16)
-
- def __eq__(self, other):
- return (self is other) or (self.toLong == other.toLong)
-
- def lighten(self):
- return Color(
- min(self.red + Color.__shade, 255),
- min(self.grn + Color.__shade, 255),
- min(self.blu + Color.__shade, 255),
- )
-
- def darken(self):
- return Color(
- max(self.red - Color.__shade, 0),
- max(self.grn - Color.__shade, 0),
- max(self.blu - Color.__shade, 0),
- )
-
- def toLong(self):
- return self.__hash__()
-
- def fromLong(l):
- b = l & 0xFF
- l = l >> 8
- g = l & 0xFF
- l = l >> 8
- r = l & 0xFF
- return Color(r, g, b)
-
- fromLong = staticmethod(fromLong)
-
-
-# define class constants for common s
-Color.BLACK = Color(0, 0, 0)
-Color.RED = Color(255, 0, 0)
-Color.GREEN = Color(0, 255, 0)
-Color.BLUE = Color(0, 0, 255)
-Color.CYAN = Color(0, 255, 255)
-Color.MAGENTA = Color(255, 0, 255)
-Color.YELLOW = Color(255, 255, 0)
-Color.WHITE = Color(255, 255, 255)
-Color.DKRED = Color(128, 0, 0)
-Color.DKGREEN = Color(0, 128, 0)
-Color.DKBLUE = Color(0, 0, 128)
-Color.TEAL = Color(0, 128, 128)
-Color.PURPLE = Color(128, 0, 128)
-Color.BROWN = Color(128, 128, 0)
-Color.GRAY = Color(128, 128, 128)
-
-
-class BitMap(object):
- """class for drawing and saving simple Windows bitmap files"""
-
- LINE_SOLID = 0
- LINE_DASHED = 1
- LINE_DOTTED = 2
- LINE_DOT_DASH = 3
- _DASH_LEN = 12.0
- _DOT_LEN = 6.0
- _DOT_DASH_LEN = _DOT_LEN + _DASH_LEN
-
- def __init__(self, width, height, bkgd=Color.WHITE, frgd=Color.BLACK):
- self.wd = int(ceil(width))
- self.ht = int(ceil(height))
- self.bg = 0
- self.fg = 1
- self.palette = []
- self.palette.append(bkgd.toLong())
- self.palette.append(frgd.toLong())
- self.setDefaultPenColor()
-
- tmparray = [self.bg] * self.wd
- self.bitarray = [tmparray[:] for i in range(self.ht)]
- self.currentPen = 1
- self.fontName = "%s-%d-%s" % ("none", 0, "none")
- self.defsize = 64
- self.amatrixwid = 41
- self.amatrixhei = 48
- self.amatrixori = 16
- self.amatrix = "3ff8000001ffffc00003fffff80003fffffe0003ffffff8003ffffffe003\
-fffffff801ff801ffc01ff0001fe00ff00007f80ff00003fc07f80000fe0\
-3fc00007f01fc00003f80fe00001fc00000000fe000000007f000000007f\
-800000003fc0000000ffe000000ffff00003fffff8001ffffffc003fffff\
-fe007fffff7f00fffff83f807fff001fc07ff8000fe07fe00007f03fc000\
-03f81fe00001fc1fe00000fe0fe000007f07f000003f83f800001fc1fc00\
-001fe0fe00000ff07f00000ff83fc0000ffc0ff0001ffe07fc001fff01ff\
-807fffc0ffffffcffe3fffffc7ff0fffffc3ff83ffff80ffc07fff007fe0\
-07f8000fe"
- self.bmatrixwid = 40
- self.bmatrixhei = 64
- self.bmatrixori = 0
- self.bmatrix = "7f000000007f000000007f000000007f000000007f000000007f00000000\
-7f000000007f000000007f000000007f000000007f000000007f00000000\
-7f000000007f000000007f000000007f000000007f007fc0007f03fff800\
-7f07fffe007f1fffff007f3fffff807f7fffffc07f7fffffe07fff00fff0\
-7ffc003ff07ff8000ff87ff00007f87fe00003fc7fe00003fc7fc00001fe\
-7fc00001fe7f800000fe7f800000fe7f800000fe7f000000ff7f0000007f\
-7f0000007f7f0000007fff0000007fff0000007fff0000007fff0000007f\
-ff0000007fff0000007fff0000007fff800000feff800000feff800000fe\
-ff800000feffc00001feffc00001fcffe00003fcffe00007f8fff00007f8\
-fff8000ff8fffe003ff0ffff80ffe0feffffffe0fe7fffffc0fe3fffff80\
-fe1ffffe00fe0ffffc000003fff00000003f0000"
- self.cmatrixwid = 37
- self.cmatrixhei = 48
- self.cmatrixori = 16
- self.cmatrix = "1ff0000007fff00000ffffe0001fffff8001ffffff001ffffff801ffffff\
-e00ffc01ff80ff8007fc0ff8001ff07f80007f87f80001fe3fc0000ff1fc\
-00003f9fe00001fcfe00000fe7f00000003f80000001f80000001fc00000\
-00fe00000007f00000003f80000001fc0000000fe00000007f00000003f8\
-0000001fc0000000fe00000007f00000001fc0000000fe000007f7f00000\
-3fbfc00003f8fe00001fc7f80000fe3fc0000ff0ff0000ff07fc000ff81f\
-f000ff807fe01ffc03ffffffc00ffffffc003fffffc000fffffc0001ffff\
-c00003fff8000001fc000"
- self.dmatrixwid = 40
- self.dmatrixhei = 64
- self.dmatrixori = 0
- self.dmatrix = "7f000000007f000000007f000000007f000000007f000000007f00000000\
-7f000000007f000000007f000000007f000000007f000000007f00000000\
-7f000000007f000000007f000000007f0003ff007f001fffc07f003ffff0\
-7f00fffffc7f01fffffe7f03ffffff7f07ffffffff0fff00ffff0ffc003f\
-ff1ff0000fff1fe00007ff3fe00003ff3fc00003ff7f800001ff7f800001\
-ff7f000000ff7f000000ff7f000000ffff000000fffe0000007ffe000000\
-7ffe0000007ffe0000007ffe0000007ffe0000007ffe0000007ffe000000\
-7ffe0000007ffe0000007f7f000000ff7f000000ff7f000000ff7f000000\
-ff7f800001ff3f800001ff3fc00003ff3fe00003ff1ff00007ff1ff8000f\
-ff0ffc003fff07ff00ffff07ffffff7f03fffffe7f01fffffc7f00fffff8\
-7f003ffff07f000fffc0000000fc0000"
- self.ematrixwid = 39
- self.ematrixhei = 48
- self.ematrixori = 16
- self.ematrix = "1ff0000001fffe00000fffff00003fffff0001ffffff0007ffffff001fff\
-ffff003ff007ff00ff8003ff03fe0003fe07f80001fe0fe00003fc3f8000\
-03fc7f000003f9fc000007f3f800000fe7f000000fcfc000001fff800000\
-3fff0000007fffffffffffffffffffffffffffffffffffffffffffffffff\
-ffffffffffff800000007f00000000fe00000001fc00000001f800000003\
-f800000007f000001fcfe000003f8fe00000ff1fc00001fc3fc00007f83f\
-c0001fe07fc0003fc07fe001ff007ff00ffe00fffffff800ffffffe000ff\
-ffff80007ffffe00007ffff000003fff80000007f8000"
- self.fmatrixwid = 20
- self.fmatrixhei = 62
- self.fmatrixori = 0
- self.fmatrix = "7f003ff007ff00fff01fff01fff01fe003fc003f8003f8003f8003f8003f\
-8003f8003f8003f8003f80ffffffffffffffffffffffffffffff03f8003f\
-8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f\
-8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f\
-8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f\
-8003f80"
- self.gmatrixwid = 39
- self.gmatrixhei = 65
- self.gmatrixori = 16
- self.gmatrix = "1ff0000000fff80fe007fffc1fc03ffffc3f80fffffc7f03fffffcfe0fff\
-fffdfc1ff807fff87fc003fff1ff0003ffe3fc0003ffcff00003ff9fe000\
-03ff3f800007feff000007fdfc00000ffbf800001ff7f000003fefc00000\
-3fff8000007fff000000fffe000001fffc000003fff8000007fff000000f\
-ffe000001fffc000003fff8000007fff000000fffe000001fefe000007fd\
-fc00000ffbf800001ff7f800007fe7f00000ffcff00001ff9fe00007ff1f\
-e0001ffe3fe0007ffc3fe001fff83ff00feff07fffffdfe07fffff3fc07f\
-fffc7f807ffff0ff003fff81fe001ffe03f80007c007f00000000fe00000\
-003fc00000007f9fc00000ff3f800001fc7f800007f87f00000ff0ff0000\
-3fc1ff0000ff81ff0007fe01ff803ff803fffffff003ffffffc003fffffe\
-0001fffff80000ffff8000001ff8000"
- self.hmatrixwid = 35
- self.hmatrixhei = 62
- self.hmatrixori = 0
- self.hmatrix = "3f80000007f0000000fe0000001fc0000003f80000007f0000000fe00000\
-01fc0000003f80000007f0000000fe0000001fc0000003f80000007f0000\
-000fe0000001fc0000003f803fe007f03fffc0fe0ffffc1fc7ffffe3f9ff\
-fffe7f7fffffcfffe01ffdfff000ffbffc000ff7ff0000ffffc0001ffff0\
-0001fffe00003fff800007fff00000fffe00001fff800003fff000007ffe\
-00000fffc00001fff800003fff000007ffe00000fffc00001fff800003ff\
-f000007ffe00000fffc00001fff800003fff000007ffe00000fffc00001f\
-ff800003fff000007ffe00000fffc00001fff800003fff000007ffe00000\
-fffc00001fff800003fff000007ffe00000fffc00001fff800003fff0000\
-07f"
- self.imatrixwid = 7
- self.imatrixhei = 63
- self.imatrixori = 0
- self.imatrix = "1fffffffffffffffc0000000000000007fffffffffffffffffffffffffff\
-fffffffffffffffffffffffffffffffffffffffffffffffffff"
- self.jmatrixwid = 14
- self.jmatrixhei = 80
- self.jmatrixori = 0
- self.jmatrix = "1fc07f01fc07f01fc07f01fc07f01fc00000000000000000000000000000\
-7f01fc07f01fc07f01fc07f01fc07f01fc07f01fc07f01fc07f01fc07f01\
-fc07f01fc07f01fc07f01fc07f01fc07f01fc07f01fc07f01fc07f01fc07\
-f01fc07f01fc07f01fc07f01fc07f01fc07f01fc07f01fc07f01fc07f01f\
-c07f01fc0ff03fc1fffffbffefff3ff8ffc3f00"
- self.kmatrixwid = 38
- self.kmatrixhei = 62
- self.kmatrixori = 0
- self.kmatrix = "fe00000003f80000000fe00000003f80000000fe00000003f80000000fe0\
-0000003f80000000fe00000003f80000000fe00000003f80000000fe0000\
-0003f80000000fe00000003f80000000fe00000003f80001ff8fe0000ff8\
-3f80007fc0fe0003fe03f8001ff00fe000ff803f8007fc00fe003fe003f8\
-01ff000fe00ff8003f807fc000fe03fe0003f81ff0000fe0ff80003f87fc\
-0000fe3fe00003f9ffc0000fe7ff80003fbffe0000fffffc0003fffff000\
-0fffbfe0003ffc7fc000ffe0ff0003ff03fe000ff807fc003fc01ff000fe\
-003fe003f8007f800fe001ff003f8003fe00fe0007f803f8001ff00fe000\
-3fe03f8000ff80fe0001ff03f80003fc0fe0000ff83f80001ff0fe00003f\
-c3f80000ff8fe00001fe3f800007fcfe00000ffbf800001ff"
- self.lmatrixwid = 7
- self.lmatrixhei = 62
- self.lmatrixori = 0
- self.lmatrix = "3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
-fffffffffffffffffffffffffffffffffffffffffffffffff"
- self.mmatrixwid = 59
- self.mmatrixhei = 46
- self.mmatrixori = 16
- self.mmatrix = "3fe0001ff007f03fff001fffc0fe0ffff807fffe1fc7ffff83ffffe3f9ff\
-fff8fffffe7f7fffffbfffffcfffc07ffff01ffdffe003fff800ffbff800\
-3ffe000ffffe0003ff8000ffff80007fe0001ffff00007fc0001fffc0000\
-ff00003fff80001fe00007ffe00003f80000fffc00007f00001fff80000f\
-e00003fff00001fc00007ffe00003f80000fffc00007f00001fff80000fe\
-00003fff00001fc00007ffe00003f80000fffc00007f00001fff80000fe0\
-0003fff00001fc00007ffe00003f80000fffc00007f00001fff80000fe00\
-003fff00001fc00007ffe00003f80000fffc00007f00001fff80000fe000\
-03fff00001fc00007ffe00003f80000fffc00007f00001fff80000fe0000\
-3fff00001fc00007ffe00003f80000fffc00007f00001fff80000fe00003\
-fff00001fc00007ffe00003f80000fffc00007f00001fff80000fe00003f\
-ff00001fc00007f"
- self.nmatrixwid = 35
- self.nmatrixhei = 46
- self.nmatrixori = 16
- self.nmatrix = "1fe007f01fff80fe0ffffc1fc3ffffc3f8fffffc7f3fffffcfefe01ffdff\
-f001ffbffc000ff7ff0001ffffc0001ffff00001fffe00003fff800007ff\
-f00000fffe00001fff800003fff000007ffe00000fffc00001fff800003f\
-ff000007ffe00000fffc00001fff800003fff000007ffe00000fffc00001\
-fff800003fff000007ffe00000fffc00001fff800003fff000007ffe0000\
-0fffc00001fff800003fff000007ffe00000fffc00001fff800003fff000\
-007ffe00000fffc00001fff800003fff000007f"
- self.omatrixwid = 40
- self.omatrixhei = 48
- self.omatrixori = 16
- self.omatrix = "1ff8000000ffff000003ffffc0000ffffff0001ffffff8003ffffffc007f\
-fffffe00fff00fff00ffc003ff01ff0000ff81fe00007f83fc00003fc3fc\
-00003fc3f800001fc7f800001fe7f000000fe7f000000fe7f000000fefe0\
-00000fffe0000007ffe0000007ffe0000007ffe0000007ffe0000007ffe0\
-000007ffe0000007ffe0000007ffe0000007ffe0000007fff000000ff7f0\
-00000fe7f000000fe7f000000fe7f800001fe3f800001fc3fc00003fc3fc\
-00003fc1fe00007f81ff0000ff80ffc003ff007ff00ffe007ffffffe003f\
-fffffc001ffffff8000fffffe00003ffffc00000ffff0000000ff0000"
- self.pmatrixwid = 40
- self.pmatrixhei = 64
- self.pmatrixori = 16
- self.pmatrix = "7fc000fe03fff800fe0ffffe00fe1fffff00fe3fffff80fe7fffffc0feff\
-ffffe0ffff00fff0fffc003ff0fff8000ff8fff00007f8ffe00003fcffe0\
-0003fcffc00001fcffc00001feff800000feff800000feff800000feff00\
-0000ffff0000007fff0000007fff0000007fff0000007fff0000007fff00\
-00007f7f0000007f7f0000007f7f0000007f7f0000007f7f800000ff7f80\
-0000fe7f800000fe7f800000fe7fc00001fe7fc00001fc7fe00003fc7fe0\
-0007fc7ff0000ff87ff8001ff87ffc003ff07fff80fff07fffffffe07f7f\
-ffffc07f3fffff807f1fffff007f07fffc007f01fff0007f003f80007f00\
-0000007f000000007f000000007f000000007f000000007f000000007f00\
-0000007f000000007f000000007f000000007f000000007f000000007f00\
-0000007f000000007f000000007f00000000"
- self.qmatrixwid = 40
- self.qmatrixhei = 64
- self.qmatrixori = 16
- self.qmatrix = "1fe0000000fffc07f003ffff07f00fffff87f01fffffe7f03ffffff7f07f\
-fffff7f07ff007fff0ffc003fff1ff0000fff1fe00007ff3fe00003ff3fc\
-00003ff3f800001ff7f800001ff7f000000ff7f000000ff7f000000ff7f0\
-00000fffe0000007ffe0000007ffe0000007ffe0000007ffe0000007ffe0\
-000007ffe0000007ffe0000007ffe0000007ffe0000007fff000000ff7f0\
-00000ff7f000000ff7f000000ff7f800001ff7f800001ff3fc00003ff3fe\
-00003ff1ff00007ff1ff8000fff0ffc003fff0fff00ffff07ffffff7f03f\
-fffff7f01fffffe7f00fffff87f003ffff07f000fffc07f0001fc007f000\
-000007f000000007f000000007f000000007f000000007f000000007f000\
-000007f000000007f000000007f000000007f000000007f000000007f000\
-000007f000000007f000000007f000000007f"
- self.rmatrixwid = 22
- self.rmatrixhei = 46
- self.rmatrixori = 16
- self.rmatrix = "3bf80fffe07fff87fffe3ffff9ffffe7ffffbfe0fffc03ffc00ffe003ff0\
-00ff8003fe000ff0003fc000ff0003f8000fe0003f8000fe0003f8000fe0\
-003f8000fe0003f8000fe0003f8000fe0003f8000fe0003f8000fe0003f8\
-000fe0003f8000fe0003f8000fe0003f8000fe0003f8000fe0003f8000fe\
-0003f8000"
- self.smatrixwid = 36
- self.smatrixhei = 48
- self.smatrixori = 16
- self.smatrix = "7fe000003fffc0001fffff0003fffffc007fffffe00fffffff01fffffff0\
-1ff803ff83fe0007f83f80007f87f80003fc7f00001fc7f00001fc7f0000\
-1fc7f00000007f00000007f80000003fc0000003ff8000003fff000001ff\
-ff00000fffff00007fffff0001fffffc0007fffff0001fffff80001ffffc\
-00001fffc000001ffe0000003fe0000001ff0000000ff00000007ffe0000\
-07ffe000007fff000007f7f000007f7f80000fe7f80001fe7fe0007fe3ff\
-801ffc3fffffff81fffffff80fffffff007fffffc001fffff80007fffc00\
-0007fc000"
- self.tmatrixwid = 20
- self.tmatrixhei = 59
- self.tmatrixori = 5
- self.tmatrix = "3f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f80f\
-fffffffffffffffffffffffffffff03f8003f8003f8003f8003f8003f800\
-3f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f800\
-3f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f8003f800\
-3f8003f8003f8003f8003fc003fff03fff01fff00fff007ff001fe"
- self.umatrixwid = 35
- self.umatrixhei = 47
- self.umatrixori = 17
- self.umatrix = "1fc00001fff800003fff000007ffe00000fffc00001fff800003fff00000\
-7ffe00000fffc00001fff800003fff000007ffe00000fffc00001fff8000\
-03fff000007ffe00000fffc00001fff800003fff000007ffe00000fffc00\
-001fff800003fff000007ffe00000fffc00001fff800003fff000007ffe0\
-0000fffc00001fff800003fff000007ffe00001fffc00003fff800007fff\
-00001fffe00003fffe0000ffffe0003ffbfc000fff7fe003ffeffe03fdfc\
-ffffff3f8fffffc7f0fffff0fe0ffffc1fc07ffe000001fe0000"
- self.vmatrixwid = 40
- self.vmatrixhei = 45
- self.vmatrixori = 17
- self.vmatrix = "ff000000ffff000000ff7f800001fe7f800001fe7f800001fe3fc00003fc\
-3fc00003fc3fc00003f81fe00007f81fe00007f81fe00007f00ff0000ff0\
-0ff0000ff007f0000fe007f8001fe007f8001fc003f8001fc003fc003fc0\
-03fc003f8001fc003f8001fe007f8001fe007f0000fe007f0000ff00fe00\
-00ff00fe00007f00fe00007f01fc00007f81fc00003f83f800003f83f800\
-003fc3f800001fc7f000001fc7f000000fe7f000000fefe000000fefe000\
-0007ffc0000007ffc0000007ffc0000003ff80000003ff80000003ff8000\
-0001ff00000001ff00000001fe0000"
- self.wmatrixwid = 60
- self.wmatrixhei = 45
- self.wmatrixori = 17
- self.wmatrix = "ff00003fc0000ff7f00007fe0000ff7f80007fe0001fe7f80007fe0001fe\
-7f80007fe0001fe3f8000fff0001fc3fc000fff0003fc3fc000fff0003fc\
-1fc000fff0003f81fc001fff8003f81fe001fff8007f81fe001fbf8007f8\
-0fe001fbf8007f00fe003f9fc007f00ff003f9fc00ff007f003f1fc00fe0\
-07f003f1fc00fe007f007f0fe00fe007f807f0fe01fe003f807e0fe01fc0\
-03f807e07f01fc003fc0fe07f01fc001fc0fe07f03f8001fc0fc07f03f80\
-01fc0fc03f83f8001fe1fc03f83f8000fe1fc03f87f0000fe1f803f87f00\
-00fe1f801fc7f00007f3f801fc7e00007f3f801fcfe00007f3f001fcfe00\
-007f3f000fefe00003fff000fefc00003fff000fffc00003ffe000fffc00\
-001ffe0007ff800001ffe0007ff800001ffe0007ff800001ffc0007ff800\
-000ffc0003ff000000ffc0003ff000000ffc0003ff0000007f80003fe000\
-0007f80001fe000"
- self.xmatrixwid = 39
- self.xmatrixhei = 45
- self.xmatrixori = 17
- self.xmatrix = "3fe00000ff3fc00003fc3fc0000ff03fc0001fc07f80007f807f8001fe00\
-7f8003f800ff000ff000ff003fc000ff007f0001fe01fe0001fe07f80001\
-fe0fe00003fc3fc00003fcff000003fdfc000007fff0000007ffe0000007\
-ff8000000ffe0000000ffc0000000ff00000001fe00000007fe0000000ff\
-e0000003ffc000000fffc000003fffc000007f7f800001fe7f800007f87f\
-80000fe0ff00003fc0ff0000ff00ff0001fc01fe0007f801fe001fe001fe\
-003f8003fc00ff0003fc03fc0007fc0ff00007f81fe00007f87f80000ff9\
-fe00000ff7fc00000ff"
- self.ymatrixwid = 39
- self.ymatrixhei = 64
- self.ymatrixori = 17
- self.ymatrix = "fe000001fffe000007f9fc00000ff3f800001fc7f800007f8ff00000ff0f\
-e00001fc1fe00007f83fc0000ff03f80001fc07f80007f80ff0000ff00fe\
-0001fc01fe0007f803fc000fe003f8001fc007f8007f800ff000fe000fe0\
-01fc001fe007f8003fc00fe0003f803fc0007f807f8000ff00fe0000fe03\
-fc0001fc07f00003fc0fe00003f83fc00007f07f00000ff0fe00000fe3fc\
-00001fc7f000003fcfe000003fbfc000007f7f000000fffe000000fff800\
-0001fff0000003ffe0000003ff80000007ff0000000ffe0000000ff80000\
-001ff00000003fe00000003f80000000ff00000001fe00000003f8000000\
-0ff00000001fc00000007f80000000ff00000001fc00000007f80000001f\
-f00000007fc000003fff8000007ffe000000fff8000001ffe0000003ff80\
-000007fe00000003e0000000"
- self.zmatrixwid = 36
- self.zmatrixhei = 45
- self.zmatrixori = 17
- self.zmatrix = "7fffffffe7fffffffe7fffffffe7fffffffe7fffffffe7fffffffe000000\
-3fc0000007f8000000ff8000001ff0000001fe0000003fc0000007f80000\
-00ff8000001ff0000003fe0000003fc0000007f8000000ff8000001ff000\
-0003fe0000003fc0000007f8000000ff8000001ff0000003fe0000003fc0\
-000007f8000000ff8000001ff0000003fe0000003fc0000007fc000000ff\
-8000001ff0000003fe0000003fc0000007fc000000ff8000000fffffffff\
-fffffffffffffffffffffffffffffffffffffffffffff"
- self.Amatrixwid = 55
- self.Amatrixhei = 62
- self.Amatrixori = 0
- self.Amatrix = "ffe00000000001ffc00000000003ffc0000000000fff80000000001fff00\
-000000003fff0000000000fffe0000000001fffc0000000003fffc000000\
-000ff7f8000000001feff0000000007fcff000000000ff1fe000000001fe\
-3fc000000007f83fc00000000ff07f800000001fe0ff800000007f80ff00\
-000000ff01fe00000001fe03fe00000007f803fc0000000ff007f8000000\
-1fe00ff80000007f800ff0000000ff001fe0000003fe003fe0000007f800\
-3fc000000ff0007f8000003fc000ff8000007f8000ff000000ff0001fe00\
-0003fc0003fe000007f80003fc00000ff00007fc00003fc0000ff800007f\
-80000ff00000ff00001ff00003ffffffffe00007ffffffffc0001fffffff\
-ffc0003fffffffff80007fffffffff0001ffffffffff0003fffffffffe00\
-07f8000003fc001ff0000007fc003fc000000ff8007f8000000ff001ff00\
-00001ff003fc0000003fe007f80000003fc01ff00000007fc03fc0000000\
-ff80ff80000000ff81ff00000001ff03fc00000003fe0ff800000003fe1f\
-e000000007fc3fc00000000ff8ff800000000ff9fe000000001ff7fc0000\
-00001ff"
- self.Bmatrixwid = 46
- self.Bmatrixhei = 62
- self.Bmatrixori = 0
- self.Bmatrix = "fffffffc0003ffffffff000fffffffff003ffffffffe00fffffffffc03ff\
-fffffff80ffffffffff03fc00001ffe0ff000001ff83fc000003ff0ff000\
-0007fc3fc000000ff0ff0000003fe3fc0000007f8ff0000001fe3fc00000\
-07f8ff0000001fe3fc0000007f8ff0000001fe3fc0000007f0ff0000001f\
-c3fc000000ff0ff0000003f83fc000001fe0ff000000ff83fc000007fc0f\
-f00000ffe03fffffffff00fffffffff003ffffffff800fffffffff803fff\
-ffffff80ffffffffff03ffffffffff0ff000001ffc3fc000001ff8ff0000\
-001ff3fc0000003feff0000000ffbfc0000001feff00000007fbfc000000\
-0ffff00000003fffc0000000ffff00000003fffc0000000ffff00000003f\
-bfc0000000feff00000007fbfc0000001feff00000007fbfc0000003fcff\
-0000001ff3fc000000ff8ff000000ffe3ffffffffff0ffffffffff83ffff\
-fffffc0fffffffffe03fffffffff00fffffffff003fffffffc000"
- self.Cmatrixwid = 53
- self.Cmatrixhei = 65
- self.Cmatrixori = -1
- self.Cmatrix = "3ff8000000001ffffc00000007fffffc000000fffffff000001fffffffe0\
-0001ffffffff80001ffffffffe0001fff000fff8001ffc0001ffc001ffc0\
-0003ff001ff800000ffc00ff8000003fe00ff8000000ff807f80000003fc\
-07fc0000001fe03fc00000007f83fc00000003fc1fe00000001fe1fe0000\
-00007f8ff000000003fc7f800000000007f800000000003fc00000000001\
-fe00000000000ff000000000007f800000000003f800000000003fc00000\
-000001fe00000000000ff000000000007f800000000003fc00000000001f\
-e00000000000ff000000000007f800000000003fc00000000001fe000000\
-00000ff000000000007f800000000001fe00000000000ff000000000ff7f\
-8000000007fbfc000000003fdfe000000003fc7f800000001fe3fc000000\
-00ff1ff000000007f87f800000007fc3fe00000003fc0ff00000003fe07f\
-c0000001ff01ff0000001ff00ffc000000ff803ff000000ff801ffc00000\
-ffc007ff00000ffc001ffe0001ffc0007ffe007ffc0001ffffffffe00007\
-fffffffc00001fffffffc000003ffffffc0000007fffff800000007fffe0\
-000000003ff00000"
- self.Dmatrixwid = 49
- self.Dmatrixhei = 62
- self.Dmatrixori = 0
- self.Dmatrix = "3ffffffe00001ffffffff0000ffffffffe0007ffffffffc003fffffffff0\
-01fffffffffe00ffffffffff807f800007ffe03fc000007ff01fe000000f\
-fc0ff0000003ff07f8000000ff83fc0000003fe1fe0000000ff0ff000000\
-07fc7f80000001fe3fc0000000ff9fe00000003fcff00000001fe7f80000\
-0007fbfc00000003fdfe00000001feff00000000ff7f800000007fbfc000\
-00001fffe00000000ffff000000007fff800000003fffc00000001fffe00\
-000000ffff000000007fff800000003fffc00000001fffe00000000ffff0\
-00000007fff800000003fffc00000001fffe00000000ffff00000000ff7f\
-800000007fbfc00000003fdfe00000001feff00000000ff7f80000000ff3\
-fc00000007f9fe00000007fcff00000003fc7f80000003fe3fc0000001fe\
-1fe0000001ff0ff0000001ff07f8000001ff83fc000001ff81fe000003ff\
-80ff00000fffc07fffffffffc03fffffffff801fffffffff800fffffffff\
-8007ffffffff0003fffffffe0001fffffff00000"
- self.Ematrixwid = 44
- self.Ematrixhei = 62
- self.Ematrixori = 0
- self.Ematrix = "ffffffffffeffffffffffeffffffffffeffffffffffeffffffffffefffff\
-fffffeffffffffffeff000000000ff000000000ff000000000ff00000000\
-0ff000000000ff000000000ff000000000ff000000000ff000000000ff00\
-0000000ff000000000ff000000000ff000000000ff000000000ff0000000\
-00ff000000000ff000000000ff000000000ff000000000ff000000000fff\
-fffffffcffffffffffcffffffffffcffffffffffcffffffffffcffffffff\
-ffcffffffffffcff000000000ff000000000ff000000000ff000000000ff\
-000000000ff000000000ff000000000ff000000000ff000000000ff00000\
-0000ff000000000ff000000000ff000000000ff000000000ff000000000f\
-f000000000ff000000000ff000000000ff000000000ff000000000ff0000\
-00000fffffffffffffffffffffffffffffffffffffffffffffffffffffff\
-ffffffffffffffffffffff"
- self.Fmatrixwid = 42
- self.Fmatrixhei = 62
- self.Fmatrixori = 0
- self.Fmatrix = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
-fffffffffffffffc00000000ff000000003fc00000000ff000000003fc00\
-000000ff000000003fc00000000ff000000003fc00000000ff000000003f\
-c00000000ff000000003fc00000000ff000000003fc00000000ff0000000\
-03fc00000000ff000000003fc00000000ff000000003fffffffff0ffffff\
-fffc3fffffffff0fffffffffc3fffffffff0fffffffffc3fffffffff0ff0\
-00000003fc00000000ff000000003fc00000000ff000000003fc00000000\
-ff000000003fc00000000ff000000003fc00000000ff000000003fc00000\
-000ff000000003fc00000000ff000000003fc00000000ff000000003fc00\
-000000ff000000003fc00000000ff000000003fc00000000ff000000003f\
-c00000000ff000000003fc00000000ff000000003fc00000000"
- self.Gmatrixwid = 56
- self.Gmatrixhei = 65
- self.Gmatrixori = -1
- self.Gmatrix = "ffe0000000001fffff000000007fffffc0000001fffffff0000007ffffff\
-fc00000ffffffffe00003fffffffff00007fff000fff8000fff80003ffc0\
-00ffe00000ffe001ff8000003ff003ff0000001ff007fe0000000ff807fc\
-0000000ff80ff800000007fc0ff800000003fc1ff000000003fc1fe00000\
-0003fc1fe000000001fe3fc000000001fe3fc000000000003fc000000000\
-007f8000000000007f8000000000007f8000000000007f8000000000007f\
-000000000000ff000000000000ff000000000000ff000000000000ff0000\
-03ffffffff000003ffffffff000003ffffffff000003ffffffff000003ff\
-ffffff000003ffffffff000003ffffffff00000000007f7f80000000007f\
-7f80000000007f7f80000000007f7f80000000007f7fc0000000007f3fc0\
-000000007f3fc000000000ff3fe000000000ff1fe000000000ff1ff00000\
-0001ff1ff000000001ff0ff800000003ff0ffc00000007ff07fc00000007\
-ff03fe0000000fff03ff0000001fff01ffc000007fff00ffe00000ffff00\
-7ffc0003ff7f003fff001ffe3f001ffffffffc3f000ffffffff83f0007ff\
-ffffe03f0001ffffff801f00007fffff001f00000ffff80000000000ff00\
-0000"
- self.Hmatrixwid = 48
- self.Hmatrixhei = 62
- self.Hmatrixori = 0
- self.Hmatrix = "ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
-ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
-ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
-ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
-ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
-ff00000000ffff00000000ffffffffffffffffffffffffffffffffffffff\
-ffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff\
-ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
-ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
-ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
-ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
-ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
-ff00000000ffff00000000ff"
- self.Imatrixwid = 8
- self.Imatrixhei = 62
- self.Imatrixori = 0
- self.Imatrix = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
-ffff"
- self.Jmatrixwid = 35
- self.Jmatrixhei = 64
- self.Jmatrixori = 0
- self.Jmatrix = "1fe0000003fc0000007f8000000ff0000001fe0000003fc0000007f80000\
-00ff0000001fe0000003fc0000007f8000000ff0000001fe0000003fc000\
-0007f8000000ff0000001fe0000003fc0000007f8000000ff0000001fe00\
-00003fc0000007f8000000ff0000001fe0000003fc0000007f8000000ff0\
-000001fe0000003fc0000007f8000000ff0000001fe0000003fc0000007f\
-8000000ff0000001fe0000003fc0000007f8000000ff0000001fe0000003\
-fffc00007fff80000ffff00001fffe00003fffc00007fff80000ffff0000\
-1fffe00003fffc0000ffffc0001fe7f80003fcff8000ff9ff8003fe1ff80\
-0ffc3ffc07ff03ffffffe03ffffff803fffffe003fffff0001ffffc0000f\
-ffe000003fc000"
- self.Kmatrixwid = 49
- self.Kmatrixhei = 62
- self.Kmatrixori = 0
- self.Kmatrix = "3fc0000000ffffe0000000ffeff0000000ffe7f8000000ffe3fc000000ff\
-e1fe000000ffe0ff000000ffe07f800000ffe03fc00000ffe01fe00000ff\
-e00ff000007fe007f800007fe003fc00007fe001fe00007fe000ff00007f\
-e0007f80007fe0003fc0007fe0001fe0007fe0000ff0007fe00007f8007f\
-e00003fc007fe00001fe007fe00000ff007fe000007f807fe000003fc07f\
-e000001fe07fe000000ff07ff8000007f87ffc000003fc7fff000001fe7f\
-ffc00000ff7fffe000007fffcff800003fffc3fe00001fffc1ff00000fff\
-c07fc00007ffc01ff00003ffc00ffc0001ffc003fe0000ffc000ff80007f\
-c0007fe0003fc0001ff0001fe00007fc000ff00001ff0007f80000ff8003\
-fc00003fe001fe00000ff800ff000007fe007f800001ff003fc000007fc0\
-1fe000003ff00ff000000ff807f8000003fe03fc000001ff81fe0000007f\
-c0ff0000001ff07f8000000ffc3fc0000003fe1fe0000000ff8ff0000000\
-3fe7f80000001ffbfc00000007fdfe00000001ff"
- self.Lmatrixwid = 39
- self.Lmatrixhei = 62
- self.Lmatrixori = 0
- self.Lmatrix = "3fc00000007f80000000ff00000001fe00000003fc00000007f80000000f\
-f00000001fe00000003fc00000007f80000000ff00000001fe00000003fc\
-00000007f80000000ff00000001fe00000003fc00000007f80000000ff00\
-000001fe00000003fc00000007f80000000ff00000001fe00000003fc000\
-00007f80000000ff00000001fe00000003fc00000007f80000000ff00000\
-001fe00000003fc00000007f80000000ff00000001fe00000003fc000000\
-07f80000000ff00000001fe00000003fc00000007f80000000ff00000001\
-fe00000003fc00000007f80000000ff00000001fe00000003fc00000007f\
-80000000ff00000001fe00000003fc00000007f80000000ff00000001fff\
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
-fffff"
- self.Mmatrixwid = 57
- self.Mmatrixhei = 62
- self.Mmatrixori = 0
- self.Mmatrix = "3ff800000000fffffc000000007ffffe000000003fffff800000003fffff\
-c00000001fffffe00000000ffffff80000000ffffffc00000007fffffe00\
-000003ffffff80000003ffffffc0000001ffffffe0000000fffffbf80000\
-00fefffdfc0000007f7ffefe0000003fbfff3f8000003f9fff9fc000001f\
-cfffcfe000000fe7ffe3f800000fe3fff1fc000007f1fff8fe000003f8ff\
-fc3f800003f87ffe1fc00001fc3fff0fe00000fe1fff83f80000fe0fffc1\
-fc00007f07ffe0fe00003f83fff03f80003f81fff81fc0001fc0fffc0fe0\
-000fe07ffe03f8000fe03fff01fc0007f01fff807e0003f80fffc03f8003\
-f807ffe01fc001fc03fff007e000fe01fff803f800fe00fffc01fc007f00\
-7ffe007e003f803fff003f803f801fff801fc01fc00fffc007e00fe007ff\
-e003f80fe003fff001fc07f001fff8007e03f800fffc003f83f8007ffe00\
-1fc1fc003fff0007e0fe001fff8003f8fe000fffc001fc7f0007ffe0007e\
-3f8003fff0003fbf8001fff8001fdfc000fffc0007ffe0007ffe0003ffe0\
-003fff0001fff0001fff80007ff8000fffc0003ff80007ffe0001ffc0003\
-fff00007fe0001fff80003fe0000fffc0001ff00007f"
- self.Nmatrixwid = 48
- self.Nmatrixhei = 62
- self.Nmatrixori = 0
- self.Nmatrix = "ff000000007fff800000007fffc00000007fffc00000007fffe00000007f\
-fff00000007ffff00000007ffff80000007ffffc0000007ffffc0000007f\
-fffe0000007fffff0000007fffff0000007ffeff8000007ffe7f8000007f\
-fe7fc000007ffe3fe000007ffe1fe000007ffe1ff000007ffe0ff800007f\
-fe07f800007ffe07fc00007ffe03fe00007ffe01fe00007ffe01ff00007f\
-fe00ff80007ffe007f80007ffe007fc0007ffe003fe0007ffe003fe0007f\
-fe001ff0007ffe000ff8007ffe000ff8007ffe0007fc007ffe0003fe007f\
-fe0003fe007ffe0001ff007ffe0000ff007ffe0000ff807ffe00007fc07f\
-fe00003fc07ffe00003fe07ffe00001ff07ffe00000ff07ffe00000ff87f\
-fe000007fc7ffe000003fc7ffe000003fe7ffe000001ff7ffe000001ff7f\
-fe000000fffffe0000007ffffe0000007ffffe0000003ffffe0000001fff\
-fe0000001ffffe0000000ffffe00000007fffe00000007fffe00000003ff\
-fe00000001fffe00000001ff"
- self.Omatrixwid = 60
- self.Omatrixhei = 65
- self.Omatrixori = -1
- self.Omatrix = "fff00000000000fffff0000000007fffffe00000000fffffff80000003ff\
-fffffc000000fffffffff000001fffffffff800003fff000fffc00007ff8\
-0001ffe0000ffe000007ff0001ffc000003ff8003ff0000000ffc003fe00\
-000007fc007fc00000003fe00ff800000001ff00ff800000001ff01ff000\
-000000ff81fe0000000007f83fe0000000007f83fe0000000007fc3fc000\
-0000003fc3fc0000000003fc7f80000000001fe7f80000000001fe7f8000\
-0000001fe7f80000000001fe7f00000000000feff00000000000ffff0000\
-0000000ffff00000000000ffff00000000000ffff00000000000ffff0000\
-0000000ffff00000000000ffff00000000000ffff00000000000ffff0000\
-0000000ffff00000000000ff7f00000000000fe7f80000000001fe7f8000\
-0000001fe7f80000000001fe7f80000000001fe3fc0000000003fc3fc000\
-0000003fc3fe0000000007fc1fe0000000007f81ff000000000ff80ff000\
-000000ff00ff800000001ff00ffc00000003ff007fc00000003fe003ff00\
-00000ffc003ff8000001ff8001ffc000003ff8000fff00000fff00007ffc\
-0003ffe00003fff801fffc00001fffffffff800000fffffffff0000003ff\
-fffffc0000000fffffff000000003fffffc0000000007fffe00000000000\
-3fe000000"
- self.Pmatrixwid = 44
- self.Pmatrixhei = 62
- self.Pmatrixori = 0
- self.Pmatrix = "fffffffe000ffffffffc00fffffffff00fffffffffc0fffffffffe0fffff\
-fffff0ffffffffff8ff000007ff8ff000001ffcff0000007fcff0000003f\
-eff0000003feff0000001feff0000001feff0000000ffff0000000ffff00\
-00000ffff0000000ffff0000000ffff0000000ffff0000000ffff0000000\
-ffff0000001ffff0000001feff0000003feff0000007feff000000ffcff0\
-00001ffcff000007ff8ffffffffff8ffffffffff0fffffffffe0ffffffff\
-fc0fffffffff00ffffffffc00fffffffe000ff000000000ff000000000ff\
-000000000ff000000000ff000000000ff000000000ff000000000ff00000\
-0000ff000000000ff000000000ff000000000ff000000000ff000000000f\
-f000000000ff000000000ff000000000ff000000000ff000000000ff0000\
-00000ff000000000ff000000000ff000000000ff000000000ff000000000\
-ff000000000ff000000000"
- self.Qmatrixwid = 60
- self.Qmatrixhei = 68
- self.Qmatrixori = -1
- self.Qmatrix = "fff00000000000fffff0000000007fffffe00000000fffffff00000003ff\
-fffffc000000fffffffff000001fffffffff800003fff000fffc00007ff8\
-0001ffe0000ffe000007ff0001ffc000003ff8003ff0000000ffc003fe00\
-000007fc007fc00000003fe00ff800000001ff00ff800000001ff01ff000\
-000000ff81fe0000000007f83fe0000000007fc3fe0000000007fc3fc000\
-0000003fc3fc0000000003fc7f80000000001fe7f80000000001fe7f8000\
-0000001fe7f80000000001fe7f00000000000feff00000000000ffff0000\
-0000000ffff00000000000ffff00000000000ffff00000000000ffff0000\
-0000000ffff00000000000ffff00000000000ffff00000000000ffff0000\
-0000000ffff00000000000ff7f00000000000fe7f80000000001fe7f8000\
-0000001fe7f80000000001fe7f80000000001fe3fc0000000003fc3fc000\
-0000003fc3fe0000000007fc1fe0000006007f81ff000000f00ff80ff000\
-001f80ff00ff800001fc1ff00ffc00003ff3ff007fc00001ffbfe003fe00\
-000ffffc003ff800007fffc001ffc00001fff8000fff00000fff00007ff8\
-0003ffe00003fff801ffff00001ffffffffff80000ffffffffffe00003ff\
-ffffffff00000fffffff9ff800003fffffe07fc000007ffff003fe000000\
-3fe0001fc0000000000000f8000000000000070000000000000010"
- self.Rmatrixwid = 50
- self.Rmatrixhei = 62
- self.Rmatrixori = 0
- self.Rmatrix = "ffffffffc0003fffffffff000ffffffffff003fffffffffe00ffffffffff\
-e03ffffffffff80fffffffffff03fc000001ffe0ff0000001ff83fc00000\
-03ff0ff00000007fc3fc0000000ff0ff00000003fe3fc00000007f8ff000\
-00001fe3fc00000007f8ff00000001fe3fc00000007f8ff00000001fe3fc\
-00000007f8ff00000001fc3fc00000007f0ff00000003fc3fc0000000ff0\
-ff00000007f83fc0000003fc0ff0000001ff03fc000003ff80ffffffffff\
-c03fffffffffc00fffffffffe003fffffffff800ffffffffff803fffffff\
-fff00ffffffffffe03fc000001ffc0ff0000001ff03fc0000003fe0ff000\
-00007f83fc0000000fe0ff00000003fc3fc00000007f0ff00000001fc3fc\
-00000007f0ff00000001fc3fc00000007f0ff00000001fc3fc00000007f0\
-ff00000001fc3fc00000007f0ff00000001fc3fc00000007f0ff00000001\
-fc3fc00000007f0ff00000001fc3fc00000007f8ff00000001fe3fc00000\
-007f8ff00000000ff3fc00000003feff00000000ffffc00000003ff"
- self.Smatrixwid = 49
- self.Smatrixhei = 65
- self.Smatrixori = -1
- self.Smatrix = "7ff800000003ffffc0000007fffff800000fffffff00000fffffffc0001f\
-fffffff8001ffffffffe001fff000fff000ffc0000ffc00ffc00003ff007\
-fc000007f807fc000001fe03fc000000ff01fe0000003f81fe0000001fc0\
-ff0000000ff07f80000003f83fc0000001fc1fe0000000fe0ff000000000\
-07fc0000000003fe0000000000ff80000000007fe0000000003ffc000000\
-000fff8000000007fff800000001ffffc00000007ffffe0000001ffffff0\
-000003ffffff8000007ffffff800000fffffff0000007fffffc0000003ff\
-fff80000003ffffe00000001ffff800000000fffc000000001fff0000000\
-003ff80000000007fe0000000001ff00000000007fbf800000003fffc000\
-00000fffe000000007fff000000003fff800000001fefe00000000ff7f00\
-0000007fbfc00000007f9fe00000003fc7f80000003fe3fe0000001fe0ff\
-8000001ff07fe000003ff01ffc00007ff007ffe001fff801fffffffff800\
-7ffffffff8001ffffffff00003fffffff000007fffffe000000fffff8000\
-00003ff80000"
- self.Tmatrixwid = 48
- self.Tmatrixhei = 62
- self.Tmatrixori = 0
- self.Tmatrix = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
-ffffffffffffffffffffffff00000ff0000000000ff0000000000ff00000\
-00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
-00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
-00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
-00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
-00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
-00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
-00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
-00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
-00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
-00000ff0000000000ff0000000000ff0000000000ff0000000000ff00000\
-00000ff0000000000ff00000"
- self.Umatrixwid = 48
- self.Umatrixhei = 64
- self.Umatrixori = 0
- self.Umatrix = "ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
-ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
-ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
-ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
-ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
-ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
-ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
-ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
-ff00000000ffff00000000ffff00000000ffff00000000ffff00000000ff\
-ff00000000ffff00000000ffff00000000ff7f80000001fe7f80000001fe\
-7fc0000003fe7fc0000003fc3fe0000007fc3ff000000ff81ff800003ff8\
-0ffe0000fff007ffc007ffe007ffffffffc003ffffffff8000ffffffff00\
-007ffffffc00000ffffff0000003ffffc00000001ff80000"
- self.Vmatrixwid = 52
- self.Vmatrixhei = 62
- self.Vmatrixori = 0
- self.Vmatrix = "ff800000000ff7f800000000fe7fc00000001fe7fc00000001fe3fc00000\
-001fc3fe00000003fc1fe00000003fc1fe00000003f81ff00000007f80ff\
-00000007f80ff00000007f00ff8000000ff007f8000000ff007f8000000f\
-e007fc000001fe003fc000001fe003fc000001fc003fe000003fc001fe00\
-0003fc001fe000003f8000ff000007f8000ff000007f8000ff000007f000\
-07f80000ff00007f80000ff00007fc0000fe00003fc0001fe00003fc0001\
-fe00003fe0001fc00001fe0003fc00001fe0003fc00000ff0003f800000f\
-f0007f800000ff0007f8000007f8007f0000007f800ff0000007f800ff00\
-00003fc00fe0000003fc01fe0000003fc01fe0000001fe01fc0000001fe0\
-3fc0000001fe03fc0000000ff03f80000000ff07f800000007f07f800000\
-007f87f000000007f87f000000003fcff000000003fcfe000000003fcfe0\
-00000001fffe000000001fffc000000001fffc000000000fff8000000000\
-fff80000000007ff80000000007ff00000000007ff00000000003ff00000\
-000003fe00000000003fe00000"
- self.Wmatrixwid = 77
- self.Wmatrixhei = 62
- self.Wmatrixori = 0
- self.Wmatrix = "3fe000000ff8000003ffff0000007fc000001ff7f8000003fe000000ff3f\
-e000003ff800000ff9ff000001ffc000007fcff800000ffe000003fe3fc0\
-0000fff000001fe1ff000007ffc00001ff0ff800003ffe00000ff87fc000\
-01fff000007fc1fe00001fffc00003fc0ff80000fffe00003fe07fc00007\
-f7f00001ff01fe00003fbf80000ff80ff00003f9fe00007f807f80001fc7\
-f00003fc03fe0000fe3f80003fe00ff0000ff1fe0001fe007f80007f0ff0\
-000ff003fc0003f83f80007f801ff0001fc1fc0007fc007f8001fe0ff000\
-3fc003fc000fe03f8001fe001fe0007f01fc000ff000ff8003f80ff0007f\
-8003fc003f807f8007f8001fe001fc01fc003fc000ff000fe00fe001fe00\
-07f800ff007f800ff0001fe007f001fc00ff0000ff003f800fe007f80007\
-f801fc007f003fc0003fc01fe003fc01fe0000ff00fe000fe00fe00007f8\
-07f0007f00ff00003fc03f8003fc07f80001fe03f8001fe03fc00007f81f\
-c0007f01fc00003fc0fe0003f81fe00001fe0ff0001fe0ff00000ff07f00\
-007f07f800003f83f80003f83f800001fe1fc0001fe1fc00000ff1fe0000\
-ff1fe000007f8fe00003f8ff000001fc7f00001fc7f000000ff3f80000ff\
-3f8000007fbf800003fbfc000001fdfc00001fdfe000000fefe00000fffe\
-0000007fff000007fff0000003fff000001fff8000000fff800000fffc00\
-00007ffc000007ffc0000003ffe000001ffe0000001ffe000000fff00000\
-007ff0000007ff80000003ff8000003ff80000001ffc000000ffc0000000\
-ffc0000007fe00000003fe0000003ff00000001ff0000001ff0000"
- self.Xmatrixwid = 53
- self.Xmatrixhei = 62
- self.Xmatrixori = 0
- self.Xmatrix = "1ff80000000ffc7fe00000007fc1ff00000007fc07fc0000007fe03ff000\
-0003fe00ff8000003fe003fe000003ff001ff800001ff0007fc00001ff00\
-01ff00000ff8000ffc0000ff80003fe0000ff80000ff80007fc00007fe00\
-07fc00001ff0007fc000007fc003fc000003ff003fe000000ff803fe0000\
-003fe01fe0000001ff81ff00000007fc1ff00000001ff0ff000000007fcf\
-f800000003feff800000000ffff8000000003fff8000000001fffc000000\
-0007ffc0000000001ffc0000000000ffe00000000003fe00000000003ff8\
-0000000003ffe0000000001fff8000000001fffc000000001ffff0000000\
-01ff7fc00000000ffbfe00000000ff8ff80000000ff83fe00000007fc1ff\
-00000007fc07fc0000007fc01ff0000003fe00ff8000003fe003fe000003\
-fe000ff800001ff0007fe00001ff0001ff00001ff00007fc0001ff80003f\
-f0000ff80000ff8000ff800003fe000ffc00001ff8007fc000007fc007fc\
-000001ff007fe000000ffc03fe0000003fe03fe0000001ff83ff00000007\
-fe1ff00000001ff1ff00000000ffdff800000003ff"
- self.Ymatrixwid = 55
- self.Ymatrixhei = 62
- self.Ymatrixori = 0
- self.Ymatrix = "3ff000000000ffbff000000003fe3fe00000000ffc7fe00000001ff07fe0\
-0000007fc07fc0000000ff80ffc0000003fe00ff8000000ffc00ff800000\
-1ff001ff8000007fc001ff000000ff8003ff000003fe0003fe000007fc00\
-03fe00001ff00007fe00007fc00007fc0000ff800007fc0003fe00000ff8\
-0007f800000ff8001ff000000ff8007fc000001ff000ff8000001ff003fe\
-0000003fe007f80000003fe01ff00000003fe07fc00000007fc0ff000000\
-007fc3fe000000007fc7f800000000ff9ff000000000ffbfc000000000ff\
-ff0000000001fffe0000000001fff80000000003fff00000000003ffc000\
-00000003ff000000000007fe000000000007f800000000000ff000000000\
-001fe000000000003fc000000000007f800000000000ff000000000001fe\
-000000000003fc000000000007f800000000000ff000000000001fe00000\
-0000003fc000000000007f800000000000ff000000000001fe0000000000\
-03fc000000000007f800000000000ff000000000001fe000000000003fc0\
-00000000007f800000000000ff000000000001fe000000000003fc000000\
-000007f800000"
- self.Zmatrixwid = 48
- self.Zmatrixhei = 62
- self.Zmatrixori = 0
- self.Zmatrix = "1ffffffffffe1ffffffffffe1ffffffffffe1ffffffffffe1ffffffffffe\
-1ffffffffffe1ffffffffffe0000000007fe000000000ffc000000001ff8\
-000000001ff8000000003ff0000000007fe000000000ffc000000000ffc0\
-00000001ff8000000003ff0000000007fe0000000007fc000000000ffc00\
-0000001ff8000000003ff0000000007fe0000000007fe000000000ffc000\
-000001ff8000000003ff0000000003ff0000000007fe000000000ffc0000\
-00001ff8000000001ff8000000003ff0000000007fe000000000ffc00000\
-0000ff8000000001ff8000000003ff0000000007fe000000000ffc000000\
-000ffc000000001ff8000000003ff0000000007fe0000000007fe0000000\
-00ffc000000001ff8000000003ff0000000003ff0000000007fe00000000\
-0ffc000000001ff8000000001ff0000000003ff0000000007fe000000000\
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
-ffffffffffffffffffffffff"
- self.onematrixwid = 21
- self.onematrixhei = 60
- self.onematrixori = 2
- self.onematrix = "f80007c0007e0003f0001f8001fc000fe000ff000ff800ffc03ffe1fffff\
-fffffffffffffffffffffffff8003fc001fe000ff0007f8003fc001fe000\
-ff0007f8003fc001fc000fe0007f0003f8001fc000fe0007f0003f8001fc\
-000fe0007f0003f8001fc000fe0007f0003f8001fc000fe0007f0003f800\
-1fc000fe0007f0003f8001fc000fe0007f0003f8001fc000fe0007f0003f\
-8001fc000fe"
- self.twomatrixwid = 40
- self.twomatrixhei = 60
- self.twomatrixori = 2
- self.twomatrix = "1ffc000000ffff800003ffffe0000ffffff8001ffffffc003ffffffe007f\
-ffffff007ff007ff80ffc000ffc1ff00007fc1fe00003fe1fe00001fe3fc\
-00000fe3f800000fe3f800000ff3f8000007f7f8000007f7f0000007f7f0\
-000007f7f0000007f7f0000007f00000000ff00000000fe00000001fe000\
-00001fe00000003fc00000007fc0000000ff80000003ff00000007ff0000\
-001ffe0000007ffc000000fff8000003ffe000000fffc000003fff000000\
-7ffe000001fff8000003ffe000000fff8000001ffe0000003ff80000007f\
-e00000007fc0000000ff80000001fe00000001fc00000003fc00000003f8\
-00000007f000000007f000000007f000000007f00000000fffffffffffff\
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
- self.threematrixwid = 40
- self.threematrixhei = 62
- self.threematrixori = 2
- self.threematrix = "1ff8000001ffff800007ffffe0000ffffff0003ffffff8007ffffffc007f\
-fffffe00ffe007ff01ff8001ff01fe0000ff81fc00007f83fc00003f83f8\
-00003fc3f800001fc3f800001fc7f000001fc7f000001fc7f000001fc7f0\
-00001fc00000001fc00000003f800000003f800000007f80000000ff0000\
-0001ff0000001ffe00000ffffc00000ffff000000fffe000000ffff80000\
-0ffffc00000fffff00000003ff80000000ffc00000003fc00000001fe000\
-00001fe00000000fe00000000ff000000007f000000007f000000007ffe0\
-000007ffe0000007ffe0000007ffe0000007f7f0000007f7f000000fe7f0\
-00000fe7f800001fe3f800001fe3fc00003fc3fe00007fc1ff8001ff81ff\
-e007ff80ffffffff007ffffffe003ffffffc001ffffff00007ffffe00001\
-ffff0000001ff0000"
- self.fourmatrixwid = 41
- self.fourmatrixhei = 60
- self.fourmatrixori = 2
- self.fourmatrix = "1f000000001f800000001fc00000001fe00000000ff00000000ff8000000\
-0ffc00000007fe00000007ff00000007ff80000007ffc0000003ffe00000\
-03fff0000003fff8000003fdfc000001fcfe000001fc7f000001fe3f8000\
-00fe1fc00000fe0fe00000ff07f00000ff03f800007f01fc00007f00fe00\
-007f807f00003f803f80003f801fc0003fc00fe0003fc007f0001fc003f8\
-001fc001fc001fe000fe000fe0007f000fe0003f800ff0001fc00ff0000f\
-e007f00007f007f00003f803f80001fc01ffffffffffffffffffffffffff\
-fffffffffffffffffffffffffffffffffffffffffffffc000001fc000000\
-00fe000000007f000000003f800000001fc00000000fe000000007f00000\
-0003f800000001fc00000000fe000000007f000000003f800000001fc000\
-00000fe00"
- self.fivematrixwid = 40
- self.fivematrixhei = 62
- self.fivematrixori = 2
- self.fivematrix = "3fffffff803fffffff803fffffff803fffffff807fffffff807fffffff80\
-7fffffff807f000000007f000000007f000000007e00000000fe00000000\
-fe00000000fe00000000fe00000000fe00000000fe00000000fc00000000\
-fc00000001fc00000001fc07f80001fc3fff0001fcffffe001fffffff001\
-fffffff801fffffffe01fffffffe03ffe00fff03ff8003ff83fe0000ff83\
-fc00007fc3f800003fc00000001fe00000001fe00000000fe00000000fe0\
-0000000ff000000007f000000007f000000007f000000007f000000007f0\
-00000007f000000007f000000007ffe0000007efe000000fe7f000000fe7\
-f000001fe7f800001fc3f800003fc3fc00007f83fe0000ff81ff8001ff00\
-ffe00ffe00fffffffe007ffffffc003ffffff8000fffffe00007ffffc000\
-00fffe0000001ff0000"
- self.sixmatrixwid = 39
- self.sixmatrixhei = 62
- self.sixmatrixori = 2
- self.sixmatrix = "1ff0000001fffc00000ffffe00007ffffe0001fffffe0007fffffe001fff\
-fffe007ff00ffc01ff8007fc03fc0007f80ff00007f81fe00007f07f8000\
-0fe0fe00000fe1fc00001fc7f00000000fe00000001fc00000007f800000\
-00fe00000001fc00000003f800000007f003f8000fe07ffe003fc3ffff00\
-7f8fffff80ff3fffff81feffffff83ffffffff87fff807ff8fffc001ff1f\
-fe0001ff3ff80001fe7ff00001feffc00003fdff000003fbfe000007f7fc\
-00000ffff000000fffe000001fdfc000003fbf8000007f7f000000fefe00\
-0001fdfc000003fbf8000007f3f800001fc7f000003f8ff000007f0fe000\
-01fe1fe00007f81fe0000ff03fe0007fc07fe001ff807ff00ffe007fffff\
-f8007fffffe0007fffff80007ffffe00007ffff000001fff80000003f800\
-0"
- self.sevenmatrixwid = 40
- self.sevenmatrixhei = 60
- self.sevenmatrixori = 2
- self.sevenmatrix = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
-ffffffffff00000000fe00000000fe00000001fc00000003f800000003f8\
-00000007f00000000fe00000000fc00000001fc00000003f800000003f80\
-0000007f00000000fe00000000fe00000001fc00000001fc00000003f800\
-000003f000000007f00000000fe00000000fe00000001fc00000001fc000\
-00003f800000003f800000007f000000007f00000000ff00000000fe0000\
-0001fe00000001fc00000001fc00000003f800000003f800000007f80000\
-0007f000000007f00000000ff00000000fe00000000fe00000001fe00000\
-001fe00000001fc00000003fc00000003fc00000003f800000003f800000\
-007f800000007f800000007f800000007f00000000ff00000000ff000000"
- self.eightmatrixwid = 40
- self.eightmatrixhei = 62
- self.eightmatrixori = 2
- self.eightmatrix = "ff80000007fff000003ffffe00007fffff0000ffffff8001ffffffc003ff\
-ffffe007ff007ff007fc001ff00ff8000ff80ff00007f80fe00003f81fe0\
-0003fc1fc00001fc1fc00001fc1fc00001fc1fc00001fc1fc00001fc1fc0\
-0001fc1fe00003fc0fe00003f80ff00007f807f8000ff007fe003ff003ff\
-80ffe001ffffffc0007fffff00003ffffe00007ffffe0001ffffff8003ff\
-ffffc007ff00fff00ff8001ff01ff0000ff83fc00003fc3f800001fc7f80\
-0001fe7f000000fe7f000000fefe0000007ffe0000007ffe0000007ffe00\
-00007ffe0000007ffe0000007ffe0000007ffe0000007f7f000000fe7f00\
-0000fe7f800001fe7f800001fe3fc00003fc3fe0000ffc1ff8001ff80ffe\
-00fff007ffffffe007ffffffe001ffffff8000ffffff00003ffffc00000f\
-fff0000000ff0000"
- self.ninematrixwid = 39
- self.ninematrixhei = 62
- self.ninematrixori = 2
- self.ninematrix = "ffc000000ffff000007ffff80001fffff80007fffff8003ffffff8007fff\
-fff801ff803ff807fe001ff80ff0000ff03fc0000ff07f00001fe1fe0000\
-1fe3f800001fc7f000003f8fe000007f3f8000007f7f000000fefe000001\
-fdfc000003fbf8000007f7f000000fefe000001fffc000003fdfc00000ff\
-bf800001ff7f800007feff00000ffcff00003ff9ff0000fff1ff0007ffe3\
-ff803fffc3ffffffff83fffffeff03fffff9fe03ffffe3fc01ffff07f800\
-fffc0fe0003f801fc00000003f800000007f00000000fe00000003fc0000\
-0007f00000000fe00000001fc7f000007f8fe00000fe0fe00003fc1fc000\
-07f03fc0001fe07fc0007fc07f8001ff00ffc007fc00ffc03ff800ffffff\
-e001ffffff8001fffffe0001fffff80000ffffc000007ffe0000001fc000\
-0"
- self.tenmatrixwid = 39
- self.tenmatrixhei = 62
- self.tenmatrixori = 2
- self.tenmatrix = "7fc0000007fff000003ffff80000fffff80003fffff8000ffffff8003fff\
-fff800ffe03ff801ff001ff007f8001ff00ff0001fe03fc0001fe07f0000\
-1fc1fe00003fc3f800003f87f000007f0fe00000fe3f800000fe7f000001\
-fcfe000003f9fc000007f3f800000fe7e000000fdfc000001fff8000003f\
-ff0000007ffe000000fffc000001fff8000003fff0000007ffe000000fff\
-c000001fff8000003fff0000007ffe000000fffc000001fff8000003fff0\
-000007ffe000000fefc000001fdfc000007f3f800000fe7f000001fcfe00\
-0003f9fc000007f3f800000fe3f800003f87f000007f0ff00000fe0fe000\
-03f81fc00007f03fc0001fc03fc0007f807fc001ff007fc007fc007fe03f\
-f0007fffffc000ffffff00007ffffc00007ffff000003fff8000000ff800\
-0"
- self._matrixwid = 51
- self._matrixhei = 4
- self._matrixori = 73
- self._matrix = "fffffffffffffffffffffffffffffffffffffffffffffffffff"
- self.minusmatrixwid = 20
- self.minusmatrixhei = 6
- self.minusmatrixori = 36
- self.minusmatrix = "ffffffffffffffffffffffffffffff"
- self.plusmatrixwid = 42
- self.plusmatrixhei = 42
- self.plusmatrixori = 21
- self.plusmatrix = "3f000000000fc000000003f000000000fc000000003f000000000fc00000\
-0003f000000000fc000000003f000000000fc000000003f000000000fc00\
-0000003f000000000fc000000003f000000000fc000000003f000000000f\
-c0000fffffffffffffffffffffffffffffffffffffffffffffffffffffff\
-ffffffff00003f000000000fc000000003f000000000fc000000003f0000\
-00000fc000000003f000000000fc000000003f000000000fc000000003f0\
-00000000fc000000003f000000000fc000000003f000000000fc00000000\
-3f000000000fc0000"
- self.equalmatrixwid = 41
- self.equalmatrixhei = 21
- self.equalmatrixori = 32
- self.equalmatrix = "1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
-ff8000000000000000000000000000000000000000000000000000000000\
-00000000000000000000000000000000003fffffffffffffffffffffffff\
-ffffffffffffffffffffffffffffffffffff"
- self.exclmatrixwid = 7
- self.exclmatrixhei = 62
- self.exclmatrixori = 0
- self.exclmatrix = "3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffbe\
-7cf9f3e7cf9f3e3870e1c3870000000007fffffffffffffff"
- self.atmatrixwid = 78
- self.atmatrixhei = 75
- self.atmatrixori = -1
- self.atmatrix = "3ffc000000000000001fffff80000000000003ffffffc000000000003fff\
-ffffc00000000007ffffffffc0000000003fffffffffc000000003ffffff\
-ffff800000003fffc000ffff80000001fff000007fff0000000fff000000\
-3ffe000000fff00000003ffc000007ff000000003ff800003ff000000000\
-7ff00001ff80000000007fe0000ffc0000000000ffc0007fc00000000001\
-ff8001fe000000000003fe000ff0000000000007fc007fc000000000000f\
-f801fe000003f800003fe00ff00000fff800007f807f80000ffff03f80ff\
-01fc00007ffff1fc03fc0ff00007ffffc7f007f83f80003ff03fbfc01fe1\
-fe0001ff003ffe003f87f0000ff0007ff800fe1fc0007f8000ffe003fcfe\
-0001fc0003ff0007f3f8000fe00007fc001fcfc0007f80001ff0007f7f00\
-01fc00007fc001fdfc000fe00001fe0007f7f0003f800007f8001fdf8001\
-fe00001fe0007f7e0007f000007f0001fff8001fc00003fc0007ffe0007f\
-00000ff0001fbf8003f800003f8000fefe000fe00000fe0003fbf8003f80\
-0007f8000fefe000fe00001fc0007f3f8003f800007f0001fcfe000fe000\
-03fc000ff3f8003f80000fe0003f8fe000fe00007f8001fe1fc003fc0001\
-fe0007f07f0007f0000ff0003fc1fc001fe0007fc001fe07f8007f8003ff\
-000ff00fe000ff001ffe007fc03fc003fe00fff807fe00ff0007fe0feff8\
-7ff001fe000fffff3fffff8007f8001ffff8fffffc000ff0003fffc1ffff\
-c0003fe0007ffc03fffc00007fc0003f8003ff800001ff80000000000000\
-0003ff000000000000000007fe00000000000000000ffc00000000000000\
-001ffc00000000000000003ff800000000000000007ff800000000000000\
-00fff80000000000000001fffc000003c000000001ffff0001ff80000000\
-03fffffffffe0000000003fffffffff80000000003fffffffff000000000\
-03ffffffff800000000001fffffff0000000000000fffffc000000000000\
-001ffc00000000"
- self.hashmatrixwid = 45
- self.hashmatrixhei = 60
- self.hashmatrixori = 3
- self.hashmatrix = "7e003f000007f003f800003f801fc00001f800fe00000fc007e000007e00\
-3f000007f003f800003f801fc00001fc00fe00000fc007e000007e003f00\
-0003f001f800003f801fc00001fc00fe00000fc007e000007e003f001fff\
-fffffff8ffffffffffc7fffffffffe3ffffffffff1ffffffffff8fffffff\
-fffc003f801fc00001fc00fe00000fe007f000007e003f000003f001f800\
-001f800fc00001fc00fe00000fe007f000007f003f800003f001f800001f\
-800fc00000fc007e00000fe007f000007f003f800003f001fc007fffffff\
-ffe3ffffffffff1ffffffffff8ffffffffffc7fffffffffe3ffffffffff0\
-00fc007e00000fe003f000007f003f800003f801fc00001f800fe00000fc\
-007e000007e003f000007f003f800003f801fc00001f800fe00000fc007e\
-000007e003f000007f003f800003f801fc00001f800fe00000fc007e0000\
-07e003f0000"
- self.dollarmatrixwid = 41
- self.dollarmatrixhei = 77
- self.dollarmatrixori = -4
- self.dollarmatrix = "7c000000003e000000001f000000000f8000000007c00000000ffc000000\
-7fffc00000fffff80001ffffff0003ffffffc003fffffff003ffcf8ffc01\
-ff07c1fe01fe03e07f80fe01f01fc0fe00f80ff07f007c03f83f003e01fc\
-3f801f007f1fc00f803f8fe007c01fc7f003e00fe3f801f00001fc00f800\
-00fe007c00007f803e00001fc01f00000ff00f800007fc07c00001ff83e0\
-00007ff1f000003ffff800000ffffe000003fffff00000ffffff00001fff\
-ffe00003fffff800003fffff000003ffffc00000fffff000007c7ff80000\
-3e0ffe00001f01ff00000f807fc00007c01fe00003e007f00001f001f800\
-00f800fffc007c007ffe003e003fff001f001fff800f800fffc007c007ff\
-f003e003f3f801f001f9fc00f801fcff007c00fe3f803e00fe1fe01f00ff\
-0ff80f80ff03ff07c1ff80ffe3e3ff803fffffff800fffffff8003ffffff\
-80007fffff00000ffffe0000007ff000000007c000000003e000000001f0\
-00000000f8000000007c000000003e000000001f000000000f8000000007\
-c0000"
- self.percentmatrixwid = 71
- self.percentmatrixhei = 61
- self.percentmatrixori = 2
- self.percentmatrix = "1f00000000000000007e0000003fc0000001f8000003fff0000003e00000\
-0ffff800000fc000007ffff800001f000001fffff800007e000007fffff8\
-0000f800000ff81ff80003f000003fc00ff00007c00000ff000ff0001f80\
-0001fc000fe0003e000003f0000fc000fc00000fe0001fc003f000001f80\
-001f8007e000003f00003f001f8000007e00007e003e000000fc0000fc00\
-fc000001f80001f801f0000003f80007f007e0000003f0000fc00f800000\
-07f0003f803f0000000ff000ff00fc0000000ff003fc01f80000000ff81f\
-f007e00000001fffffe00fc00000001fffff803f000000001ffffe007c00\
-0000000ffff001f80000000007ff8003e00000000001fc000fc000000000\
-0000001f00000000000000007e0000000000000001f80007f00000000003\
-f0007ffc000000000fc003fffe000000001f800ffffe000000007e003fff\
-fe00000000f800fffffe00000003f003fe03fe00000007c007f803fc0000\
-001f801fc001fc0000007e003f8003f8000000fc007e0003f0000003f001\
-f80003f0000007e003f00007e000001f8007e0000fc000003f000fc0001f\
-800000fc001f80003f000001f0003f00007e000007e0003f0001f800000f\
-80007f0007f000003f0000fe000fe00000fc0000ff007f800001f80001ff\
-01ff000007e00001fffffc00000fc00001fffff000003f000001ffffc000\
-007e000001ffff000001f8000000fff8000007f00000003f800"
- self.hatmatrixwid = 32
- self.hatmatrixhei = 32
- self.hatmatrixori = 2
- self.hatmatrix = "7e000000ff000000ff000001ff000001ff800001ff800003ffc00003ffc0\
-0007e7c00007e7e00007c7e0000fc3f0000fc3f0001f81f0001f81f8001f\
-01f8003f00fc003f00fc007e007c007e007e007c007e00fc003f00fc003f\
-01f8001f81f8001f81f0001f83f0000fc3f0000fc7e00007e7e00007efc0\
-0003efc00003f"
- self.ampmatrixwid = 50
- self.ampmatrixhei = 62
- self.ampmatrixori = 2
- self.ampmatrix = "3fc0000000007ffe000000007fffc00000003ffffc0000001fffff800000\
-0fffffe0000007fc07fc000001fe00ff800000fe001fe000003f8003f800\
-001fc0007f000007f0001fc00001fc0007f000007f0001fc00001fc0007f\
-000007f0001fc00000fe000fe000003f8003f800000ff001fe000001fe00\
-ff0000007f80ffc000000ff07fe0000001fe3ff00000007ffff80000000f\
-fff800000001fffc000000007ffc000000001ffe000000001fff00000000\
-0fffe00000000ffffc00000007feff80000003ff1ff003f801ff07fe00fe\
-00ff80ff803f807fc01ff00fe03fe003fe07f00ff0007fc1fc07f8000ff8\
-7f01fc0003ff3fc07f00007fcfe03f80000ffff80fe00001fffc03f80000\
-3fff00fe000007ff803f800001ffe00fe000003ff003f8000007fc00ff00\
-0001ff801fc00000fff007f800007ffe01ff00003fffc03fe0001ffff00f\
-fc001ffbfe01ffe03ffc7fc07ffffffe0ff80fffffff03ff01ffffff807f\
-c03fffff800ff803ffffc001ff003fff8000000000ff0000000"
- self.strixmatrixwid = 25
- self.strixmatrixhei = 24
- self.strixmatrixori = 0
- self.strixmatrix = "3e00001f00000f800007c00003e00001f00100f804e07c0efe3e3fffffff\
-fffffffffffff0ffff8007fc0003fe0003ff8001ffc001fbf001f8fc01f8\
-3f01fc1fc0fc07e01c01c00600c0"
- self.opencparmatrixwid = 18
- self.opencparmatrixhei = 80
- self.opencparmatrixori = 0
- self.opencparmatrix = "3c001f000f8007e001f000f8003e001f000fc003f001f8007e001f000fc0\
-03e001f8007e003f800fc003f001fc007e001f8007e003f800fc003f000f\
-c007f001fc007f001f8007e001f800fe003f800fe003f800fe003f800fe0\
-03f800fe003f800fe003f8007e001f8007e001fc007f001fc003f000fc00\
-3f000fe003f8007e001f8007f000fc003f000fc001f8007e000f8003f000\
-fc001f8007e000f8003f0007c000f8003e0007c001f0003e0007c001f"
- self.closecparmatrixwid = 18
- self.closecparmatrixhei = 80
- self.closecparmatrixori = 0
- self.closecparmatrix = "f0003e0007c001f8003e0007c001f0007e000fc003f0007e001f8003e000\
-fc003f0007e001f8007f000fc003f000fe001f8007e001f8007f000fc003\
-f000fc003f800fe003f8007e001f8007e001fc007f001fc007f001fc007f\
-001fc007f001fc007f001fc007f001f8007e001f800fe003f800fe003f00\
-0fc003f001fc007f001f8007e003f800fc003f000fc007e001f8007c003f\
-000fc007e001f8007c003f000f8007c001f000f8003e001f000f8003e000"
- self.opensparmatrixwid = 16
- self.opensparmatrixhei = 80
- self.opensparmatrixori = 0
- self.opensparmatrix = "fffffffffffffffffffffffffe00fe00fe00fe00fe00fe00fe00fe00fe00\
-fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00\
-fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00\
-fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00\
-fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00fe00ffff\
-ffffffffffffffffffff"
- self.closesparmatrixwid = 16
- self.closesparmatrixhei = 80
- self.closesparmatrixori = 0
- self.closesparmatrix = "ffffffffffffffffffffffff007f007f007f007f007f007f007f007f007f\
-007f007f007f007f007f007f007f007f007f007f007f007f007f007f007f\
-007f007f007f007f007f007f007f007f007f007f007f007f007f007f007f\
-007f007f007f007f007f007f007f007f007f007f007f007f007f007f007f\
-007f007f007f007f007f007f007f007f007f007f007f007f007f007fffff\
-ffffffffffffffffffff"
- self.backslashmatrixwid = 25
- self.backslashmatrixhei = 63
- self.backslashmatrixori = 0
- self.backslashmatrix = "7c00001e00000f800007c00001e00000f800007c00003e00000f000007c0\
-0003e00000f000007c00003e00000f000007c00003e00000f000007c0000\
-3e00000f000007c00003e00000f000007c00003e00000f000007c00003e0\
-0000f000007c00003e00001f000007800003e00001f000007800003e0000\
-1f000007800003e00001f000007800003e00001f000007800003e00001f0\
-00007800003e00001f000007800003e00001f000007800003e00001f0000\
-0f800003c00001f00000f800003c00001f"
- self.semicolmatrixwid = 9
- self.semicolmatrixhei = 57
- self.semicolmatrixori = 17
- self.semicolmatrix = "1ffffffffffffffffffff000000000000000000000000000000000000000\
-0000000000000000000001ffffffffffffffffffff0783c1e0f078383c1e\
-1e7e3e1c0"
- self.postmatrixwid = 8
- self.postmatrixhei = 21
- self.postmatrixori = 2
- self.postmatrix = "ffffffffffffffffffffffff7e7e7e7e7e3c3c3c3c"
- self.commamatrixwid = 9
- self.commamatrixhei = 21
- self.commamatrixori = 53
- self.commamatrix = "1ffffffffffffffffffff0783c1e0f078383c1e1e7e3e1c0"
- self.fullstopmatrixwid = 9
- self.fullstopmatrixhei = 9
- self.fullstopmatrixori = 53
- self.fullstopmatrix = "1ffffffffffffffffffff"
- self.forslashmatrixwid = 25
- self.forslashmatrixhei = 63
- self.forslashmatrixori = 0
- self.forslashmatrix = "7c00003c00003e00001f00000f00000f800007c00003e00001e00001f000\
-00f800007800007c00003e00001e00001f00000f800007800007c00003e0\
-0001e00001f00000f800007800007c00003e00001e00001f00000f800007\
-800007c00003e00001f00000f00000f800007c00003c00003e00001f0000\
-0f00000f800007c00003c00003e00001f00000f00000f800007c00003c00\
-003e00001f00000f00000f800007c00003c00003e00001f00000f8000078\
-00007c00003e00001e00001f00000"
- self.lesthanmatrixwid = 41
- self.lesthanmatrixhei = 41
- self.lesthanmatrixori = 22
- self.lesthanmatrix = "10000000003800000000fc00000001fe00000007ff0000000fff8000001f\
-ffc000007fff800000ffff000001fffc000007fff800000fffe000001fff\
-c000007fff000000fffe000003fffc000007fff000000fffe0000007ff80\
-000003ff00000001fe00000000ffe00000007ffc0000003fffc0000003ff\
-f80000007fff0000000ffff0000000fffe0000001fffe0000003fffc0000\
-003fff80000007fff8000000ffff0000000ffff0000001fffc0000001ffe\
-00000003ff000000007f8000000007c000000000e0000000001"
- self.greatthanmatrixwid = 42
- self.greatthanmatrixhei = 41
- self.greatthanmatrixori = 22
- self.greatthanmatrix = "30000000000f0000000003f000000000ff800000003ff80000000fffc000\
-0003fffc0000003fffc0000001fffe0000001fffe0000000fffe0000000f\
-fff0000000ffff00000007fff00000007fff80000003fff80000003fffc0\
-000003fffc0000001fff00000001ffc00000000ff00000001ffc0000001f\
-ff0000003fff8000003fff8000003fff8000007fff0000007fff000000ff\
-ff000000fffe000001fffe000001fffe000003fffc000003fffc000003ff\
-f8000000fff80000003ff80000000ff000000003f000000000f000000000\
-20000000000"
- self.questionmatrixwid = 36
- self.questionmatrixhei = 63
- self.questionmatrixori = -1
- self.questionmatrix = "7fe000003fffe0000fffff8003fffffc007fffffe00fffffff00fffffff8\
-1ff801ffc3fe0007fc3fc0003fe3f80001fe7f80000fe7f00000ff7f0000\
-07f7e000007ffe000007ffe000007ffe000007ffe000007ffe000007f000\
-0000fe0000000fe0000001fe0000003fc0000003fc0000007f8000000ff0\
-000001ff0000003fe0000007fc000000ff8000001ff0000003fc0000007f\
-8000000ff0000000ff0000001fe0000001fc0000003fc0000003f8000000\
-3f80000003f80000003f80000003f80000003f80000003f8000000000000\
-000000000000000000000000000000000000000000000000000000000000\
-0000003f80000003f80000003f80000003f80000003f80000003f8000000\
-3f80000003f80000003f8000"
- self.colonmatrixwid = 9
- self.colonmatrixhei = 45
- self.colonmatrixori = 17
- self.colonmatrix = "1ffffffffffffffffffff000000000000000000000000000000000000000\
-0000000000000000000001ffffffffffffffffffff"
- self.quotematrixwid = 22
- self.quotematrixhei = 21
- self.quotematrixori = 2
- self.quotematrix = "3fc0ffff03fffc0ffff03fffc0ffff03fffc0ffff03fffc0ffff03fffc0f\
-ffffffdf807e7e01f9f807e7e01f9f807e3c00f0f003c3c00f0f003c"
- self.opensquigmatrixwid = 19
- self.opensquigmatrixhei = 80
- self.opensquigmatrixori = 0
- self.opensquigmatrix = "7e007fc01ff807ff00ffe03ffc07f800fe003f8007f000fe001fc003f800\
-7f000fe001fc003f8007f000fe001fc003f8007f000fe001fc003f8007f0\
-00fe001fc003f8007f000fe001fc007f000fe003fc00ff007fc01ff803fc\
-007f000fe001fe003fe001fe001fe001fc001fc003f8003f0007e000fe00\
-1fc003f8007f000fe001fc003f8007f000fe001fc003f8007f000fe001fc\
-003f8007f000fe001fc003f8007f000fe001fc001fc003fc007ff807ff00\
-ffe00ffc00ff8003f"
- self.closesquigmatrixwid = 20
- self.closesquigmatrixhei = 80
- self.closesquigmatrixori = 0
- self.closesquigmatrix = "fe000ffc00ffe00fff00fff00fff8007f8003f8001fc001fc001fc001fc0\
-01fc001fc001fc001fc001fc001fc001fc001fc001fc001fc001fc001fc0\
-01fc001fc001fc001fc001fc001fc001fc000fc000fe000fe0007f0007f8\
-003fe001ff000ff0007f0007f000ff001ff003fe007f8007f000fe000fe0\
-00fc001fc001fc001fc001fc001fc001fc001fc001fc001fc001fc001fc0\
-01fc001fc001fc001fc001fc001fc001fc001fc001fc001fc001fc001fc0\
-03f8007f80fff80fff00fff00ffe00ff800fe000"
- self.barmatrixwid = 5
- self.barmatrixhei = 80
- self.barmatrixori = 0
- self.barmatrix = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
-ffffffffffffffffffffffffffffffffffffffff"
- self.miscmatrixwid = 46
- self.miscmatrixhei = 80
- self.miscmatrixori = 0
- self.miscmatrix = "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\
-ffffffffff8000000007fe000000001ff8000000007fe000000001ff8000\
-000007fe000000001ff8000000007fe000000001ff8000000007fe000000\
-001ff8000000007fe000000001ff8000000007fe000000001ff800000000\
-7fe000000001ff8000000007fe000000001ff8000000007fe000000001ff\
-8000000007fe000000001ff8000000007fe000000001ff8000000007fe00\
-0000001ff8000000007fe000000001ff8000000007fe000000001ff80000\
-00007fe000000001ff8000000007fe000000001ff8000000007fe0000000\
-01ff8000000007fe000000001ff8000000007fe000000001ff8000000007\
-fe000000001ff8000000007fe000000001ff8000000007fe000000001ff8\
-000000007fe000000001ff8000000007fe000000001ff8000000007fe000\
-000001ff8000000007fe000000001ff8000000007fe000000001ff800000\
-0007fe000000001ff8000000007fe000000001ff8000000007fe00000000\
-1ff8000000007fe000000001ff8000000007fe000000001ff8000000007f\
-e000000001ffffffffffffffffffffffffffffffffffffffffffffffffff\
-ffffffffffffffffffff"
-
- def writea(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.amatrix)
- charstring = (
- self.amatrixwid * self.amatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.amatrixwid * self.amatrixhei:
- charstring = charstring[0 - self.amatrixwid * self.amatrixhei :]
- for i in range(0, len(charstring), self.amatrixwid):
- for j in range(i, i + self.amatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.amatrixori
- - self.amatrixwid
- + j / self.amatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.amatrixori
- + j / self.amatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.amatrixori + j / self.amatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.amatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.amatrixori + j / self.amatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.amatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.amatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.amatrixori + j / self.amatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeb(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.bmatrix)
- charstring = (
- self.bmatrixwid * self.bmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.bmatrixwid * self.bmatrixhei:
- charstring = charstring[0 - self.bmatrixwid * self.bmatrixhei :]
- for i in range(0, len(charstring), self.bmatrixwid):
- for j in range(i, i + self.bmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.bmatrixori
- - self.bmatrixwid
- + j / self.bmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.bmatrixori
- + j / self.bmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.bmatrixori + j / self.bmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.bmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.bmatrixori + j / self.bmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.bmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.bmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.bmatrixori + j / self.bmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writec(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.cmatrix)
- charstring = (
- self.cmatrixwid * self.cmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.cmatrixwid * self.cmatrixhei:
- charstring = charstring[0 - self.cmatrixwid * self.cmatrixhei :]
- for i in range(0, len(charstring), self.cmatrixwid):
- for j in range(i, i + self.cmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.cmatrixori
- - self.cmatrixwid
- + j / self.cmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.cmatrixori
- + j / self.cmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.cmatrixori + j / self.cmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.cmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.cmatrixori + j / self.cmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.cmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.cmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.cmatrixori + j / self.cmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writed(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.dmatrix)
- charstring = (
- self.dmatrixwid * self.dmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.dmatrixwid * self.dmatrixhei:
- charstring = charstring[0 - self.dmatrixwid * self.dmatrixhei :]
- for i in range(0, len(charstring), self.dmatrixwid):
- for j in range(i, i + self.dmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.dmatrixori
- - self.dmatrixwid
- + j / self.dmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.dmatrixori
- + j / self.dmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.dmatrixori + j / self.dmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.dmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.dmatrixori + j / self.dmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.dmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.dmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.dmatrixori + j / self.dmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writee(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.ematrix)
- charstring = (
- self.ematrixwid * self.ematrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.ematrixwid * self.ematrixhei:
- charstring = charstring[0 - self.ematrixwid * self.ematrixhei :]
- for i in range(0, len(charstring), self.ematrixwid):
- for j in range(i, i + self.ematrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.ematrixori
- - self.ematrixwid
- + j / self.ematrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.ematrixori
- + j / self.ematrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.ematrixori + j / self.ematrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.ematrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.ematrixori + j / self.ematrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.ematrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.ematrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.ematrixori + j / self.ematrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writef(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.fmatrix)
- charstring = (
- self.fmatrixwid * self.fmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.fmatrixwid * self.fmatrixhei:
- charstring = charstring[0 - self.fmatrixwid * self.fmatrixhei :]
- for i in range(0, len(charstring), self.fmatrixwid):
- for j in range(i, i + self.fmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.fmatrixori
- - self.fmatrixwid
- + j / self.fmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.fmatrixori
- + j / self.fmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.fmatrixori + j / self.fmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.fmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.fmatrixori + j / self.fmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.fmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.fmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.fmatrixori + j / self.fmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeg(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.gmatrix)
- charstring = (
- self.gmatrixwid * self.gmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.gmatrixwid * self.gmatrixhei:
- charstring = charstring[0 - self.gmatrixwid * self.gmatrixhei :]
- for i in range(0, len(charstring), self.gmatrixwid):
- for j in range(i, i + self.gmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.gmatrixori
- - self.gmatrixwid
- + j / self.gmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.gmatrixori
- + j / self.gmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.gmatrixori + j / self.gmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.gmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.gmatrixori + j / self.gmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.gmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.gmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.gmatrixori + j / self.gmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeh(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.hmatrix)
- charstring = (
- self.hmatrixwid * self.hmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.hmatrixwid * self.hmatrixhei:
- charstring = charstring[0 - self.hmatrixwid * self.hmatrixhei :]
- for i in range(0, len(charstring), self.hmatrixwid):
- for j in range(i, i + self.hmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.hmatrixori
- - self.hmatrixwid
- + j / self.hmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.hmatrixori
- + j / self.hmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.hmatrixori + j / self.hmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.hmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.hmatrixori + j / self.hmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.hmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.hmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.hmatrixori + j / self.hmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writei(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.imatrix)
- charstring = (
- self.imatrixwid * self.imatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.imatrixwid * self.imatrixhei:
- charstring = charstring[0 - self.imatrixwid * self.imatrixhei :]
- for i in range(0, len(charstring), self.imatrixwid):
- for j in range(i, i + self.imatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.imatrixori
- - self.imatrixwid
- + j / self.imatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.imatrixori
- + j / self.imatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.imatrixori + j / self.imatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.imatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.imatrixori + j / self.imatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.imatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.imatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.imatrixori + j / self.imatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writej(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.jmatrix)
- charstring = (
- self.jmatrixwid * self.jmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.jmatrixwid * self.jmatrixhei:
- charstring = charstring[0 - self.jmatrixwid * self.jmatrixhei :]
- for i in range(0, len(charstring), self.jmatrixwid):
- for j in range(i, i + self.jmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.jmatrixori
- - self.jmatrixwid
- + j / self.jmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.jmatrixori
- + j / self.jmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.jmatrixori + j / self.jmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.jmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.jmatrixori + j / self.jmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.jmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.jmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.jmatrixori + j / self.jmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writek(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.kmatrix)
- charstring = (
- self.kmatrixwid * self.kmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.kmatrixwid * self.kmatrixhei:
- charstring = charstring[0 - self.kmatrixwid * self.kmatrixhei :]
- for i in range(0, len(charstring), self.kmatrixwid):
- for j in range(i, i + self.kmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.kmatrixori
- - self.kmatrixwid
- + j / self.kmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.kmatrixori
- + j / self.kmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.kmatrixori + j / self.kmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.kmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.kmatrixori + j / self.kmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.kmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.kmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.kmatrixori + j / self.kmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writel(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.lmatrix)
- charstring = (
- self.lmatrixwid * self.lmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.lmatrixwid * self.lmatrixhei:
- charstring = charstring[0 - self.lmatrixwid * self.lmatrixhei :]
- for i in range(0, len(charstring), self.lmatrixwid):
- for j in range(i, i + self.lmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.lmatrixori
- - self.lmatrixwid
- + j / self.lmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.lmatrixori
- + j / self.lmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.lmatrixori + j / self.lmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.lmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.lmatrixori + j / self.lmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.lmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.lmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.lmatrixori + j / self.lmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writem(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.mmatrix)
- charstring = (
- self.mmatrixwid * self.mmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.mmatrixwid * self.mmatrixhei:
- charstring = charstring[0 - self.mmatrixwid * self.mmatrixhei :]
- for i in range(0, len(charstring), self.mmatrixwid):
- for j in range(i, i + self.mmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.mmatrixori
- - self.mmatrixwid
- + j / self.mmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.mmatrixori
- + j / self.mmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.mmatrixori + j / self.mmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.mmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.mmatrixori + j / self.mmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.mmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.mmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.mmatrixori + j / self.mmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writen(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.nmatrix)
- charstring = (
- self.nmatrixwid * self.nmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.nmatrixwid * self.nmatrixhei:
- charstring = charstring[0 - self.nmatrixwid * self.nmatrixhei :]
- for i in range(0, len(charstring), self.nmatrixwid):
- for j in range(i, i + self.nmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.nmatrixori
- - self.nmatrixwid
- + j / self.nmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.nmatrixori
- + j / self.nmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.nmatrixori + j / self.nmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.nmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.nmatrixori + j / self.nmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.nmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.nmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.nmatrixori + j / self.nmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeo(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.omatrix)
- charstring = (
- self.omatrixwid * self.omatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.omatrixwid * self.omatrixhei:
- charstring = charstring[0 - self.omatrixwid * self.omatrixhei :]
- for i in range(0, len(charstring), self.omatrixwid):
- for j in range(i, i + self.omatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.omatrixori
- - self.omatrixwid
- + j / self.omatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.omatrixori
- + j / self.omatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.omatrixori + j / self.omatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.omatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.omatrixori + j / self.omatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.omatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.omatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.omatrixori + j / self.omatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writep(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.pmatrix)
- charstring = (
- self.pmatrixwid * self.pmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.pmatrixwid * self.pmatrixhei:
- charstring = charstring[0 - self.pmatrixwid * self.pmatrixhei :]
- for i in range(0, len(charstring), self.pmatrixwid):
- for j in range(i, i + self.pmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.pmatrixori
- - self.pmatrixwid
- + j / self.pmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.pmatrixori
- + j / self.pmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.pmatrixori + j / self.pmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.pmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.pmatrixori + j / self.pmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.pmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.pmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.pmatrixori + j / self.pmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeq(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.qmatrix)
- charstring = (
- self.qmatrixwid * self.qmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.qmatrixwid * self.qmatrixhei:
- charstring = charstring[0 - self.qmatrixwid * self.qmatrixhei :]
- for i in range(0, len(charstring), self.qmatrixwid):
- for j in range(i, i + self.qmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.qmatrixori
- - self.qmatrixwid
- + j / self.qmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.qmatrixori
- + j / self.qmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.qmatrixori + j / self.qmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.qmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.qmatrixori + j / self.qmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.qmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.qmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.qmatrixori + j / self.qmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writer(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.rmatrix)
- charstring = (
- self.rmatrixwid * self.rmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.rmatrixwid * self.rmatrixhei:
- charstring = charstring[0 - self.rmatrixwid * self.rmatrixhei :]
- for i in range(0, len(charstring), self.rmatrixwid):
- for j in range(i, i + self.rmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.rmatrixori
- - self.rmatrixwid
- + j / self.rmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.rmatrixori
- + j / self.rmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.rmatrixori + j / self.rmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.rmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.rmatrixori + j / self.rmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.rmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.rmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.rmatrixori + j / self.rmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writes(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.smatrix)
- charstring = (
- self.smatrixwid * self.smatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.smatrixwid * self.smatrixhei:
- charstring = charstring[0 - self.smatrixwid * self.smatrixhei :]
- for i in range(0, len(charstring), self.smatrixwid):
- for j in range(i, i + self.smatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.smatrixori
- - self.smatrixwid
- + j / self.smatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.smatrixori
- + j / self.smatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.smatrixori + j / self.smatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.smatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.smatrixori + j / self.smatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.smatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.smatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.smatrixori + j / self.smatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writet(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.tmatrix)
- charstring = (
- self.tmatrixwid * self.tmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.tmatrixwid * self.tmatrixhei:
- charstring = charstring[0 - self.tmatrixwid * self.tmatrixhei :]
- for i in range(0, len(charstring), self.tmatrixwid):
- for j in range(i, i + self.tmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.tmatrixori
- - self.tmatrixwid
- + j / self.tmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.tmatrixori
- + j / self.tmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.tmatrixori + j / self.tmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.tmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.tmatrixori + j / self.tmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.tmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.tmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.tmatrixori + j / self.tmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeu(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.umatrix)
- charstring = (
- self.umatrixwid * self.umatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.umatrixwid * self.umatrixhei:
- charstring = charstring[0 - self.umatrixwid * self.umatrixhei :]
- for i in range(0, len(charstring), self.umatrixwid):
- for j in range(i, i + self.umatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.umatrixori
- - self.umatrixwid
- + j / self.umatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.umatrixori
- + j / self.umatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.umatrixori + j / self.umatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.umatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.umatrixori + j / self.umatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.umatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.umatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.umatrixori + j / self.umatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writev(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.vmatrix)
- charstring = (
- self.vmatrixwid * self.vmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.vmatrixwid * self.vmatrixhei:
- charstring = charstring[0 - self.vmatrixwid * self.vmatrixhei :]
- for i in range(0, len(charstring), self.vmatrixwid):
- for j in range(i, i + self.vmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.vmatrixori
- - self.vmatrixwid
- + j / self.vmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.vmatrixori
- + j / self.vmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.vmatrixori + j / self.vmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.vmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.vmatrixori + j / self.vmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.vmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.vmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.vmatrixori + j / self.vmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writew(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.wmatrix)
- charstring = (
- self.wmatrixwid * self.wmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.wmatrixwid * self.wmatrixhei:
- charstring = charstring[0 - self.wmatrixwid * self.wmatrixhei :]
- for i in range(0, len(charstring), self.wmatrixwid):
- for j in range(i, i + self.wmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.wmatrixori
- - self.wmatrixwid
- + j / self.wmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.wmatrixori
- + j / self.wmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.wmatrixori + j / self.wmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.wmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.wmatrixori + j / self.wmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.wmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.wmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.wmatrixori + j / self.wmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writex(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.xmatrix)
- charstring = (
- self.xmatrixwid * self.xmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.xmatrixwid * self.xmatrixhei:
- charstring = charstring[0 - self.xmatrixwid * self.xmatrixhei :]
- for i in range(0, len(charstring), self.xmatrixwid):
- for j in range(i, i + self.xmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.xmatrixori
- - self.xmatrixwid
- + j / self.xmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.xmatrixori
- + j / self.xmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.xmatrixori + j / self.xmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.xmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.xmatrixori + j / self.xmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.xmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.xmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.xmatrixori + j / self.xmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writey(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.ymatrix)
- charstring = (
- self.ymatrixwid * self.ymatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.ymatrixwid * self.ymatrixhei:
- charstring = charstring[0 - self.ymatrixwid * self.ymatrixhei :]
- for i in range(0, len(charstring), self.ymatrixwid):
- for j in range(i, i + self.ymatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.ymatrixori
- - self.ymatrixwid
- + j / self.ymatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.ymatrixori
- + j / self.ymatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.ymatrixori + j / self.ymatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.ymatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.ymatrixori + j / self.ymatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.ymatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.ymatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.ymatrixori + j / self.ymatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writez(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.zmatrix)
- charstring = (
- self.zmatrixwid * self.zmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.zmatrixwid * self.zmatrixhei:
- charstring = charstring[0 - self.zmatrixwid * self.zmatrixhei :]
- for i in range(0, len(charstring), self.zmatrixwid):
- for j in range(i, i + self.zmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.zmatrixori
- - self.zmatrixwid
- + j / self.zmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.zmatrixori
- + j / self.zmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.zmatrixori + j / self.zmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.zmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.zmatrixori + j / self.zmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.zmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.zmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.zmatrixori + j / self.zmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeA(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Amatrix)
- charstring = (
- self.Amatrixwid * self.Amatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Amatrixwid * self.Amatrixhei:
- charstring = charstring[0 - self.Amatrixwid * self.Amatrixhei :]
- for i in range(0, len(charstring), self.Amatrixwid):
- for j in range(i, i + self.Amatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Amatrixori
- - self.Amatrixwid
- + j / self.Amatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Amatrixori
- + j / self.Amatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Amatrixori + j / self.Amatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Amatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Amatrixori + j / self.Amatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Amatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Amatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Amatrixori + j / self.Amatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeB(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Bmatrix)
- charstring = (
- self.Bmatrixwid * self.Bmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Bmatrixwid * self.Bmatrixhei:
- charstring = charstring[0 - self.Bmatrixwid * self.Bmatrixhei :]
- for i in range(0, len(charstring), self.Bmatrixwid):
- for j in range(i, i + self.Bmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Bmatrixori
- - self.Bmatrixwid
- + j / self.Bmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Bmatrixori
- + j / self.Bmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Bmatrixori + j / self.Bmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Bmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Bmatrixori + j / self.Bmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Bmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Bmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Bmatrixori + j / self.Bmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeC(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Cmatrix)
- charstring = (
- self.Cmatrixwid * self.Cmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Cmatrixwid * self.Cmatrixhei:
- charstring = charstring[0 - self.Cmatrixwid * self.Cmatrixhei :]
- for i in range(0, len(charstring), self.Cmatrixwid):
- for j in range(i, i + self.Cmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Cmatrixori
- - self.Cmatrixwid
- + j / self.Cmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Cmatrixori
- + j / self.Cmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Cmatrixori + j / self.Cmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Cmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Cmatrixori + j / self.Cmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Cmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Cmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Cmatrixori + j / self.Cmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeD(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Dmatrix)
- charstring = (
- self.Dmatrixwid * self.Dmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Dmatrixwid * self.Dmatrixhei:
- charstring = charstring[0 - self.Dmatrixwid * self.Dmatrixhei :]
- for i in range(0, len(charstring), self.Dmatrixwid):
- for j in range(i, i + self.Dmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Dmatrixori
- - self.Dmatrixwid
- + j / self.Dmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Dmatrixori
- + j / self.Dmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Dmatrixori + j / self.Dmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Dmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Dmatrixori + j / self.Dmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Dmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Dmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Dmatrixori + j / self.Dmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeE(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Ematrix)
- charstring = (
- self.Ematrixwid * self.Ematrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Ematrixwid * self.Ematrixhei:
- charstring = charstring[0 - self.Ematrixwid * self.Ematrixhei :]
- for i in range(0, len(charstring), self.Ematrixwid):
- for j in range(i, i + self.Ematrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Ematrixori
- - self.Ematrixwid
- + j / self.Ematrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Ematrixori
- + j / self.Ematrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Ematrixori + j / self.Ematrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Ematrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Ematrixori + j / self.Ematrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Ematrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Ematrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Ematrixori + j / self.Ematrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeF(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Fmatrix)
- charstring = (
- self.Fmatrixwid * self.Fmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Fmatrixwid * self.Fmatrixhei:
- charstring = charstring[0 - self.Fmatrixwid * self.Fmatrixhei :]
- for i in range(0, len(charstring), self.Fmatrixwid):
- for j in range(i, i + self.Fmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Fmatrixori
- - self.Fmatrixwid
- + j / self.Fmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Fmatrixori
- + j / self.Fmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Fmatrixori + j / self.Fmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Fmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Fmatrixori + j / self.Fmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Fmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Fmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Fmatrixori + j / self.Fmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeG(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Gmatrix)
- charstring = (
- self.Gmatrixwid * self.Gmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Gmatrixwid * self.Gmatrixhei:
- charstring = charstring[0 - self.Gmatrixwid * self.Gmatrixhei :]
- for i in range(0, len(charstring), self.Gmatrixwid):
- for j in range(i, i + self.Gmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Gmatrixori
- - self.Gmatrixwid
- + j / self.Gmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Gmatrixori
- + j / self.Gmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Gmatrixori + j / self.Gmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Gmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Gmatrixori + j / self.Gmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Gmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Gmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Gmatrixori + j / self.Gmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeH(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Hmatrix)
- charstring = (
- self.Hmatrixwid * self.Hmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Hmatrixwid * self.Hmatrixhei:
- charstring = charstring[0 - self.Hmatrixwid * self.Hmatrixhei :]
- for i in range(0, len(charstring), self.Hmatrixwid):
- for j in range(i, i + self.Hmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Hmatrixori
- - self.Hmatrixwid
- + j / self.Hmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Hmatrixori
- + j / self.Hmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Hmatrixori + j / self.Hmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Hmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Hmatrixori + j / self.Hmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Hmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Hmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Hmatrixori + j / self.Hmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeI(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Imatrix)
- charstring = (
- self.Imatrixwid * self.Imatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Imatrixwid * self.Imatrixhei:
- charstring = charstring[0 - self.Imatrixwid * self.Imatrixhei :]
- for i in range(0, len(charstring), self.Imatrixwid):
- for j in range(i, i + self.Imatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Imatrixori
- - self.Imatrixwid
- + j / self.Imatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Imatrixori
- + j / self.Imatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Imatrixori + j / self.Imatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Imatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Imatrixori + j / self.Imatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Imatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Imatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Imatrixori + j / self.Imatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeJ(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Jmatrix)
- charstring = (
- self.Jmatrixwid * self.Jmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Jmatrixwid * self.Jmatrixhei:
- charstring = charstring[0 - self.Jmatrixwid * self.Jmatrixhei :]
- for i in range(0, len(charstring), self.Jmatrixwid):
- for j in range(i, i + self.Jmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Jmatrixori
- - self.Jmatrixwid
- + j / self.Jmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Jmatrixori
- + j / self.Jmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Jmatrixori + j / self.Jmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Jmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Jmatrixori + j / self.Jmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Jmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Jmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Jmatrixori + j / self.Jmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeK(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Kmatrix)
- charstring = (
- self.Kmatrixwid * self.Kmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Kmatrixwid * self.Kmatrixhei:
- charstring = charstring[0 - self.Kmatrixwid * self.Kmatrixhei :]
- for i in range(0, len(charstring), self.Kmatrixwid):
- for j in range(i, i + self.Kmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Kmatrixori
- - self.Kmatrixwid
- + j / self.Kmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Kmatrixori
- + j / self.Kmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Kmatrixori + j / self.Kmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Kmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Kmatrixori + j / self.Kmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Kmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Kmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Kmatrixori + j / self.Kmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeL(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Lmatrix)
- charstring = (
- self.Lmatrixwid * self.Lmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Lmatrixwid * self.Lmatrixhei:
- charstring = charstring[0 - self.Lmatrixwid * self.Lmatrixhei :]
- for i in range(0, len(charstring), self.Lmatrixwid):
- for j in range(i, i + self.Lmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Lmatrixori
- - self.Lmatrixwid
- + j / self.Lmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Lmatrixori
- + j / self.Lmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Lmatrixori + j / self.Lmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Lmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Lmatrixori + j / self.Lmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Lmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Lmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Lmatrixori + j / self.Lmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeM(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Mmatrix)
- charstring = (
- self.Mmatrixwid * self.Mmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Mmatrixwid * self.Mmatrixhei:
- charstring = charstring[0 - self.Mmatrixwid * self.Mmatrixhei :]
- for i in range(0, len(charstring), self.Mmatrixwid):
- for j in range(i, i + self.Mmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Mmatrixori
- - self.Mmatrixwid
- + j / self.Mmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Mmatrixori
- + j / self.Mmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Mmatrixori + j / self.Mmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Mmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Mmatrixori + j / self.Mmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Mmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Mmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Mmatrixori + j / self.Mmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeN(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Nmatrix)
- charstring = (
- self.Nmatrixwid * self.Nmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Nmatrixwid * self.Nmatrixhei:
- charstring = charstring[0 - self.Nmatrixwid * self.Nmatrixhei :]
- for i in range(0, len(charstring), self.Nmatrixwid):
- for j in range(i, i + self.Nmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Nmatrixori
- - self.Nmatrixwid
- + j / self.Nmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Nmatrixori
- + j / self.Nmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Nmatrixori + j / self.Nmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Nmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Nmatrixori + j / self.Nmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Nmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Nmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Nmatrixori + j / self.Nmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeO(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Omatrix)
- charstring = (
- self.Omatrixwid * self.Omatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Omatrixwid * self.Omatrixhei:
- charstring = charstring[0 - self.Omatrixwid * self.Omatrixhei :]
- for i in range(0, len(charstring), self.Omatrixwid):
- for j in range(i, i + self.Omatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Omatrixori
- - self.Omatrixwid
- + j / self.Omatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Omatrixori
- + j / self.Omatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Omatrixori + j / self.Omatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Omatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Omatrixori + j / self.Omatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Omatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Omatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Omatrixori + j / self.Omatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeP(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Pmatrix)
- charstring = (
- self.Pmatrixwid * self.Pmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Pmatrixwid * self.Pmatrixhei:
- charstring = charstring[0 - self.Pmatrixwid * self.Pmatrixhei :]
- for i in range(0, len(charstring), self.Pmatrixwid):
- for j in range(i, i + self.Pmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Pmatrixori
- - self.Pmatrixwid
- + j / self.Pmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Pmatrixori
- + j / self.Pmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Pmatrixori + j / self.Pmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Pmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Pmatrixori + j / self.Pmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Pmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Pmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Pmatrixori + j / self.Pmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeQ(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Qmatrix)
- charstring = (
- self.Qmatrixwid * self.Qmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Qmatrixwid * self.Qmatrixhei:
- charstring = charstring[0 - self.Qmatrixwid * self.Qmatrixhei :]
- for i in range(0, len(charstring), self.Qmatrixwid):
- for j in range(i, i + self.Qmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Qmatrixori
- - self.Qmatrixwid
- + j / self.Qmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Qmatrixori
- + j / self.Qmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Qmatrixori + j / self.Qmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Qmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Qmatrixori + j / self.Qmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Qmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Qmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Qmatrixori + j / self.Qmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeR(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Rmatrix)
- charstring = (
- self.Rmatrixwid * self.Rmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Rmatrixwid * self.Rmatrixhei:
- charstring = charstring[0 - self.Rmatrixwid * self.Rmatrixhei :]
- for i in range(0, len(charstring), self.Rmatrixwid):
- for j in range(i, i + self.Rmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Rmatrixori
- - self.Rmatrixwid
- + j / self.Rmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Rmatrixori
- + j / self.Rmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Rmatrixori + j / self.Rmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Rmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Rmatrixori + j / self.Rmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Rmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Rmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Rmatrixori + j / self.Rmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeS(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Smatrix)
- charstring = (
- self.Smatrixwid * self.Smatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Smatrixwid * self.Smatrixhei:
- charstring = charstring[0 - self.Smatrixwid * self.Smatrixhei :]
- for i in range(0, len(charstring), self.Smatrixwid):
- for j in range(i, i + self.Smatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Smatrixori
- - self.Smatrixwid
- + j / self.Smatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Smatrixori
- + j / self.Smatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Smatrixori + j / self.Smatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Smatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Smatrixori + j / self.Smatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Smatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Smatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Smatrixori + j / self.Smatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeT(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Tmatrix)
- charstring = (
- self.Tmatrixwid * self.Tmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Tmatrixwid * self.Tmatrixhei:
- charstring = charstring[0 - self.Tmatrixwid * self.Tmatrixhei :]
- for i in range(0, len(charstring), self.Tmatrixwid):
- for j in range(i, i + self.Tmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Tmatrixori
- - self.Tmatrixwid
- + j / self.Tmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Tmatrixori
- + j / self.Tmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Tmatrixori + j / self.Tmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Tmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Tmatrixori + j / self.Tmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Tmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Tmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Tmatrixori + j / self.Tmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeU(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Umatrix)
- charstring = (
- self.Umatrixwid * self.Umatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Umatrixwid * self.Umatrixhei:
- charstring = charstring[0 - self.Umatrixwid * self.Umatrixhei :]
- for i in range(0, len(charstring), self.Umatrixwid):
- for j in range(i, i + self.Umatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Umatrixori
- - self.Umatrixwid
- + j / self.Umatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Umatrixori
- + j / self.Umatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Umatrixori + j / self.Umatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Umatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Umatrixori + j / self.Umatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Umatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Umatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Umatrixori + j / self.Umatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeV(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Vmatrix)
- charstring = (
- self.Vmatrixwid * self.Vmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Vmatrixwid * self.Vmatrixhei:
- charstring = charstring[0 - self.Vmatrixwid * self.Vmatrixhei :]
- for i in range(0, len(charstring), self.Vmatrixwid):
- for j in range(i, i + self.Vmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Vmatrixori
- - self.Vmatrixwid
- + j / self.Vmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Vmatrixori
- + j / self.Vmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Vmatrixori + j / self.Vmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Vmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Vmatrixori + j / self.Vmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Vmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Vmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Vmatrixori + j / self.Vmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeW(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Wmatrix)
- charstring = (
- self.Wmatrixwid * self.Wmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Wmatrixwid * self.Wmatrixhei:
- charstring = charstring[0 - self.Wmatrixwid * self.Wmatrixhei :]
- for i in range(0, len(charstring), self.Wmatrixwid):
- for j in range(i, i + self.Wmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Wmatrixori
- - self.Wmatrixwid
- + j / self.Wmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Wmatrixori
- + j / self.Wmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Wmatrixori + j / self.Wmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Wmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Wmatrixori + j / self.Wmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Wmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Wmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Wmatrixori + j / self.Wmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeX(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Xmatrix)
- charstring = (
- self.Xmatrixwid * self.Xmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Xmatrixwid * self.Xmatrixhei:
- charstring = charstring[0 - self.Xmatrixwid * self.Xmatrixhei :]
- for i in range(0, len(charstring), self.Xmatrixwid):
- for j in range(i, i + self.Xmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Xmatrixori
- - self.Xmatrixwid
- + j / self.Xmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Xmatrixori
- + j / self.Xmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Xmatrixori + j / self.Xmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Xmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Xmatrixori + j / self.Xmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Xmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Xmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Xmatrixori + j / self.Xmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeY(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Ymatrix)
- charstring = (
- self.Ymatrixwid * self.Ymatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Ymatrixwid * self.Ymatrixhei:
- charstring = charstring[0 - self.Ymatrixwid * self.Ymatrixhei :]
- for i in range(0, len(charstring), self.Ymatrixwid):
- for j in range(i, i + self.Ymatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Ymatrixori
- - self.Ymatrixwid
- + j / self.Ymatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Ymatrixori
- + j / self.Ymatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Ymatrixori + j / self.Ymatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Ymatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Ymatrixori + j / self.Ymatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Ymatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Ymatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Ymatrixori + j / self.Ymatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeZ(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.Zmatrix)
- charstring = (
- self.Zmatrixwid * self.Zmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.Zmatrixwid * self.Zmatrixhei:
- charstring = charstring[0 - self.Zmatrixwid * self.Zmatrixhei :]
- for i in range(0, len(charstring), self.Zmatrixwid):
- for j in range(i, i + self.Zmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.Zmatrixori
- - self.Zmatrixwid
- + j / self.Zmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.Zmatrixori
- + j / self.Zmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.Zmatrixori + j / self.Zmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.Zmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.Zmatrixori + j / self.Zmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.Zmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.Zmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.Zmatrixori + j / self.Zmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeone(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.onematrix)
- charstring = (
- self.onematrixwid * self.onematrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.onematrixwid * self.onematrixhei:
- charstring = charstring[0 - self.onematrixwid * self.onematrixhei :]
- for i in range(0, len(charstring), self.onematrixwid):
- for j in range(i, i + self.onematrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.onematrixori
- - self.onematrixwid
- + j / self.onematrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.onematrixori
- + j / self.onematrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.onematrixori + j / self.onematrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.onematrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.onematrixori
- + j / self.onematrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x + int((j % self.onematrixwid) * sizeratio) - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.onematrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.onematrixori
- + j / self.onematrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writetwo(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.twomatrix)
- charstring = (
- self.twomatrixwid * self.twomatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.twomatrixwid * self.twomatrixhei:
- charstring = charstring[0 - self.twomatrixwid * self.twomatrixhei :]
- for i in range(0, len(charstring), self.twomatrixwid):
- for j in range(i, i + self.twomatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.twomatrixori
- - self.twomatrixwid
- + j / self.twomatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.twomatrixori
- + j / self.twomatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.twomatrixori + j / self.twomatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.twomatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.twomatrixori
- + j / self.twomatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x + int((j % self.twomatrixwid) * sizeratio) - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.twomatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.twomatrixori
- + j / self.twomatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writethree(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.threematrix)
- charstring = (
- self.threematrixwid * self.threematrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.threematrixwid * self.threematrixhei:
- charstring = charstring[0 - self.threematrixwid * self.threematrixhei :]
- for i in range(0, len(charstring), self.threematrixwid):
- for j in range(i, i + self.threematrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.threematrixori
- - self.threematrixwid
- + j / self.threematrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.threematrixori
- + j / self.threematrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.threematrixori + j / self.threematrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.threematrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.threematrixori
- + j / self.threematrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.threematrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.threematrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.threematrixori
- + j / self.threematrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writefour(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.fourmatrix)
- charstring = (
- self.fourmatrixwid * self.fourmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.fourmatrixwid * self.fourmatrixhei:
- charstring = charstring[0 - self.fourmatrixwid * self.fourmatrixhei :]
- for i in range(0, len(charstring), self.fourmatrixwid):
- for j in range(i, i + self.fourmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.fourmatrixori
- - self.fourmatrixwid
- + j / self.fourmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.fourmatrixori
- + j / self.fourmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.fourmatrixori + j / self.fourmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.fourmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.fourmatrixori
- + j / self.fourmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.fourmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.fourmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.fourmatrixori
- + j / self.fourmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writefive(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.fivematrix)
- charstring = (
- self.fivematrixwid * self.fivematrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.fivematrixwid * self.fivematrixhei:
- charstring = charstring[0 - self.fivematrixwid * self.fivematrixhei :]
- for i in range(0, len(charstring), self.fivematrixwid):
- for j in range(i, i + self.fivematrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.fivematrixori
- - self.fivematrixwid
- + j / self.fivematrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.fivematrixori
- + j / self.fivematrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.fivematrixori + j / self.fivematrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.fivematrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.fivematrixori
- + j / self.fivematrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.fivematrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.fivematrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.fivematrixori
- + j / self.fivematrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writesix(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.sixmatrix)
- charstring = (
- self.sixmatrixwid * self.sixmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.sixmatrixwid * self.sixmatrixhei:
- charstring = charstring[0 - self.sixmatrixwid * self.sixmatrixhei :]
- for i in range(0, len(charstring), self.sixmatrixwid):
- for j in range(i, i + self.sixmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.sixmatrixori
- - self.sixmatrixwid
- + j / self.sixmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.sixmatrixori
- + j / self.sixmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.sixmatrixori + j / self.sixmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.sixmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.sixmatrixori
- + j / self.sixmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x + int((j % self.sixmatrixwid) * sizeratio) - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.sixmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.sixmatrixori
- + j / self.sixmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writeseven(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.sevenmatrix)
- charstring = (
- self.sevenmatrixwid * self.sevenmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.sevenmatrixwid * self.sevenmatrixhei:
- charstring = charstring[0 - self.sevenmatrixwid * self.sevenmatrixhei :]
- for i in range(0, len(charstring), self.sevenmatrixwid):
- for j in range(i, i + self.sevenmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.sevenmatrixori
- - self.sevenmatrixwid
- + j / self.sevenmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.sevenmatrixori
- + j / self.sevenmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.sevenmatrixori + j / self.sevenmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.sevenmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.sevenmatrixori
- + j / self.sevenmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.sevenmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.sevenmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.sevenmatrixori
- + j / self.sevenmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writeeight(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.eightmatrix)
- charstring = (
- self.eightmatrixwid * self.eightmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.eightmatrixwid * self.eightmatrixhei:
- charstring = charstring[0 - self.eightmatrixwid * self.eightmatrixhei :]
- for i in range(0, len(charstring), self.eightmatrixwid):
- for j in range(i, i + self.eightmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.eightmatrixori
- - self.eightmatrixwid
- + j / self.eightmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.eightmatrixori
- + j / self.eightmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.eightmatrixori + j / self.eightmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.eightmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.eightmatrixori
- + j / self.eightmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.eightmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.eightmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.eightmatrixori
- + j / self.eightmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writenine(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.ninematrix)
- charstring = (
- self.ninematrixwid * self.ninematrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.ninematrixwid * self.ninematrixhei:
- charstring = charstring[0 - self.ninematrixwid * self.ninematrixhei :]
- for i in range(0, len(charstring), self.ninematrixwid):
- for j in range(i, i + self.ninematrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.ninematrixori
- - self.ninematrixwid
- + j / self.ninematrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.ninematrixori
- + j / self.ninematrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.ninematrixori + j / self.ninematrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.ninematrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.ninematrixori
- + j / self.ninematrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.ninematrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.ninematrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.ninematrixori
- + j / self.ninematrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writeten(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.tenmatrix)
- charstring = (
- self.tenmatrixwid * self.tenmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.tenmatrixwid * self.tenmatrixhei:
- charstring = charstring[0 - self.tenmatrixwid * self.tenmatrixhei :]
- for i in range(0, len(charstring), self.tenmatrixwid):
- for j in range(i, i + self.tenmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.tenmatrixori
- - self.tenmatrixwid
- + j / self.tenmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.tenmatrixori
- + j / self.tenmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.tenmatrixori + j / self.tenmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.tenmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.tenmatrixori
- + j / self.tenmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x + int((j % self.tenmatrixwid) * sizeratio) - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.tenmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.tenmatrixori
- + j / self.tenmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def write_(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self._matrix)
- charstring = (
- self._matrixwid * self._matrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self._matrixwid * self._matrixhei:
- charstring = charstring[0 - self._matrixwid * self._matrixhei :]
- for i in range(0, len(charstring), self._matrixwid):
- for j in range(i, i + self._matrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self._matrixori
- - self._matrixwid
- + j / self._matrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self._matrixori
- + j / self._matrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self._matrixori + j / self._matrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self._matrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self._matrixori + j / self._matrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self._matrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self._matrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self._matrixori + j / self._matrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writeminus(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.minusmatrix)
- charstring = (
- self.minusmatrixwid * self.minusmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.minusmatrixwid * self.minusmatrixhei:
- charstring = charstring[0 - self.minusmatrixwid * self.minusmatrixhei :]
- for i in range(0, len(charstring), self.minusmatrixwid):
- for j in range(i, i + self.minusmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.minusmatrixori
- - self.minusmatrixwid
- + j / self.minusmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.minusmatrixori
- + j / self.minusmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.minusmatrixori + j / self.minusmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.minusmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.minusmatrixori
- + j / self.minusmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.minusmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.minusmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.minusmatrixori
- + j / self.minusmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writeplus(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.plusmatrix)
- charstring = (
- self.plusmatrixwid * self.plusmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.plusmatrixwid * self.plusmatrixhei:
- charstring = charstring[0 - self.plusmatrixwid * self.plusmatrixhei :]
- for i in range(0, len(charstring), self.plusmatrixwid):
- for j in range(i, i + self.plusmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.plusmatrixori
- - self.plusmatrixwid
- + j / self.plusmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.plusmatrixori
- + j / self.plusmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.plusmatrixori + j / self.plusmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.plusmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.plusmatrixori
- + j / self.plusmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.plusmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.plusmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.plusmatrixori
- + j / self.plusmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writeequal(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.equalmatrix)
- charstring = (
- self.equalmatrixwid * self.equalmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.equalmatrixwid * self.equalmatrixhei:
- charstring = charstring[0 - self.equalmatrixwid * self.equalmatrixhei :]
- for i in range(0, len(charstring), self.equalmatrixwid):
- for j in range(i, i + self.equalmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.equalmatrixori
- - self.equalmatrixwid
- + j / self.equalmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.equalmatrixori
- + j / self.equalmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.equalmatrixori + j / self.equalmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.equalmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.equalmatrixori
- + j / self.equalmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.equalmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.equalmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.equalmatrixori
- + j / self.equalmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writeexcl(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.exclmatrix)
- charstring = (
- self.exclmatrixwid * self.exclmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.exclmatrixwid * self.exclmatrixhei:
- charstring = charstring[0 - self.exclmatrixwid * self.exclmatrixhei :]
- for i in range(0, len(charstring), self.exclmatrixwid):
- for j in range(i, i + self.exclmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.exclmatrixori
- - self.exclmatrixwid
- + j / self.exclmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.exclmatrixori
- + j / self.exclmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.exclmatrixori + j / self.exclmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.exclmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.exclmatrixori
- + j / self.exclmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.exclmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.exclmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.exclmatrixori
- + j / self.exclmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writeat(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.atmatrix)
- charstring = (
- self.atmatrixwid * self.atmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.atmatrixwid * self.atmatrixhei:
- charstring = charstring[0 - self.atmatrixwid * self.atmatrixhei :]
- for i in range(0, len(charstring), self.atmatrixwid):
- for j in range(i, i + self.atmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.atmatrixori
- - self.atmatrixwid
- + j / self.atmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.atmatrixori
- + j / self.atmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.atmatrixori + j / self.atmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.atmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (self.atmatrixori + j / self.atmatrixwid)
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (x + int((j % self.atmatrixwid) * sizeratio) - k),
- )
- else:
- self.plotPoint(
- x + int((j % self.atmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (self.atmatrixori + j / self.atmatrixwid)
- )
- * sizeratio
- )
- - l,
- )
-
- def writehash(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.hashmatrix)
- charstring = (
- self.hashmatrixwid * self.hashmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.hashmatrixwid * self.hashmatrixhei:
- charstring = charstring[0 - self.hashmatrixwid * self.hashmatrixhei :]
- for i in range(0, len(charstring), self.hashmatrixwid):
- for j in range(i, i + self.hashmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.hashmatrixori
- - self.hashmatrixwid
- + j / self.hashmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.hashmatrixori
- + j / self.hashmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.hashmatrixori + j / self.hashmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.hashmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.hashmatrixori
- + j / self.hashmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.hashmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.hashmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.hashmatrixori
- + j / self.hashmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writedollar(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.dollarmatrix)
- charstring = (
- self.dollarmatrixwid * self.dollarmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.dollarmatrixwid * self.dollarmatrixhei:
- charstring = charstring[0 - self.dollarmatrixwid * self.dollarmatrixhei :]
- for i in range(0, len(charstring), self.dollarmatrixwid):
- for j in range(i, i + self.dollarmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.dollarmatrixori
- - self.dollarmatrixwid
- + j / self.dollarmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.dollarmatrixori
- + j / self.dollarmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (
- self.dollarmatrixori
- + j / self.dollarmatrixwid
- )
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.dollarmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.dollarmatrixori
- + j / self.dollarmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.dollarmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.dollarmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.dollarmatrixori
- + j / self.dollarmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writepercent(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.percentmatrix)
- charstring = (
- self.percentmatrixwid * self.percentmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.percentmatrixwid * self.percentmatrixhei:
- charstring = charstring[0 - self.percentmatrixwid * self.percentmatrixhei :]
- for i in range(0, len(charstring), self.percentmatrixwid):
- for j in range(i, i + self.percentmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.percentmatrixori
- - self.percentmatrixwid
- + j / self.percentmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.percentmatrixori
- + j / self.percentmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (
- self.percentmatrixori
- + j / self.percentmatrixwid
- )
- * sizeratio
- )
- - l
- - self.defsize,
- x
- + int((j % self.percentmatrixwid) * sizeratio)
- - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.percentmatrixori
- + j / self.percentmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.percentmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x
- + int((j % self.percentmatrixwid) * sizeratio)
- - k,
- y
- + int(
- (
- self.defsize
- - (
- self.percentmatrixori
- + j / self.percentmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writehat(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.hatmatrix)
- charstring = (
- self.hatmatrixwid * self.hatmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.hatmatrixwid * self.hatmatrixhei:
- charstring = charstring[0 - self.hatmatrixwid * self.hatmatrixhei :]
- for i in range(0, len(charstring), self.hatmatrixwid):
- for j in range(i, i + self.hatmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.hatmatrixori
- - self.hatmatrixwid
- + j / self.hatmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.hatmatrixori
- + j / self.hatmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.hatmatrixori + j / self.hatmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.hatmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.hatmatrixori
- + j / self.hatmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x + int((j % self.hatmatrixwid) * sizeratio) - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.hatmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.hatmatrixori
- + j / self.hatmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writeamp(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.ampmatrix)
- charstring = (
- self.ampmatrixwid * self.ampmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.ampmatrixwid * self.ampmatrixhei:
- charstring = charstring[0 - self.ampmatrixwid * self.ampmatrixhei :]
- for i in range(0, len(charstring), self.ampmatrixwid):
- for j in range(i, i + self.ampmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.ampmatrixori
- - self.ampmatrixwid
- + j / self.ampmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.ampmatrixori
- + j / self.ampmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.ampmatrixori + j / self.ampmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.ampmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.ampmatrixori
- + j / self.ampmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x + int((j % self.ampmatrixwid) * sizeratio) - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.ampmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.ampmatrixori
- + j / self.ampmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writestrix(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.strixmatrix)
- charstring = (
- self.strixmatrixwid * self.strixmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.strixmatrixwid * self.strixmatrixhei:
- charstring = charstring[0 - self.strixmatrixwid * self.strixmatrixhei :]
- for i in range(0, len(charstring), self.strixmatrixwid):
- for j in range(i, i + self.strixmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.strixmatrixori
- - self.strixmatrixwid
- + j / self.strixmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.strixmatrixori
- + j / self.strixmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.strixmatrixori + j / self.strixmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.strixmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.strixmatrixori
- + j / self.strixmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.strixmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.strixmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.strixmatrixori
- + j / self.strixmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writeopencpar(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.opencparmatrix)
- charstring = (
- self.opencparmatrixwid * self.opencparmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.opencparmatrixwid * self.opencparmatrixhei:
- charstring = charstring[
- 0 - self.opencparmatrixwid * self.opencparmatrixhei :
- ]
- for i in range(0, len(charstring), self.opencparmatrixwid):
- for j in range(i, i + self.opencparmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.opencparmatrixori
- - self.opencparmatrixwid
- + j / self.opencparmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.opencparmatrixori
- + j / self.opencparmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (
- self.opencparmatrixori
- + j / self.opencparmatrixwid
- )
- * sizeratio
- )
- - l
- - self.defsize,
- x
- + int((j % self.opencparmatrixwid) * sizeratio)
- - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.opencparmatrixori
- + j / self.opencparmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.opencparmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x
- + int((j % self.opencparmatrixwid) * sizeratio)
- - k,
- y
- + int(
- (
- self.defsize
- - (
- self.opencparmatrixori
- + j / self.opencparmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writeclosecpar(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.closecparmatrix)
- charstring = (
- self.closecparmatrixwid * self.closecparmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.closecparmatrixwid * self.closecparmatrixhei:
- charstring = charstring[
- 0 - self.closecparmatrixwid * self.closecparmatrixhei :
- ]
- for i in range(0, len(charstring), self.closecparmatrixwid):
- for j in range(i, i + self.closecparmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.closecparmatrixori
- - self.closecparmatrixwid
- + j / self.closecparmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.closecparmatrixori
- + j / self.closecparmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (
- self.closecparmatrixori
- + j / self.closecparmatrixwid
- )
- * sizeratio
- )
- - l
- - self.defsize,
- x
- + int((j % self.closecparmatrixwid) * sizeratio)
- - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.closecparmatrixori
- + j / self.closecparmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.closecparmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x
- + int((j % self.closecparmatrixwid) * sizeratio)
- - k,
- y
- + int(
- (
- self.defsize
- - (
- self.closecparmatrixori
- + j / self.closecparmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writeopenspar(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.opensparmatrix)
- charstring = (
- self.opensparmatrixwid * self.opensparmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.opensparmatrixwid * self.opensparmatrixhei:
- charstring = charstring[
- 0 - self.opensparmatrixwid * self.opensparmatrixhei :
- ]
- for i in range(0, len(charstring), self.opensparmatrixwid):
- for j in range(i, i + self.opensparmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.opensparmatrixori
- - self.opensparmatrixwid
- + j / self.opensparmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.opensparmatrixori
- + j / self.opensparmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (
- self.opensparmatrixori
- + j / self.opensparmatrixwid
- )
- * sizeratio
- )
- - l
- - self.defsize,
- x
- + int((j % self.opensparmatrixwid) * sizeratio)
- - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.opensparmatrixori
- + j / self.opensparmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.opensparmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x
- + int((j % self.opensparmatrixwid) * sizeratio)
- - k,
- y
- + int(
- (
- self.defsize
- - (
- self.opensparmatrixori
- + j / self.opensparmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writeclosespar(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.closesparmatrix)
- charstring = (
- self.closesparmatrixwid * self.closesparmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.closesparmatrixwid * self.closesparmatrixhei:
- charstring = charstring[
- 0 - self.closesparmatrixwid * self.closesparmatrixhei :
- ]
- for i in range(0, len(charstring), self.closesparmatrixwid):
- for j in range(i, i + self.closesparmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.closesparmatrixori
- - self.closesparmatrixwid
- + j / self.closesparmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.closesparmatrixori
- + j / self.closesparmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (
- self.closesparmatrixori
- + j / self.closesparmatrixwid
- )
- * sizeratio
- )
- - l
- - self.defsize,
- x
- + int((j % self.closesparmatrixwid) * sizeratio)
- - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.closesparmatrixori
- + j / self.closesparmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.closesparmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x
- + int((j % self.closesparmatrixwid) * sizeratio)
- - k,
- y
- + int(
- (
- self.defsize
- - (
- self.closesparmatrixori
- + j / self.closesparmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writebackslash(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.backslashmatrix)
- charstring = (
- self.backslashmatrixwid * self.backslashmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.backslashmatrixwid * self.backslashmatrixhei:
- charstring = charstring[
- 0 - self.backslashmatrixwid * self.backslashmatrixhei :
- ]
- for i in range(0, len(charstring), self.backslashmatrixwid):
- for j in range(i, i + self.backslashmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.backslashmatrixori
- - self.backslashmatrixwid
- + j / self.backslashmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.backslashmatrixori
- + j / self.backslashmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (
- self.backslashmatrixori
- + j / self.backslashmatrixwid
- )
- * sizeratio
- )
- - l
- - self.defsize,
- x
- + int((j % self.backslashmatrixwid) * sizeratio)
- - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.backslashmatrixori
- + j / self.backslashmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.backslashmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x
- + int((j % self.backslashmatrixwid) * sizeratio)
- - k,
- y
- + int(
- (
- self.defsize
- - (
- self.backslashmatrixori
- + j / self.backslashmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writesemicol(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.semicolmatrix)
- charstring = (
- self.semicolmatrixwid * self.semicolmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.semicolmatrixwid * self.semicolmatrixhei:
- charstring = charstring[0 - self.semicolmatrixwid * self.semicolmatrixhei :]
- for i in range(0, len(charstring), self.semicolmatrixwid):
- for j in range(i, i + self.semicolmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.semicolmatrixori
- - self.semicolmatrixwid
- + j / self.semicolmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.semicolmatrixori
- + j / self.semicolmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (
- self.semicolmatrixori
- + j / self.semicolmatrixwid
- )
- * sizeratio
- )
- - l
- - self.defsize,
- x
- + int((j % self.semicolmatrixwid) * sizeratio)
- - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.semicolmatrixori
- + j / self.semicolmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.semicolmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x
- + int((j % self.semicolmatrixwid) * sizeratio)
- - k,
- y
- + int(
- (
- self.defsize
- - (
- self.semicolmatrixori
- + j / self.semicolmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writepost(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.postmatrix)
- charstring = (
- self.postmatrixwid * self.postmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.postmatrixwid * self.postmatrixhei:
- charstring = charstring[0 - self.postmatrixwid * self.postmatrixhei :]
- for i in range(0, len(charstring), self.postmatrixwid):
- for j in range(i, i + self.postmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.postmatrixori
- - self.postmatrixwid
- + j / self.postmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.postmatrixori
- + j / self.postmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.postmatrixori + j / self.postmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.postmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.postmatrixori
- + j / self.postmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.postmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.postmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.postmatrixori
- + j / self.postmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writecomma(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.commamatrix)
- charstring = (
- self.commamatrixwid * self.commamatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.commamatrixwid * self.commamatrixhei:
- charstring = charstring[0 - self.commamatrixwid * self.commamatrixhei :]
- for i in range(0, len(charstring), self.commamatrixwid):
- for j in range(i, i + self.commamatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.commamatrixori
- - self.commamatrixwid
- + j / self.commamatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.commamatrixori
- + j / self.commamatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.commamatrixori + j / self.commamatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.commamatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.commamatrixori
- + j / self.commamatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.commamatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.commamatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.commamatrixori
- + j / self.commamatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writefullstop(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.fullstopmatrix)
- charstring = (
- self.fullstopmatrixwid * self.fullstopmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.fullstopmatrixwid * self.fullstopmatrixhei:
- charstring = charstring[
- 0 - self.fullstopmatrixwid * self.fullstopmatrixhei :
- ]
- for i in range(0, len(charstring), self.fullstopmatrixwid):
- for j in range(i, i + self.fullstopmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.fullstopmatrixori
- - self.fullstopmatrixwid
- + j / self.fullstopmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.fullstopmatrixori
- + j / self.fullstopmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (
- self.fullstopmatrixori
- + j / self.fullstopmatrixwid
- )
- * sizeratio
- )
- - l
- - self.defsize,
- x
- + int((j % self.fullstopmatrixwid) * sizeratio)
- - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.fullstopmatrixori
- + j / self.fullstopmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.fullstopmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x
- + int((j % self.fullstopmatrixwid) * sizeratio)
- - k,
- y
- + int(
- (
- self.defsize
- - (
- self.fullstopmatrixori
- + j / self.fullstopmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writeforslash(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.forslashmatrix)
- charstring = (
- self.forslashmatrixwid * self.forslashmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.forslashmatrixwid * self.forslashmatrixhei:
- charstring = charstring[
- 0 - self.forslashmatrixwid * self.forslashmatrixhei :
- ]
- for i in range(0, len(charstring), self.forslashmatrixwid):
- for j in range(i, i + self.forslashmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.forslashmatrixori
- - self.forslashmatrixwid
- + j / self.forslashmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.forslashmatrixori
- + j / self.forslashmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (
- self.forslashmatrixori
- + j / self.forslashmatrixwid
- )
- * sizeratio
- )
- - l
- - self.defsize,
- x
- + int((j % self.forslashmatrixwid) * sizeratio)
- - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.forslashmatrixori
- + j / self.forslashmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.forslashmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x
- + int((j % self.forslashmatrixwid) * sizeratio)
- - k,
- y
- + int(
- (
- self.defsize
- - (
- self.forslashmatrixori
- + j / self.forslashmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writelesthan(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.lesthanmatrix)
- charstring = (
- self.lesthanmatrixwid * self.lesthanmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.lesthanmatrixwid * self.lesthanmatrixhei:
- charstring = charstring[0 - self.lesthanmatrixwid * self.lesthanmatrixhei :]
- for i in range(0, len(charstring), self.lesthanmatrixwid):
- for j in range(i, i + self.lesthanmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.lesthanmatrixori
- - self.lesthanmatrixwid
- + j / self.lesthanmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.lesthanmatrixori
- + j / self.lesthanmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (
- self.lesthanmatrixori
- + j / self.lesthanmatrixwid
- )
- * sizeratio
- )
- - l
- - self.defsize,
- x
- + int((j % self.lesthanmatrixwid) * sizeratio)
- - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.lesthanmatrixori
- + j / self.lesthanmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.lesthanmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x
- + int((j % self.lesthanmatrixwid) * sizeratio)
- - k,
- y
- + int(
- (
- self.defsize
- - (
- self.lesthanmatrixori
- + j / self.lesthanmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writegreatthan(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.greatthanmatrix)
- charstring = (
- self.greatthanmatrixwid * self.greatthanmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.greatthanmatrixwid * self.greatthanmatrixhei:
- charstring = charstring[
- 0 - self.greatthanmatrixwid * self.greatthanmatrixhei :
- ]
- for i in range(0, len(charstring), self.greatthanmatrixwid):
- for j in range(i, i + self.greatthanmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.greatthanmatrixori
- - self.greatthanmatrixwid
- + j / self.greatthanmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.greatthanmatrixori
- + j / self.greatthanmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (
- self.greatthanmatrixori
- + j / self.greatthanmatrixwid
- )
- * sizeratio
- )
- - l
- - self.defsize,
- x
- + int((j % self.greatthanmatrixwid) * sizeratio)
- - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.greatthanmatrixori
- + j / self.greatthanmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.greatthanmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x
- + int((j % self.greatthanmatrixwid) * sizeratio)
- - k,
- y
- + int(
- (
- self.defsize
- - (
- self.greatthanmatrixori
- + j / self.greatthanmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writequestion(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.questionmatrix)
- charstring = (
- self.questionmatrixwid * self.questionmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.questionmatrixwid * self.questionmatrixhei:
- charstring = charstring[
- 0 - self.questionmatrixwid * self.questionmatrixhei :
- ]
- for i in range(0, len(charstring), self.questionmatrixwid):
- for j in range(i, i + self.questionmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.questionmatrixori
- - self.questionmatrixwid
- + j / self.questionmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.questionmatrixori
- + j / self.questionmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (
- self.questionmatrixori
- + j / self.questionmatrixwid
- )
- * sizeratio
- )
- - l
- - self.defsize,
- x
- + int((j % self.questionmatrixwid) * sizeratio)
- - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.questionmatrixori
- + j / self.questionmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.questionmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x
- + int((j % self.questionmatrixwid) * sizeratio)
- - k,
- y
- + int(
- (
- self.defsize
- - (
- self.questionmatrixori
- + j / self.questionmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writecolon(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.colonmatrix)
- charstring = (
- self.colonmatrixwid * self.colonmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.colonmatrixwid * self.colonmatrixhei:
- charstring = charstring[0 - self.colonmatrixwid * self.colonmatrixhei :]
- for i in range(0, len(charstring), self.colonmatrixwid):
- for j in range(i, i + self.colonmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.colonmatrixori
- - self.colonmatrixwid
- + j / self.colonmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.colonmatrixori
- + j / self.colonmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.colonmatrixori + j / self.colonmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.colonmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.colonmatrixori
- + j / self.colonmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.colonmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.colonmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.colonmatrixori
- + j / self.colonmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writequote(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.quotematrix)
- charstring = (
- self.quotematrixwid * self.quotematrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.quotematrixwid * self.quotematrixhei:
- charstring = charstring[0 - self.quotematrixwid * self.quotematrixhei :]
- for i in range(0, len(charstring), self.quotematrixwid):
- for j in range(i, i + self.quotematrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.quotematrixori
- - self.quotematrixwid
- + j / self.quotematrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.quotematrixori
- + j / self.quotematrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.quotematrixori + j / self.quotematrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.quotematrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.quotematrixori
- + j / self.quotematrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.quotematrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.quotematrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.quotematrixori
- + j / self.quotematrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writeopensquig(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.opensquigmatrix)
- charstring = (
- self.opensquigmatrixwid * self.opensquigmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.opensquigmatrixwid * self.opensquigmatrixhei:
- charstring = charstring[
- 0 - self.opensquigmatrixwid * self.opensquigmatrixhei :
- ]
- for i in range(0, len(charstring), self.opensquigmatrixwid):
- for j in range(i, i + self.opensquigmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.opensquigmatrixori
- - self.opensquigmatrixwid
- + j / self.opensquigmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.opensquigmatrixori
- + j / self.opensquigmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (
- self.opensquigmatrixori
- + j / self.opensquigmatrixwid
- )
- * sizeratio
- )
- - l
- - self.defsize,
- x
- + int((j % self.opensquigmatrixwid) * sizeratio)
- - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.opensquigmatrixori
- + j / self.opensquigmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.opensquigmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x
- + int((j % self.opensquigmatrixwid) * sizeratio)
- - k,
- y
- + int(
- (
- self.defsize
- - (
- self.opensquigmatrixori
- + j / self.opensquigmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writeclosesquig(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.closesquigmatrix)
- charstring = (
- self.closesquigmatrixwid * self.closesquigmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.closesquigmatrixwid * self.closesquigmatrixhei:
- charstring = charstring[
- 0 - self.closesquigmatrixwid * self.closesquigmatrixhei :
- ]
- for i in range(0, len(charstring), self.closesquigmatrixwid):
- for j in range(i, i + self.closesquigmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.closesquigmatrixori
- - self.closesquigmatrixwid
- + j / self.closesquigmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.closesquigmatrixori
- + j / self.closesquigmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (
- self.closesquigmatrixori
- + j / self.closesquigmatrixwid
- )
- * sizeratio
- )
- - l
- - self.defsize,
- x
- + int((j % self.closesquigmatrixwid) * sizeratio)
- - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.closesquigmatrixori
- + j / self.closesquigmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int(
- (j % self.closesquigmatrixwid) * sizeratio
- )
- - k
- ),
- )
- else:
- self.plotPoint(
- x
- + int((j % self.closesquigmatrixwid) * sizeratio)
- - k,
- y
- + int(
- (
- self.defsize
- - (
- self.closesquigmatrixori
- + j / self.closesquigmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writebar(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.barmatrix)
- charstring = (
- self.barmatrixwid * self.barmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.barmatrixwid * self.barmatrixhei:
- charstring = charstring[0 - self.barmatrixwid * self.barmatrixhei :]
- for i in range(0, len(charstring), self.barmatrixwid):
- for j in range(i, i + self.barmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.barmatrixori
- - self.barmatrixwid
- + j / self.barmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.barmatrixori
- + j / self.barmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.barmatrixori + j / self.barmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.barmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.barmatrixori
- + j / self.barmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x + int((j % self.barmatrixwid) * sizeratio) - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.barmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.barmatrixori
- + j / self.barmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writemisc(self, x, y, size, ital, bold, sans, rotate):
- xpos = x
- sizeratio = size * 1.0 / self.defsize
- sizeint = (size - 1) / self.defsize + 1
- if bold:
- sizeint = sizeint + 2 + int(sizeratio)
- charstring = binar(self.miscmatrix)
- charstring = (
- self.miscmatrixwid * self.miscmatrixhei - len(charstring)
- ) * "0" + charstring
- if len(charstring) > self.miscmatrixwid * self.miscmatrixhei:
- charstring = charstring[0 - self.miscmatrixwid * self.miscmatrixhei :]
- for i in range(0, len(charstring), self.miscmatrixwid):
- for j in range(i, i + self.miscmatrixwid):
- if charstring[j] == "1":
- for k in range(sizeint):
- for l in range(sizeint):
- if ital and rotate == -1:
- x = (
- xpos
- + (
- int(
- (
- (
- self.miscmatrixori
- - self.miscmatrixwid
- + j / self.miscmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- elif ital:
- x = (
- xpos
- + (
- int(
- (
- self.defsize
- - (
- self.miscmatrixori
- + j / self.miscmatrixwid
- )
- )
- * sizeratio
- )
- - l
- )
- / 3
- )
- if rotate == 1:
- self.plotPoint(
- y
- + int(
- (self.miscmatrixori + j / self.miscmatrixwid)
- * sizeratio
- )
- - l
- - self.defsize,
- x + int((j % self.miscmatrixwid) * sizeratio) - k,
- )
- elif rotate == -1:
- self.plotPoint(
- y
- + int(
- (
- self.defsize
- - (
- self.miscmatrixori
- + j / self.miscmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- 2 * x
- - (
- x
- + int((j % self.miscmatrixwid) * sizeratio)
- - k
- ),
- )
- else:
- self.plotPoint(
- x + int((j % self.miscmatrixwid) * sizeratio) - k,
- y
- + int(
- (
- self.defsize
- - (
- self.miscmatrixori
- + j / self.miscmatrixwid
- )
- )
- * sizeratio
- )
- - l,
- )
-
- def writeString(
- self, thestring, x, y, size, ital=False, bold=False, rotate=0, justify="left"
- ):
- xpos = x
- if rotate != 0:
- xpos, y = y, xpos
- if justify == "right":
- xpos -= self.lengthString(thestring, size)
- for i in thestring:
- if i == "a":
- self.writea(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.amatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.amatrixwid * size / self.defsize + 1 + size / 20
- elif i == "b":
- self.writeb(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.bmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.bmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "c":
- self.writec(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.cmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.cmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "d":
- self.writed(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.dmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.dmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "e":
- self.writee(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.ematrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.ematrixwid * size / self.defsize + 1 + size / 20
- elif i == "f":
- self.writef(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.fmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.fmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "g":
- self.writeg(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.gmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.gmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "h":
- self.writeh(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.hmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.hmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "i":
- self.writei(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.imatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.imatrixwid * size / self.defsize + 1 + size / 20
- elif i == "j":
- self.writej(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.jmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.jmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "k":
- self.writek(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.kmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.kmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "l":
- self.writel(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.lmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.lmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "m":
- self.writem(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.mmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.mmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "n":
- self.writen(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.nmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.nmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "o":
- self.writeo(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.omatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.omatrixwid * size / self.defsize + 1 + size / 20
- elif i == "p":
- self.writep(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.pmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.pmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "q":
- self.writeq(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.qmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.qmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "r":
- self.writer(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.rmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.rmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "s":
- self.writes(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.smatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.smatrixwid * size / self.defsize + 1 + size / 20
- elif i == "t":
- self.writet(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.tmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.tmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "u":
- self.writeu(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.umatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.umatrixwid * size / self.defsize + 1 + size / 20
- elif i == "v":
- self.writev(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.vmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.vmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "w":
- self.writew(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.wmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.wmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "x":
- self.writex(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.xmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.xmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "y":
- self.writey(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.ymatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.ymatrixwid * size / self.defsize + 1 + size / 20
- elif i == "z":
- self.writez(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.zmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.zmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "A":
- self.writeA(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Amatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Amatrixwid * size / self.defsize + 1 + size / 20
- elif i == "B":
- self.writeB(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Bmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Bmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "C":
- self.writeC(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Cmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Cmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "D":
- self.writeD(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Dmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Dmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "E":
- self.writeE(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Ematrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Ematrixwid * size / self.defsize + 1 + size / 20
- elif i == "F":
- self.writeF(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Fmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Fmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "G":
- self.writeG(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Gmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Gmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "H":
- self.writeH(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Hmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Hmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "I":
- self.writeI(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Imatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Imatrixwid * size / self.defsize + 1 + size / 20
- elif i == "J":
- self.writeJ(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Jmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Jmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "K":
- self.writeK(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Kmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Kmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "L":
- self.writeL(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Lmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Lmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "M":
- self.writeM(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Mmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Mmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "N":
- self.writeN(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Nmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Nmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "O":
- self.writeO(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Omatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Omatrixwid * size / self.defsize + 1 + size / 20
- elif i == "P":
- self.writeP(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Pmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Pmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "Q":
- self.writeQ(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Qmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Qmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "R":
- self.writeR(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Rmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Rmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "S":
- self.writeS(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Smatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Smatrixwid * size / self.defsize + 1 + size / 20
- elif i == "T":
- self.writeT(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Tmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Tmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "U":
- self.writeU(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Umatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Umatrixwid * size / self.defsize + 1 + size / 20
- elif i == "V":
- self.writeV(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Vmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Vmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "W":
- self.writeW(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Wmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Wmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "X":
- self.writeX(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Xmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Xmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "Y":
- self.writeY(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Ymatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Ymatrixwid * size / self.defsize + 1 + size / 20
- elif i == "Z":
- self.writeZ(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.Zmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.Zmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "1":
- self.writeone(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.onematrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.onematrixwid * size / self.defsize + 1 + size / 20
- elif i == "2":
- self.writetwo(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.twomatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.twomatrixwid * size / self.defsize + 1 + size / 20
- elif i == "3":
- self.writethree(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.threematrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.threematrixwid * size / self.defsize + 1 + size / 20
- elif i == "4":
- self.writefour(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.fourmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.fourmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "5":
- self.writefive(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.fivematrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.fivematrixwid * size / self.defsize + 1 + size / 20
- elif i == "6":
- self.writesix(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.sixmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.sixmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "7":
- self.writeseven(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.sevenmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.sevenmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "8":
- self.writeeight(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.eightmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.eightmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "9":
- self.writenine(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.ninematrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.ninematrixwid * size / self.defsize + 1 + size / 20
- elif i == "0":
- self.writeten(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.tenmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.tenmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "_":
- self.write_(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self._matrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self._matrixwid * size / self.defsize + 1 + size / 20
- elif i == "-":
- self.writeminus(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.minusmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.minusmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "+":
- self.writeplus(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.plusmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.plusmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "=":
- self.writeequal(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.equalmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.equalmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "!":
- self.writeexcl(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.exclmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.exclmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "@":
- self.writeat(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.atmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.atmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "#":
- self.writehash(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.hashmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.hashmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "$":
- self.writedollar(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.dollarmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.dollarmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "%":
- self.writepercent(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.percentmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.percentmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "^":
- self.writehat(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.hatmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.hatmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "&":
- self.writeamp(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.ampmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.ampmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "*":
- self.writestrix(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.strixmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.strixmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "(":
- self.writeopencpar(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.opencparmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.opencparmatrixwid * size / self.defsize + 1 + size / 20
- elif i == ")":
- self.writeclosecpar(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= (
- self.closecparmatrixwid * size / self.defsize + 1 + size / 20
- )
- else:
- xpos += (
- self.closecparmatrixwid * size / self.defsize + 1 + size / 20
- )
- elif i == "[":
- self.writeopenspar(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.opensparmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.opensparmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "]":
- self.writeclosespar(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= (
- self.closesparmatrixwid * size / self.defsize + 1 + size / 20
- )
- else:
- xpos += (
- self.closesparmatrixwid * size / self.defsize + 1 + size / 20
- )
- elif i == "\\":
- self.writebackslash(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= (
- self.backslashmatrixwid * size / self.defsize + 1 + size / 20
- )
- else:
- xpos += (
- self.backslashmatrixwid * size / self.defsize + 1 + size / 20
- )
- elif i == ";":
- self.writesemicol(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.semicolmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.semicolmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "'":
- self.writepost(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.postmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.postmatrixwid * size / self.defsize + 1 + size / 20
- elif i == ",":
- self.writecomma(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.commamatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.commamatrixwid * size / self.defsize + 1 + size / 20
- elif i == ".":
- self.writefullstop(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.fullstopmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.fullstopmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "/":
- self.writeforslash(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.forslashmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.forslashmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "<":
- self.writelesthan(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.lesthanmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.lesthanmatrixwid * size / self.defsize + 1 + size / 20
- elif i == ">":
- self.writegreatthan(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= (
- self.greatthanmatrixwid * size / self.defsize + 1 + size / 20
- )
- else:
- xpos += (
- self.greatthanmatrixwid * size / self.defsize + 1 + size / 20
- )
- elif i == "?":
- self.writequestion(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.questionmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.questionmatrixwid * size / self.defsize + 1 + size / 20
- elif i == ":":
- self.writecolon(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.colonmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.colonmatrixwid * size / self.defsize + 1 + size / 20
- elif i == '"':
- self.writequote(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.quotematrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.quotematrixwid * size / self.defsize + 1 + size / 20
- elif i == "{":
- self.writeopensquig(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= (
- self.opensquigmatrixwid * size / self.defsize + 1 + size / 20
- )
- else:
- xpos += (
- self.opensquigmatrixwid * size / self.defsize + 1 + size / 20
- )
- elif i == "}":
- self.writeclosesquig(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= (
- self.closesquigmatrixwid * size / self.defsize + 1 + size / 20
- )
- else:
- xpos += (
- self.closesquigmatrixwid * size / self.defsize + 1 + size / 20
- )
- elif i == "|":
- self.writebar(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.barmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.barmatrixwid * size / self.defsize + 1 + size / 20
- elif i == " ":
- if rotate == -1:
- xpos -= 24 * size / self.defsize + 1 + size / 20
- else:
- xpos += 24 * size / self.defsize + 1 + size / 20
- else:
- self.writemisc(xpos, y, size, ital, bold, True, rotate)
- if rotate == -1:
- xpos -= self.miscmatrixwid * size / self.defsize + 1 + size / 20
- else:
- xpos += self.miscmatrixwid * size / self.defsize + 1 + size / 20
-
- def lengthString(self, theString, size):
- xpos = 0
- for i in theString:
- if i == "a":
- xpos += self.amatrixwid * size / self.defsize + 1 + size / 20
- elif i == "b":
- xpos += self.bmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "c":
- xpos += self.cmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "d":
- xpos += self.dmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "e":
- xpos += self.ematrixwid * size / self.defsize + 1 + size / 20
- elif i == "f":
- xpos += self.fmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "g":
- xpos += self.gmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "h":
- xpos += self.hmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "i":
- xpos += self.imatrixwid * size / self.defsize + 1 + size / 20
- elif i == "j":
- xpos += self.jmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "k":
- xpos += self.kmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "l":
- xpos += self.lmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "m":
- xpos += self.mmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "n":
- xpos += self.nmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "o":
- xpos += self.omatrixwid * size / self.defsize + 1 + size / 20
- elif i == "p":
- xpos += self.pmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "q":
- xpos += self.qmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "r":
- xpos += self.rmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "s":
- xpos += self.smatrixwid * size / self.defsize + 1 + size / 20
- elif i == "t":
- xpos += self.tmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "u":
- xpos += self.umatrixwid * size / self.defsize + 1 + size / 20
- elif i == "v":
- xpos += self.vmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "w":
- xpos += self.wmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "x":
- xpos += self.xmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "y":
- xpos += self.ymatrixwid * size / self.defsize + 1 + size / 20
- elif i == "z":
- xpos += self.zmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "A":
- xpos += self.Amatrixwid * size / self.defsize + 1 + size / 20
- elif i == "B":
- xpos += self.Bmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "C":
- xpos += self.Cmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "D":
- xpos += self.Dmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "E":
- xpos += self.Ematrixwid * size / self.defsize + 1 + size / 20
- elif i == "F":
- xpos += self.Fmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "G":
- xpos += self.Gmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "H":
- xpos += self.Hmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "I":
- xpos += self.Imatrixwid * size / self.defsize + 1 + size / 20
- elif i == "J":
- xpos += self.Jmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "K":
- xpos += self.Kmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "L":
- xpos += self.Lmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "M":
- xpos += self.Mmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "N":
- xpos += self.Nmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "O":
- xpos += self.Omatrixwid * size / self.defsize + 1 + size / 20
- elif i == "P":
- xpos += self.Pmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "Q":
- xpos += self.Qmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "R":
- xpos += self.Rmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "S":
- xpos += self.Smatrixwid * size / self.defsize + 1 + size / 20
- elif i == "T":
- xpos += self.Tmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "U":
- xpos += self.Umatrixwid * size / self.defsize + 1 + size / 20
- elif i == "V":
- xpos += self.Vmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "W":
- xpos += self.Wmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "X":
- xpos += self.Xmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "Y":
- xpos += self.Ymatrixwid * size / self.defsize + 1 + size / 20
- elif i == "Z":
- xpos += self.Zmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "1":
- xpos += self.onematrixwid * size / self.defsize + 1 + size / 20
- elif i == "2":
- xpos += self.twomatrixwid * size / self.defsize + 1 + size / 20
- elif i == "3":
- xpos += self.threematrixwid * size / self.defsize + 1 + size / 20
- elif i == "4":
- xpos += self.fourmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "5":
- xpos += self.fivematrixwid * size / self.defsize + 1 + size / 20
- elif i == "6":
- xpos += self.sixmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "7":
- xpos += self.sevenmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "8":
- xpos += self.eightmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "9":
- xpos += self.ninematrixwid * size / self.defsize + 1 + size / 20
- elif i == "0":
- xpos += self.tenmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "_":
- xpos += self._matrixwid * size / self.defsize + 1 + size / 20
- elif i == "-":
- xpos += self.minusmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "+":
- xpos += self.plusmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "=":
- xpos += self.equalmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "!":
- xpos += self.exclmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "@":
- xpos += self.atmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "#":
- xpos += self.hashmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "$":
- xpos += self.dollarmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "%":
- xpos += self.percentmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "^":
- xpos += self.hatmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "&":
- xpos += self.ampmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "*":
- xpos += self.strixmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "(":
- xpos += self.opencparmatrixwid * size / self.defsize + 1 + size / 20
- elif i == ")":
- xpos += self.closecparmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "[":
- xpos += self.opensparmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "]":
- xpos += self.closesparmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "\\":
- xpos += self.backslashmatrixwid * size / self.defsize + 1 + size / 20
- elif i == ";":
- xpos += self.semicolmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "'":
- xpos += self.postmatrixwid * size / self.defsize + 1 + size / 20
- elif i == ",":
- xpos += self.commamatrixwid * size / self.defsize + 1 + size / 20
- elif i == ".":
- xpos += self.fullstopmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "/":
- xpos += self.forslashmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "<":
- xpos += self.lesthanmatrixwid * size / self.defsize + 1 + size / 20
- elif i == ">":
- xpos += self.greatthanmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "?":
- xpos += self.questionmatrixwid * size / self.defsize + 1 + size / 20
- elif i == ":":
- xpos += self.colonmatrixwid * size / self.defsize + 1 + size / 20
- elif i == '"':
- xpos += self.quotematrixwid * size / self.defsize + 1 + size / 20
- elif i == "{":
- xpos += self.opensquigmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "}":
- xpos += self.closesquigmatrixwid * size / self.defsize + 1 + size / 20
- elif i == "|":
- xpos += self.barmatrixwid * size / self.defsize + 1 + size / 20
- elif i == " ":
- xpos += 24 * size / self.defsize + 1 + size / 20
- else:
- xpos += self.miscmatrixwid * size / self.defsize + 1 + size / 20
- return xpos
-
- def setDefaultPenColor(self):
- self.currentPen = self.fg
-
- def setPenColor(self, p):
- oldColor = self.currentPen
- # look for c in palette
- pnum = p.toLong()
- try:
- self.currentPen = self.palette.index(pnum)
- except ValueError:
- if len(self.palette) < 256:
- self.palette.append(pnum)
- self.currentPen = len(self.palette) - 1
- else:
- self.currentPen = self.fg
-
- return Color.fromLong(self.palette[oldColor])
-
- def getPenColor(self):
- return Color.fromLong(self.palette[self.currentPen])
-
- def plotPoint(self, x, y):
- if 0 <= x < self.wd and 0 <= y < self.ht:
- x = int(x)
- y = int(y)
- self.bitarray[y][x] = self.currentPen
-
- def drawOutRect(self, x, y, wid, ht, lt):
- if wid == 1:
- if lt != 0:
- temp = self.getPenColor()
- self.setPenColor(Color.BLACK)
- self.drawLine(x, y, x, y + ht - 1)
- self.setPenColor(temp)
- else:
- self.drawLine(x, y, x, y + ht - 1)
- else:
- if lt > wid / 2 and lt != 1:
- lt = wid / 2
- if lt > ht / 2 and lt != 1:
- lt = ht / 2
- self.drawRect(x, y, wid, ht, True)
- temp = self.getPenColor()
- self.setPenColor(Color.BLACK)
- for i in range(lt):
- self.drawRect(x + i, y + i, wid - i, ht - i)
- self.setPenColor(temp)
-
- def drawRect(self, x, y, wid, ht, fill=False):
- x = int(x)
- y = int(y)
- cury = y
-
- # subtract one for line width
- wid -= 1
- ht -= 1
-
- self.drawLine(x, y, x + wid, y)
- if fill:
- cury = y
- while cury < y + ht:
- self.drawLine(x, cury, x + wid, cury)
- cury += 1
- else:
- self.drawLine(x, y, x, y + ht)
- self.drawLine(x + wid, y, x + wid, y + ht)
- self.drawLine(x, y + ht, x + wid, y + ht)
-
- def drawSquare(self, x, y, wid, fill=False):
- self.drawRect(x, y, wid, wid, fill)
-
- def drawDash(self, x1, y1, x2, y2, wid=1, dashl=3, dashg=3):
- currX = x1
- currY = y1
- if x1 == x2:
- for i in range(wid):
- currY = y1
- while (y1 < y2 and currY + dashl < y2) or (
- y1 > y2 and currY - dashl > y2
- ):
- if y1 < y2:
- self.drawLine(currX, currY, currX, currY + dashl)
- currY = currY + dashl + dashg
- else:
- self.drawLine(currX, currY, currX, currY - dashl)
- currY = currY - dashl - dashg
- if (y1 < y2 and currY < y2) or (y2 < y1 and currY > y2):
- self.drawLine(currX, currY, currX, y2)
- currX -= 1
- elif y1 == y2:
- for i in range(wid):
- currX = x1
- while (x1 < x2 and currX + dashl < x2) or (
- x1 > x2 and currX - dashl > x1
- ):
- if x1 < x2:
- self.drawLine(currX, currY, currX + dashl, currY)
- currX = currX + dashl + dashg
- else:
- self.drawLine(currX, currY, currX - dashl, currY)
- currX = currX - dashl - dashg
- if (x1 < x2 and currX < x2) or (x2 < x1 and currX > x2):
- self.drawLine(currX, currY, x2, currY)
- currY -= 1
- else:
- ratio = abs(x1 - x2) * 1.0 / abs(y1 - y2)
- while (x1 < x2 and currX + dashl * min([ratio, 1]) < x2) or (
- x1 > x2 and currX - dashl * min([ratio, 1]) > x2
- ):
- if ratio > 1:
- if x1 < x2:
- nextX = currX + dashl
- currXt = currX + dashl + dashg
- else:
- nextX = currX - dashl
- currXt = currX - dashl - dashg
- if y1 < y2:
- nextY = currY + dashl / ratio
- currYt = currY + (dashl + dashg) / ratio
- else:
- nextY = currY - dashl / ratio
- currYt = currY - (dashl + dashg) / ratio
- else:
- if x1 < x2:
- nextX = currX + dashl * ratio
- currXt = currX + (dashl + dashg) * ratio
- else:
- nextX = currX - dashl * ratio
- currXt = currX - (dashl + dashg) * ratio
- if y1 < y2:
- nextY = currY + dashl
- currYt = currY + dashl + dashg
- else:
- nextY = currY - dashl
- currYt = currY - (dashl + dashg)
- self.drawLine(currX, currY, nextX, nextY)
- currX = currXt
- currY = currYt
- if currX + dashl * min([ratio, 1]) < x2:
- self.drawLine(currX, currY, x2, y2)
-
- def drawRightArrow(self, x, y, wid, ht, lt, outline=True):
- if lt > ht / 2:
- lt = ht / 2
- x1 = x + wid
- y1 = y + ht / 2
- x2 = x + wid - ht / 2
- ht -= 1
- if wid > ht / 2:
- for i in range(y, y + ht + 1):
- self.drawLine(x2, i, x1, y1)
- self.drawRect(x, y + ht / 4, wid - ht / 2, ht / 2, True)
- if outline:
- temp = self.getPenColor()
- self.setPenColor(Color.BLACK)
- for i in range(lt):
- self.drawLine(x + i, y + ht / 4 + i, x2 + i, y + ht / 4 + i)
- self.drawLine(x2 + i, y + ht / 4 + i, x2 + i, y + i * 2)
- self.drawLine(x2 + i, y + i * 2, x1 - i, y1)
- self.drawLine(x1 - i, y1, x2 + i, y + ht - i * 2)
- self.drawLine(
- x2 + i, y + ht - i * 2, x2 + i, y + ht / 4 + ht / 2 - i
- )
- self.drawLine(
- x2 + i, y + ht / 4 + ht / 2 - i, x + i, y + ht / 4 + ht / 2 - i
- )
- self.drawLine(x + i, y + ht / 4 + ht / 2 - i, x + i, y + ht / 4 + i)
- self.setPenColor(temp)
- else:
- for i in range(y, y + ht + 1):
- self.drawLine(x, i, x1, y1)
- if outline and lt != 0:
- temp = self.getPenColor()
- self.setPenColor(Color.BLACK)
- for i in range(lt):
- self.drawLine(x, y + ht - i, x1 - i, y1)
- self.drawLine(x, y + i, x1 - i, y1)
- if x1 != x:
- crapliney1 = (y1 - y) / (x1 - x) * (x + i - x + 1) + y
- crapliney2 = y + ht - (y1 - y) / (x1 - x) * (x + i - x + 1)
- self.drawLine(x + i, crapliney1, x + i, crapliney2)
- self.setPenColor(temp)
-
- def drawLeftArrow(self, x, y, wid, ht, lt, outline=True):
- if lt > ht / 2:
- lt = ht / 2
- y1 = y + (ht / 2)
- x1 = x + wid
- x2 = x + ht / 2
- ht -= 1
- if wid > ht / 2:
- for i in range(y, y + ht + 1):
- self.drawLine(x, y1, x2, i)
- self.drawRect(x2, y + ht / 4, wid - ht / 2, ht / 2, True)
- if outline:
- temp = self.getPenColor()
- self.setPenColor(Color.BLACK)
- for i in range(lt):
- self.drawLine(x + i, y1, x2 - i, y + i * 2)
- self.drawLine(x2 - i, y + i * 2, x2 - i, y + ht / 4 + i)
- self.drawLine(x2 - i, y + ht / 4 + i, x1 - i, y + ht / 4 + i)
- self.drawLine(
- x1 - i, y + ht / 4 + i, x1 - i, y + ht / 4 + ht / 2 - i
- )
- self.drawLine(
- x1 - i, y + ht / 4 + ht / 2 - i, x2 - i, y + ht / 4 + ht / 2 - i
- )
- self.drawLine(
- x2 - i, y + ht / 4 + ht / 2 - i, x2 - i, y + ht - i * 2
- )
- self.drawLine(x2 - i, y + ht - i * 2, x + i, y1)
- self.setPenColor(temp)
- else:
- if lt > wid / 2:
- lt = wid / 2
- for i in range(y, y + ht + 1):
- self.drawLine(x, y1, x1, i)
- if outline and lt != 0:
- temp = self.getPenColor()
- self.setPenColor(Color.BLACK)
- for i in range(lt):
- self.drawLine(x + i, y1, x1, y + i)
- if x1 != x:
- crapliney1 = (y1 - y) / (x1 - x) * (x + i - x + 1) + y
- crapliney2 = y + ht - (y1 - y) / (x1 - x) * (x + i - x + 1)
- self.drawLine(x1 - i, crapliney1, x1 - i, crapliney2)
- self.drawLine(x1, y + ht - i, x + i, y1)
- self.setPenColor(temp)
-
- def drawRightFrame(self, x, y, wid, ht, lt, frame, outline=True):
- if lt > ht / 2:
- lt = ht / 2
- if frame == 1:
- y1 = y + ht / 2
- y2 = y + ht * 5 / 8
- y3 = y + ht * 3 / 4
- elif frame == 2:
- y1 = y + ht * 5 / 8
- y2 = y + ht * 3 / 4
- y3 = y + ht * 7 / 8
- elif frame == 0:
- y1 = y + ht * 3 / 4
- y2 = y + ht * 7 / 8
- y3 = y + ht - 1
- x1 = x
- x2 = x + wid - ht / 8
- x3 = x + wid
- if wid > ht / 8:
- for i in range(y1, y3 + 1):
- self.drawLine(x1, i, x2, i)
- self.drawLine(x2, i, x3, y2)
- if outline:
- temp = self.getPenColor()
- self.setPenColor(Color.BLACK)
- for i in range(lt):
- self.drawLine(x1, y1 + i, x2, y1 + i)
- self.drawLine(x2, y1 + i, x3 - i, y2)
- self.drawLine(x3 - i, y2, x2, y3 - i)
- self.drawLine(x2, y3 - i, x1, y3 - i)
- self.drawLine(x1 + i, y3 - i, x1 + i, y1 + i)
- self.setPenColor(temp)
- else:
- for i in range(y1, y3 + 1):
- self.drawLine(x1, i, x3, y2)
- if outline:
- temp = self.getPenColor()
- self.setPenColor(Color.BLACK)
- self.drawLine(x1, y1, x3, y2)
- self.drawLine(x3, y2, x1, y3)
- self.drawLine(x1, y1, x1, y3)
- self.setPenColor(temp)
-
- def drawRightFrameRect(self, x, y, wid, ht, lt, frame, outline=True):
- if lt > ht / 2:
- lt = ht / 2
- if frame == 1:
- y1 = y + ht / 2
- y3 = y + ht * 3 / 4
- elif frame == 2:
- y1 = y + ht * 5 / 8
- y3 = y + ht * 7 / 8
- elif frame == 0:
- y1 = y + ht * 3 / 4
- y3 = y + ht - 1
- x1 = x
- x2 = x + wid
- for i in range(y1, y3 + 1):
- self.drawLine(x1, i, x2, i)
- if outline:
- temp = self.getPenColor()
- self.setPenColor(Color.BLACK)
- for i in range(lt):
- self.drawLine(x1, y1 + i, x2, y1 + i)
- self.drawLine(x2, y1 + i, x2 - i, y3)
- self.drawLine(x2, y3 - i, x1, y3 - i)
- self.drawLine(x1 + i, y3 - i, x1 + i, y1 + i)
- self.setPenColor(temp)
-
- def drawLeftFrame(self, x, y, wid, ht, lt, frame, outline=True):
- if lt > ht / 2:
- lt = ht / 2
- if frame == 1:
- y1 = y
- y2 = y + ht / 8
- y3 = y + ht / 4
- elif frame == 2:
- y1 = y + ht / 8
- y2 = y + ht / 4
- y3 = y + ht * 3 / 8
- elif frame == 0:
- y1 = y + ht / 4
- y2 = y + ht * 3 / 8
- y3 = y + ht / 2
- x1 = x + wid
- x2 = x + ht / 8
- x3 = x
- if wid > ht / 8:
- for i in range(y1, y3 + 1):
- self.drawLine(x1, i, x2, i)
- self.drawLine(x2, i, x3, y2)
- if outline:
- temp = self.getPenColor()
- self.setPenColor(Color.BLACK)
- for i in range(lt):
- self.drawLine(x1, y1 + i, x2, y1 + i)
- self.drawLine(x2, y1 + i, x3 - i, y2)
- self.drawLine(x3 - i, y2, x2, y3 - i)
- self.drawLine(x2, y3 - i, x1, y3 - i)
- self.drawLine(x1 + i, y3 - i, x1 + i, y1 + i)
- self.setPenColor(temp)
- else:
- for i in range(y1, y3 + 1):
- self.drawLine(x1, i, x3, y2)
- if outline:
- temp = self.getPenColor()
- self.setPenColor(Color.BLACK)
- self.drawLine(x1, y1, x3, y2)
- self.drawLine(x3, y2, x1, y3)
- self.drawLine(x1, y1, x1, y3)
- self.setPenColor(temp)
-
- def drawLeftFrameRect(self, x, y, wid, ht, lt, frame, outline=True):
- if lt > ht / 2:
- lt = ht / 2
- if frame == 1:
- y1 = y
- y3 = y + ht / 4
- elif frame == 2:
- y1 = y + ht / 8
- y3 = y + ht * 3 / 8
- elif frame == 0:
- y1 = y + ht / 4
- y3 = y + ht / 2
- x1 = x + wid
- x2 = x
- for i in range(y1, y3 + 1):
- self.drawLine(x1, i, x2, i)
- if outline:
- temp = self.getPenColor()
- self.setPenColor(Color.BLACK)
- for i in range(lt):
- self.drawLine(x1, y1 + i, x2, y1 + i)
- self.drawLine(x2 - i, y1, x2 - i, y3)
- self.drawLine(x2, y3 - i, x1, y3 - i)
- self.drawLine(x1 + i, y3, x1 + i, y1)
- self.setPenColor(temp)
-
- def drawPointer(self, x, y, ht, lt, outline=True):
- x1 = x - int(round(0.577350269 * ht / 2))
- x2 = x + int(round(0.577350269 * ht / 2))
- y1 = y + ht / 2
- y2 = y + ht - 1
- for i in range(x1, x2 + 1):
- self.drawLine(i, y2, x, y1)
- if outline:
- temp = self.getPenColor()
- self.setPenColor(Color.BLACK)
- self.drawLine(x, y1, x1, y2)
- self.drawLine(x, y1, x2, y2)
- self.drawLine(x1, y2, x2, y2)
- self.setPenColor(temp)
-
- def bresLine(x, y, x2, y2):
- """Bresenham line algorithm"""
- steep = 0
- coords = []
- dx = int(abs(x2 - x) + 0.5)
- if (x2 - x) > 0:
- sx = 1
- else:
- sx = -1
- dy = int(abs(y2 - y) + 0.5)
- if (y2 - y) > 0:
- sy = 1
- else:
- sy = -1
- if dy > dx:
- steep = 1
- x, y = y, x
- dx, dy = dy, dx
- sx, sy = sy, sx
- dx2 = dx * 2
- dy2 = dy * 2
- d = dy2 - dx
- for i in range(0, dx):
- coords.append((x, y))
- while d >= 0:
- y += sy
- d -= dx2
- x += sx
- d += dy2
-
- if steep: # transpose x's and y's
- coords = [(c[1], c[0]) for c in coords]
-
- coords.append((x2, y2))
-
- return coords
-
- bresLine = staticmethod(bresLine)
-
- def _drawLine(self, x1, y1, x2, y2):
- # special checks for vert and horiz lines
- if x1 == x2:
- if 0 <= x1 < self.wd:
- if y2 < y1:
- y1, y2 = y2, y1
- cury = max(y1, 0)
- maxy = min(y2, self.ht - 1)
- while cury <= maxy:
- self.plotPoint(x1, cury)
- cury += 1
- return
-
- if y1 == y2:
- if 0 <= y1 < self.ht:
- if x2 < x1:
- x1, x2 = x2, x1
- curx = max(x1, 0)
- maxx = min(x2, self.wd - 1)
- while curx <= maxx:
- self.plotPoint(curx, y1)
- curx += 1
- return
-
- for pt in BitMap.bresLine(x1, y1, x2, y2):
- self.plotPoint(pt[0], pt[1])
-
- def _drawLines(self, lineSegs):
- for x1, y1, x2, y2 in lineSegs:
- self._drawLine(x1, y1, x2, y2)
-
- def drawLine(self, x1, y1, x2, y2, type=LINE_SOLID):
- if type == BitMap.LINE_SOLID:
- self._drawLine(x1, y1, x2, y2)
- elif type == BitMap.LINE_DASHED:
- # how many segs?
- len = hypot(x2 - x1, y2 - y1)
- numsegs = len / BitMap._DASH_LEN
- dx = (x2 - x1) / numsegs
- dy = (y2 - y1) / numsegs
- dx2 = dx / 2.0
- dy2 = dy / 2.0
- if x2 < x1:
- x1, x2 = x2, x1
- y1, y2 = y2, y1
- segs = []
- curx = x1
- cury = y1
- for i in range(int(numsegs)):
- segs.append((curx, cury, curx + dx2, cury + dy2))
- curx += dx
- cury += dy
- if curx + dx2 > x2:
- segs.append((curx, cury, x2, y2))
- else:
- segs.append((curx, cury, curx + dx2, cury + dy2))
- self._drawLines(segs)
- elif type == BitMap.LINE_DOTTED:
- len = hypot(x2 - x1, y2 - y1)
- numsegs = len / BitMap._DOT_LEN
- dx = (x2 - x1) / numsegs
- dy = (y2 - y1) / numsegs
- dx2 = dx / 2.0
- dy2 = dy / 2.0
- if x2 < x1:
- x1, x2 = x2, x1
- y1, y2 = y2, y1
- segs = []
- curx = x1
- cury = y1
- for i in range(int(numsegs)):
- segs.append((curx, cury, curx + dx2, cury + dy2))
- curx += dx
- cury += dy
- if curx + dx2 > x2:
- segs.append((curx, cury, x2, y2))
- else:
- segs.append((curx, cury, curx + dx2, cury + dy2))
- self._drawLines(segs)
- elif type == BitMap.LINE_DOT_DASH:
- len = hypot(x2 - x1, y2 - y1)
- numsegs = len / BitMap._DOT_DASH_LEN
- dx = (x2 - x1) / numsegs
- dy = (y2 - y1) / numsegs
- dx3 = dx / 3.0
- dy3 = dy / 3.0
- dx23 = 0.62 * dx
- dy23 = 0.62 * dy
- dx56 = 0.78 * dx
- dy56 = 0.78 * dy
- if x2 < x1:
- x1, x2 = x2, x1
- y1, y2 = y2, y1
- segs = []
- curx = x1
- cury = y1
- for i in range(int(numsegs)):
- segs.append((curx, cury, curx + dx3, cury + dy3))
- segs.append((curx + dx23, cury + dy23, curx + dx56, cury + dy56))
- curx += dx
- cury += dy
- if curx + dx3 > x2:
- segs.append((curx, cury, x2, y2))
- else:
- segs.append((curx, cury, curx + dx3, cury + dy3))
- if curx + dx23 < x2:
- if curx + dx56 > x2:
- segs.append((curx + dx23, cury + dy23, x2, y2))
- else:
- segs.append(
- (curx + dx23, cury + dy23, curx + dx56, cury + dy56)
- )
- else:
- pass # segs.append( ( curx, cury, curx + dx3, cury + dy3 ) )
- segs.append((curx, cury, x2, y2))
- self._drawLines(segs)
-
- def drawCircle(self, cx, cy, r, fill=False):
- x = 0
- y = r
- d = 1 - r
-
- self.plotPoint(cx, cy + y)
- self.plotPoint(cx, cy - y)
- if fill:
- self.drawLine(cx - y, cy, cx + y, cy)
- else:
- self.plotPoint(cx + y, cy)
- self.plotPoint(cx - y, cy)
-
- while y > x:
- if d < 0:
- d += 2 * x + 3
- else:
- d += 2 * (x - y) + 5
- y -= 1
- x += 1
-
- if fill:
- self.drawLine(cx + x - 1, cy + y, cx - x + 1, cy + y)
- self.drawLine(cx - x + 1, cy - y, cx + x - 1, cy - y)
- self.drawLine(cx + y - 1, cy + x, cx - y + 1, cy + x)
- self.drawLine(cx - y + 1, cy - x, cx + y - 1, cy - x)
- else:
- self.plotPoint(cx + x, cy + y)
- self.plotPoint(cx + y, cy + x)
- self.plotPoint(cx - x, cy - y)
- self.plotPoint(cx - y, cy - x)
- self.plotPoint(cx + x, cy - y)
- self.plotPoint(cx - y, cy + x)
- self.plotPoint(cx - x, cy + y)
- self.plotPoint(cx + y, cy - x)
-
- # method for creating gif string
- def createGIFString(self, oneistone):
- if not oneistone:
- if self.wd > 1000:
- modifier = 1000.0 / self.wd
- self.wd = 1000
- self.ht = int(self.ht * modifier)
- else:
- oneistone = True
- binarystring = "GIF89a" # header
- binarystring += (
- struct.pack("h", self.wd)
- + struct.pack("h", self.ht)
- + chr(int("10010110", 2))
- + "\x00\x00"
- )
- if len(self.palette) <= 128:
- for i in self.palette:
- colour = Color.fromLong(i)
- binarystring += chr(colour.red) + chr(colour.grn) + chr(colour.blu)
- for i in range(128 - len(self.palette)):
- binarystring += chr(255) + chr(255) + chr(255)
- else:
- for i in range(8): # 128 colour table
- for j in range(4):
- for k in range(4):
- binarystring += chr(int(i * 36.5)) + chr(j * 85) + chr(k * 85)
- binarystring += (
- ",\x00\x00\x00\x00"
- + struct.pack("h", self.wd)
- + struct.pack("h", self.ht)
- + "\x00"
- ) # image descriptor
- binarystring += "\x07" # LZW Minimum code size
- pixstring = ""
- self.bitarray.reverse()
- for a, i in enumerate(self.bitarray):
- for b, j in enumerate(i):
- if len(self.palette) <= 128:
- if oneistone:
- pixstring += chr(j)
- else:
- if (
- int(a * modifier) != int((a - 1) * modifier) or a == 0
- ) and (int(b * modifier) != int((b - 1) * modifier) or b == 0):
- pixstring += chr(j)
- else:
- colourhash = self.palette[j]
- colour = Color.fromLong(colourhash)
- colbin = (
- "{0:b}".format(colour.red / 32).zfill(3)
- + "{0:b}".format(colour.grn / 64).zfill(2)
- + "{0:b}".format(colour.blu / 64).zfill(2)
- )
- if oneistone:
- pixstring += chr(int(colbin, 2))
- else:
- if (
- int(a * modifier) != int((a - 1) * modifier) or a == 0
- ) and (int(b * modifier) != int((b - 1) * modifier) or b == 0):
- pixstring += chr(int(colbin, 2))
- for i in range(0, len(pixstring), 8):
- binarystring += "\x09\x80" + pixstring[i : i + 8]
- binarystring += "\x01\x81"
- binarystring += "\x00;"
- return base64.b64encode(binarystring)
-
- def _saveBitMapNoCompression(self, filename):
- # open file
- f = file(filename, "wb")
-
- # write bitmap header
- f.write("BM")
- f.write(
- longToString(54 + 256 * 4 + self.ht * self.wd)
- ) # DWORD size in bytes of the file
- f.write(longToString(0)) # DWORD 0
- f.write(longToString(54 + 256 * 4)) # DWORD offset to the data
- f.write(longToString(40)) # DWORD header size = 40
- f.write(longToString(self.wd)) # DWORD image width
- f.write(longToString(self.ht)) # DWORD image height
- f.write(shortToString(1)) # WORD planes = 1
- f.write(shortToString(8)) # WORD bits per pixel = 8
- f.write(longToString(0)) # DWORD compression = 0
- f.write(
- longToString(self.wd * self.ht)
- ) # DWORD sizeimage = size in bytes of the bitmap = width * height
- f.write(longToString(0)) # DWORD horiz pixels per meter (?)
- f.write(longToString(0)) # DWORD ver pixels per meter (?)
- f.write(longToString(256)) # DWORD number of s used = 256
- f.write(
- longToString(len(self.palette))
- ) # DWORD number of "import s = len( self.palette )
-
- # write bitmap palette
- for clr in self.palette:
- f.write(longToString(clr))
- for i in range(len(self.palette), 256):
- f.write(longToString(0))
-
- # write pixels
- for row in self.bitarray:
- for pixel in row:
- f.write(chr(pixel))
- padding = (4 - len(row) % 4) % 4
- for i in range(padding):
- f.write(chr(0))
-
- # close file
- f.close()
-
- def _saveBitMapWithCompression(self, filename):
- """
- """
- # open file
- f = file(filename, "wb")
-
- # write bitmap header
- f.write("BM")
- f.write(
- longToString(54 + 256 * 4 + self.ht * self.wd)
- ) # DWORD size in bytes of the file
- f.write(longToString(0)) # DWORD 0
- f.write(longToString(54 + 256 * 4)) # DWORD offset to the data
- f.write(longToString(40)) # DWORD header size = 40
- f.write(longToString(self.wd)) # DWORD image width
- f.write(longToString(self.ht)) # DWORD image height
- f.write(shortToString(1)) # WORD planes = 1
- f.write(shortToString(8)) # WORD bits per pixel = 8
- f.write(longToString(1)) # DWORD compression = 1=RLE8
- f.write(
- longToString(self.wd * self.ht)
- ) # DWORD sizeimage = size in bytes of the bitmap = width * height
- f.write(longToString(0)) # DWORD horiz pixels per meter (?)
- f.write(longToString(0)) # DWORD ver pixels per meter (?)
- f.write(longToString(256)) # DWORD number of s used = 256
- f.write(
- longToString(len(self.palette))
- ) # DWORD number of "import s = len( self.palette )
-
- # write bitmap palette
- for clr in self.palette:
- f.write(longToString(clr))
- for i in range(len(self.palette), 256):
- f.write(longToString(0))
-
- # write pixels
- pixelBytes = 0
- for row in self.bitarray:
- rleStart = 0
- curPixel = rleStart + 1
- while curPixel < len(row):
- if row[curPixel] != row[rleStart] or curPixel - rleStart == 255:
- # write out from rleStart thru curPixel-1
- f.write(chr(curPixel - rleStart))
- f.write(chr(row[rleStart]))
- pixelBytes += 2
- rleStart = curPixel
- else:
- pass
- curPixel += 1
-
- # write out last run of s
- f.write(chr(curPixel - rleStart))
- f.write(chr(row[rleStart]))
- pixelBytes += 2
-
- # end of line code
- f.write(chr(0))
- f.write(chr(0))
- pixelBytes += 2
-
- # end of bitmap code
- f.write(chr(0))
- f.write(chr(1))
- pixelBytes += 2
-
- # now fix sizes in header
- f.seek(2)
- f.write(
- longToString(54 + 256 * 4 + pixelBytes)
- ) # DWORD size in bytes of the file
- f.seek(34)
- f.write(longToString(pixelBytes)) # DWORD size in bytes of the file
-
- # close file
- f.close()
-
- def saveFile(self, filename, compress=True):
- if compress:
- self._saveBitMapWithCompression(filename)
- else:
- self._saveBitMapNoCompression(filename)
-
-
-# For converting arttemis colour codes to an RGB value
-def artColourTable(x):
- if x == 0:
- y = (255, 255, 255)
- elif x == 1:
- y = (100, 100, 100)
- elif x == 2:
- y = (255, 0, 0)
- elif x == 3:
- y = (0, 255, 0)
- elif x == 4:
- y = (0, 0, 255)
- elif x == 5:
- y = (0, 255, 255)
- elif x == 6:
- y = (255, 0, 255)
- elif x == 7:
- y = (255, 255, 0)
- elif x == 8:
- y = (152, 255, 152)
- elif x == 9:
- y = (135, 206, 250)
- elif x == 10:
- y = (255, 165, 0)
- elif x == 11:
- y = (200, 150, 100)
- elif x == 12:
- y = (255, 200, 200)
- elif x == 13:
- y = (170, 170, 170)
- elif x == 14:
- y = (0, 0, 0)
- elif x == 15:
- y = (255, 63, 63)
- elif x == 16:
- y = (255, 127, 127)
- elif x == 17:
- y = (255, 191, 191)
- return y
-
-
-# For reading in genbank or EMBL files
-def getArrows(filename, legname):
- length = None
- theseq = ""
- genbank = open(filename)
- outlist = []
- getFeats = False
- emblcheck = False
- getColour = False
- getemblseq = False
- getgenseq = False
- getmultifasta = False
- for line in genbank:
- if "\t" in line:
- sys.stderr.write(
- "Tab found in genbank file, this may cause some Features to be missed, please remove tabs."
- )
- if line.startswith("FEATURES") or line.startswith(" source"):
- getFeats = True
- elif line.startswith("FT"):
- getFeats = True
- emblcheck = True
- elif line.startswith(">") and not getFeats:
- if getmultifasta:
- theseq += "qqq"
- else:
- getmultifasta = True
- elif getmultifasta:
- theseq += line.rstrip()
- elif not line.startswith(" ") and not emblcheck:
- getFeats = False
- elif emblcheck:
- getFeats = False
- if line[2:].startswith(" ") and line[5] != " " and getFeats:
- feat, loc = line[2:].split()
- if "join(" in loc or "order(" in loc:
- if loc.startswith("join("):
- temp2 = loc[5:-1].split(",")
- strand = "+"
- elif loc.startswith("complement("):
- temp2 = loc[11:-1].split(",")
- strand = "-"
- elif loc.startswith("order("):
- temp2 = loc[6:-1].split(",")
- temp = [[], []]
- gotit = True
- for i in temp2:
- if ":" in i:
- i = i.split(":")[1]
- if "<" in i:
- i = i.replace("<", "")
- if ">" in i:
- i = i.replace(">", "")
- if ")" in i:
- i = i.replace(")", "")
- if i.startswith("complement("):
- strand = "-"
- i = i[11:]
- if i.startswith("join("):
- i = i[5:]
- if i.startswith("order("):
- i = i[6:]
- if ".." in i:
- try:
- start, stop = i.split("..")
- except:
- start, stop = "x", "y"
- elif "^" in i:
- try:
- start, stop = i.split("^")
- except:
- start, stop = "x", "y"
- elif "." in i:
- try:
- start, stop = i.split(".")
- except:
- start, stop = "x", "y"
- else:
- if i.startswith("gap("):
- start = None
- else:
- start = i
- stop = i
- try:
- if start != None:
- temp[0].append(int(start))
- temp[1].append(int(stop))
- except:
- if gotit:
- print ("feature could not be processed:\n" + line)
- gotit = False
- if gotit:
- aninstance = feature(temp[0], temp[1], feat, strand, None, None)
- outlist.append(aninstance)
- if feat == "source":
- try:
- lengtht = max([max(temp[0]), max(temp[1])])
- if lengtht > length:
- length = lengtht
- except:
- pass
- else:
- if loc.startswith("complement("):
- strand = "-"
- loc = loc[11:-1]
- else:
- strand = "+"
- if ":" in loc:
- loc = loc.split(":")[1]
- if "<" in loc:
- loc = loc.replace("<", "")
- if ">" in loc:
- loc = loc.replace(">", "")
- if ".." in loc:
- try:
- start, stop = loc.split("..")
- except:
- start, stop = "x", "y"
- elif "^" in loc:
- try:
- start, stop = loc.split("^")
- except:
- start, stop = "x", "y"
- elif "." in loc:
- try:
- start, stop = loc.split(".")
- except:
- start, stop = "x", "y"
- else:
- start = loc
- stop = loc
- try:
- aninstance = feature(
- int(start), int(stop), feat, strand, None, None
- )
- outlist.append(aninstance)
- except:
- print ("feature could not be processed:\n" + line)
- if feat == "source":
- try:
- lengtht = max([int(start), int(stop)])
- if lengtht > length:
- length = lengtht
- except:
- pass
- elif line[2:].startswith(" /colour=") and getFeats:
- temp = line[27:-1]
- temp = temp.replace('"', "")
- temp = temp.replace("'", "")
- artColourF = temp.split()
- try:
- if len(artColourF) == 1:
- artColour = artColourTable(int(artColourF[0]))
- else:
- artColour = (
- int(artColourF[0]),
- int(artColourF[1]),
- int(artColourF[2]),
- )
- outlist[-1].colour = artColour
- except:
- print ("Colour could not be processed:\n" + line)
- elif line[2:].startswith(" /color=") and getFeats:
- temp = line[26:-1]
- temp = temp.replace('"', "")
- temp = temp.replace("'", "")
- artColourF = temp.split()
- try:
- if len(artColourF) == 1:
- artColour = artColourTable(int(artColourF[0]))
- else:
- artColour = (
- int(artColourF[0]),
- int(artColourF[1]),
- int(artColourF[2]),
- )
- outlist[-1].colour = artColour
- except:
- print ("Colour could not be processed:\n" + line)
- elif line[2:].startswith(" /colour=") and getFeats:
- temp = line[29:-1]
- temp = temp.replace('"', "")
- temp = temp.replace("'", "")
- artColourF = temp.split()
- try:
- if len(artColourF) == 1:
- artColour = artColourTable(int(artColourF[0]))
- else:
- artColour = (
- int(artColourF[0]),
- int(artColourF[1]),
- int(artColourF[2]),
- )
- outlist[-1].colour = artColour
- except:
- print ("Colour could not be processed:\n" + line)
- elif line[2:].startswith(" /color=") and getFeats:
- temp = line[28:-1]
- temp = temp.replace('"', "")
- temp = temp.replace("'", "")
- try:
- artColourF = temp.split()
- if len(artColourF) == 1:
- artColour = artColourTable(int(artColourF[0]))
- else:
- artColour = (
- int(artColourF[0]),
- int(artColourF[1]),
- int(artColourF[2]),
- )
- except:
- print ("Colour could not be processed:\n" + line)
- outlist[-1].colour = artColour
- elif (
- line[2:].startswith(" /gene=")
- and getFeats
- and legname == "gene"
- ):
- outlist[-1].name = line.rstrip()[27:].replace('"', "")
- elif (
- line[2:].startswith(" /product=")
- and getFeats
- and legname == "product"
- ):
- outlist[-1].name = line.rstrip()[30:].replace('"', "")
- elif (
- line[2:].startswith(" /locus_tag=")
- and getFeats
- and legname == "locus_tag"
- ):
- outlist[-1].name = line.rstrip()[32:].replace('"', "")
- elif (
- line[2:].startswith(" /note=")
- and getFeats
- and legname == "note"
- ):
- outlist[-1].name = line.rstrip()[27:].replace('"', "")
- elif line.startswith("ORIGIN") and length == None:
- getgenseq = True
- elif line.startswith("SQ Sequence ") and length == None:
- getemblseq = True
- elif line.startswith("//"):
- getemblseq = False
- getgenseq = False
- if length == None:
- length = len(theseq)
- elif getemblseq:
- theseq += "".join(line.split()[:-1])
- elif getgenseq:
- theseq += "".join(line.split()[1:])
- if getmultifasta:
- insertSize = len(theseq) / 500
- multifastapos = 1
- for i in theseq.split("qqq"):
- aninstance = feature(
- multifastapos, multifastapos + len(i) - 1, "contig", "+", None, None
- )
- outlist.append(aninstance)
- multifastapos += len(i) - 1 + insertSize
- theseq = theseq.replace("qqq", "n" * int(len(theseq) / 500))
- if length == None and theseq != "":
- length = len(theseq)
- return length, outlist
-
-
-# detects whether blast+ is in your path
-def isNewBlastDB():
- path = os.environ["PATH"].split(os.pathsep)
- isit = False
- for i in path:
- if os.path.exists(i + "/" + "makeblastdb.exe") or os.path.exists(
- i + "/" "makeblastdb"
- ):
- isit = True
- return isit
-
-
-def isNewBlastn():
- path = os.environ["PATH"].split(os.pathsep)
- isit = False
- for i in path:
- if os.path.exists(i + "/" + "blastn.exe") or os.path.exists(i + "/" "blastn"):
- isit = True
- return isit
-
-
-def isNewTblastx():
- path = os.environ["PATH"].split(os.pathsep)
- isit = False
- for i in path:
- if os.path.exists(i + "/" + "tblastx.exe") or os.path.exists(i + "/" "tblastx"):
- isit = True
- return isit
-
-
-# detects legacy blast in your path
-def isLegBlastDB():
- path = os.environ["PATH"].split(os.pathsep)
- isit = False
- for i in path:
- if os.path.exists(i + "/" + "formatdb.exe") or os.path.exists(
- i + "/" "formatdb"
- ):
- isit = True
- return isit
-
-
-def isLegBlastall():
- path = os.environ["PATH"].split(os.pathsep)
- isit = False
- for i in path:
- if os.path.exists(i + "/" + "blastall.exe") or os.path.exists(
- i + "/" "blastall"
- ):
- isit = True
- return isit
-
-
-# gets all blast hits length >minlength and e value < mineval and identity > minident
-def getBlast(filename, minlength, mineval, minident):
- if filename == "":
- return []
- blast = open(filename)
- testline = blast.readline()
- try:
- (
- query,
- subject,
- ident,
- length,
- mismatch,
- indel,
- qStart,
- qEnd,
- rStart,
- rEnd,
- eVal,
- bitScore,
- ) = testline.split()
- ident = float(ident)
- length = int(length)
- mismatch = int(mismatch)
- indel = int(indel)
- qStart = int(qStart)
- qEnd = int(qEnd)
- rStart = int(rStart)
- rEnd = int(rEnd)
- eVal = float(eVal)
- bitScore = float(bitScore)
- crunch = False
- except:
- crunch = True
- blast.close()
- blast = open(filename)
- outlist = []
- for line in blast:
- if crunch:
- score, ident, qStart, qEnd, query, rStart, rEnd, subject = line.split()[:8]
- qStart = int(qStart)
- qEnd = int(qEnd)
- eVal = 0
- length = abs(qStart - qEnd)
- else:
- (
- query,
- subject,
- ident,
- length,
- mismatch,
- indel,
- qStart,
- qEnd,
- rStart,
- rEnd,
- eVal,
- bitScore,
- ) = line.split()
- eVal = float(eVal)
- ident = float(ident)
- length = int(length)
- qStart = int(qStart)
- qEnd = int(qEnd)
- rStart = int(rStart)
- rEnd = int(rEnd)
- eVal = float(eVal)
- if length >= minlength and eVal <= mineval and ident >= minident:
- outlist.append((qStart, qEnd, rStart, rEnd, ident))
- return outlist
-
-
-# draws teh image
-def draw(
- filename,
- minlength,
- mineval,
- minIdent,
- inputlist,
- width,
- height1,
- height2,
- minblastc,
- maxblastc,
- minblastci,
- maxblastci,
- drawfig1,
- drawfig2,
- drawfig3,
- compress,
- reverseList,
- featDict,
- glt,
- exont,
- genet,
- featlengths,
- aln,
- graphit,
- blastoutline,
- minmaxlist,
- autodetect,
- legend,
- legname,
- writebmp=0,
-):
- # global variable for stopping script midway
- global abortCaptain
- secondlist = []
- maxlength = 0
- totalheight = 0
- # returning a minident value of 101 means the script has been aborted
- minident = 101
- # gets feature file and blast information
- for i in range(0, len(inputlist)):
- if i % 2 == 0:
- temp = getArrows(inputlist[i], legname)
- thirdlist = []
- if minmaxlist[int(i / 2)][1] == "Max":
- if temp[0] == None:
- maxcut = featlengths[int(i / 2)]
- else:
- maxcut = temp[0]
- if minmaxlist[int(i / 2)][0] == 1:
- minmaxopt = 0
- else:
- minmaxopt = 1
- mincut = minmaxlist[int(i / 2)][0]
- else:
- mincut = minmaxlist[int(i / 2)][0]
- maxcut = minmaxlist[int(i / 2)][1]
- if minmaxlist[int(i / 2)][0] < minmaxlist[int(i / 2)][1]:
- minmaxopt = 1
- else:
- minmaxopt = 2
- for j in temp[1]:
- if j.type in featDict:
- if j.colour == None:
- j.colour = featDict[j.type][1]
- if minmaxopt == 0:
- thirdlist.append(j)
- elif minmaxopt == 1:
- if type(j.start) == int:
- if j.start >= mincut and j.stop <= maxcut:
- aninstance = feature(
- j.start - mincut + 1,
- j.stop - mincut + 1,
- j.type,
- j.strand,
- j.colour,
- j.name,
- )
- thirdlist.append(aninstance)
- else:
- if j.start[0] >= mincut and j.stop[-1] <= maxcut:
- tempstart = []
- for k in j.start:
- tempstart.append(k - mincut + 1)
- tempstop = []
- for k in j.stop:
- tempstop.append(k - mincut + 1)
- aninstance = feature(
- tempstart,
- tempstop,
- j.type,
- j.strand,
- j.colour,
- j.name,
- )
- thirdlist.append(aninstance)
- elif minmaxopt == 2:
- if temp[0] == None:
- templength = featlengths[int(i / 2)]
- else:
- templength = temp[0]
- if type(j.start) == int:
- if j.stop <= maxcut:
- tempstart = j.start + templength - mincut + 1
- tempstop = j.stop + templength - mincut + 1
- aninstance = feature(
- tempstart,
- tempstop,
- j.type,
- j.strand,
- j.colour,
- j.name,
- )
- thirdlist.append(aninstance)
- elif j.start >= mincut:
- tempstart = j.start - mincut + 1
- tempstop = j.stop - mincut + 1
- aninstance = feature(
- tempstart,
- tempstop,
- j.type,
- j.strand,
- j.colour,
- j.name,
- )
- thirdlist.append(aninstance)
- else:
- if j.stop[-1] <= maxcut:
- tempstart = []
- for k in j.start:
- tempstart.append(k + templength - mincut + 1)
- tempstop = []
- for k in j.stop:
- tempstop.append(k + templength - mincut + 1)
- aninstance = feature(
- tempstart,
- tempstop,
- j.type,
- j.strand,
- j.colour,
- j.name,
- )
- thirdlist.append(aninstance)
- elif j.start[0] >= mincut:
- tempstart = []
- for k in j.start:
- tempstart.append(k - mincut + 1)
- tempstop = []
- for k in j.stop:
- tempstop.append(k - mincut + 1)
- aninstance = feature(
- tempstart,
- tempstop,
- j.type,
- j.strand,
- j.colour,
- j.name,
- )
- thirdlist.append(aninstance)
- thirdlist.sort(key=lambda ii: ii.length(), reverse=True)
- if minmaxopt == 0:
- if temp[0] == None:
- secondlist.append((featlengths[int(i / 2)], thirdlist))
- if featlengths[int(i / 2)] > maxlength:
- maxlength = featlengths[int(i / 2)]
- else:
- secondlist.append((temp[0], thirdlist))
- if temp[0] > maxlength:
- maxlength = temp[0]
- elif minmaxopt == 1:
- secondlist.append((maxcut - mincut + 1, thirdlist))
- if maxcut - mincut + 1 > maxlength:
- maxlength = maxcut - mincut + 1
- elif minmaxopt == 2:
- if temp[0] == None:
- templength = featlengths[int(i / 2)]
- else:
- templength = temp[0]
- secondlist.append((templength - mincut + maxcut + 1, thirdlist))
- if templength - mincut + maxcut + 1 > maxlength:
- maxlength = templength - mincut + maxlength + 1
- totalheight += height1
- else:
- totalheight += height2
- temp = getBlast(inputlist[i], minlength, mineval, minIdent)
- for j in temp:
- if j[4] < minident:
- minident = j[4]
- secondlist.append(temp)
- # calculates offsets for genomes if best blast alignment is selected
- if autodetect and maxlength > 100000:
- tempsecond = []
- minident = 101
- for i in range(len(secondlist)):
- temp = []
- if i % 2 == 0:
- for j in secondlist[i][1]:
- if type(j.start) == int:
- if (j.stop - j.start) * 1.0 / maxlength * width > 4:
- temp.append(j)
- else:
- if (j.stop[0] - j.start[0]) * 1.0 / maxlength * width > 4:
- temp.append(j)
- tempsecond.append((secondlist[i][0], temp))
- else:
- for j in secondlist[i]:
- if (j[1] - j[0]) * 1.0 / maxlength * width > 3:
- temp.append(j)
- if j[4] < minident:
- minident = j[4]
- tempsecond.append(temp)
- secondlist = tempsecond
- if minIdent != 0:
- minident = minIdent
- if aln == "best blast":
- blastmatch = [0]
- for i in range(1, len(secondlist), 2):
- maxbitscore = 0
- for j in secondlist[i]:
- if j[1] - j[0] > maxbitscore:
- qstart, qend, rstart, rend = j[0], j[1], j[2], j[3]
- maxbitscore = j[1] - j[0]
- if len(secondlist[i]) == 0:
- theQstart = 0
- elif reverseList[int(i / 2)]:
- theQstart = secondlist[i - 1][0] - qend
- else:
- theQstart = qstart
- if reverseList[int((i + 1) / 2)]:
- if len(secondlist[i]) == 0:
- theRstart = 0
- elif rstart < rend:
- theRstart = secondlist[i + 1][0] - rend
- else:
- theRstart = secondlist[i + 1][0] - rstart
- else:
- if len(secondlist[i]) == 0:
- theRstart = 0
- elif rstart < rend:
- theRstart = rstart
- else:
- theRstart = rend
- blastmatch.append(blastmatch[-1] + theQstart - theRstart)
- theminblast = min(blastmatch)
- templist = []
- for i in blastmatch:
- templist.append(i - theminblast)
- blastmatch = templist
- for i in range(0, len(secondlist) + 1, 2):
- if secondlist[i][0] + blastmatch[int(i / 2)] > maxlength:
- maxlength = secondlist[i][0] + blastmatch[int(i / 2)]
- leghei = 0
- if legend == "Single column" or legend == "Two columns":
- legendArrows = set()
- legendList = []
- for i in range(len(secondlist)):
- if i % 2 == 0:
- legendList.append([])
- for j in secondlist[i][1]:
- if (
- j.name != None
- and (j.name, j.colour, featDict[j.type][0]) not in legendArrows
- ):
- legendArrows.add((j.name, j.colour, featDict[j.type][0]))
- if type(j.start) == int:
- tempjstart = j.start
- else:
- tempjstart = j.start[0]
- legendList[int(i / 2)].append(
- (j.name, j.colour, featDict[j.type][0], tempjstart)
- )
- if legend == "Single column":
- leghei += min([5000, len(legendArrows) * 90])
- elif legend == "Two columns":
- leghei = min([5000, (len(legendArrows) + 1) / 2 * 90])
- global shifter
- if legend == "Top" or legend == "Top & Bottom":
- toplegpos = [0, 0, 0, set(), set(), set()]
- legendTop = []
- testbmp = BitMap(10, 10)
- if aln == "best blast":
- shifter = blastmatch[0]
- genrev1 = reverseList[0]
- for j in secondlist[0][1]:
- if j.name != None:
- if type(j.start) == int:
- firstleg = True
- secondleg = True
- thirdleg = True
- if genrev1:
- legpos = convertPosR(
- secondlist[0][0],
- maxlength,
- width,
- (j.start + j.stop) / 2,
- aln,
- )
- else:
- legpos = convertPos(
- secondlist[0][0],
- maxlength,
- width,
- (j.start + j.stop) / 2,
- aln,
- )
- for q in range(legpos - 40, legpos + 50):
- if q in toplegpos[3]:
- firstleg = False
- if q in toplegpos[4]:
- secondleg = False
- if q in toplegpos[5]:
- thirdleg = False
- if firstleg:
- therung = 1
- if testbmp.lengthString(j.name[:10], 64) > toplegpos[0]:
- toplegpos[0] = testbmp.lengthString(j.name[:10], 64)
- for q in range(legpos - 40, legpos + 50):
- toplegpos[3].add(q)
- # elif secondleg:
- # therung = 2
- # if testbmp.lengthString(j.name[:10], 64) > toplegpos[1]:
- # toplegpos[1] = testbmp.lengthString(j.name[:10], 64)
- # for q in range(legpos - 40, legpos + 50):
- # toplegpos[4].add(q)
- # elif thirdleg:
- # therung = 3
- # if testbmp.lengthString(j.name[:10], 64) > toplegpos[2]:
- # toplegpos[2] = testbmp.lengthString(j.name[:10], 64)
- # for q in range(legpos - 40, legpos + 50):
- # toplegpos[5].add(q)
- else:
- therung = None
- legendTop.append((j.name[:10], legpos, therung))
- else:
- firstleg = True
- secondleg = True
- thirdleg = True
- if genrev1:
- legpos = convertPosR(
- secondlist[0][0],
- maxlength,
- width,
- (j.start[0] + j.stop[0]) / 2,
- aln,
- )
- else:
- legpos = convertPos(
- secondlist[0][0],
- maxlength,
- width,
- (j.start[0] + j.stop[0]) / 2,
- aln,
- )
- for q in range(legpos - 40, legpos + 50):
- if q in toplegpos[3]:
- firstleg = False
- if q in toplegpos[4]:
- secondleg = False
- if q in toplegpos[5]:
- thirdleg = False
- if firstleg:
- therung = 1
- if testbmp.lengthString(j.name[:10], 64) > toplegpos[0]:
- toplegpos[0] = testbmp.lengthString(j.name[:10], 64)
- for q in range(legpos - 40, legpos + 50):
- toplegpos[3].add(q)
- # elif secondleg:
- # therung = 2
- # if testbmp.lengthString(j.name[:10], 64) > toplegpos[1]:
- # toplegpos[1] = testbmp.lengthString(j.name[:10], 64)
- # for q in range(legpos - 40, legpos + 50):
- # toplegpos[4].add(q)
- # elif thirdleg:
- # therung = 3
- # if testbmp.lengthString(j.name[:10], 64) > toplegpos[2]:
- # toplegpos[2] = testbmp.lengthString(j.name[:10], 64)
- # for q in range(legpos - 40, legpos + 50):
- # toplegpos[5].add(q)
- else:
- therung = None
- legendTop.append((j.name[:10], legpos, therung))
- totalheight += sum(toplegpos[:3]) + 40
- if legend == "Bottom" or legend == "Top & Bottom":
- botlegpos = [0, 0, 0, set(), set(), set()]
- legendBot = []
- testbmp = BitMap(10, 10)
- if aln == "best blast":
- shifter = blastmatch[-1]
- genrev1 = reverseList[-1]
- for j in secondlist[-1][1]:
- if j.name != None:
- if type(j.start) == int:
- firstleg = True
- secondleg = True
- thirdleg = True
- if genrev1:
- legpos = convertPosR(
- secondlist[-1][0],
- maxlength,
- width,
- (j.start + j.stop) / 2,
- aln,
- )
- else:
- legpos = convertPos(
- secondlist[-1][0],
- maxlength,
- width,
- (j.start + j.stop) / 2,
- aln,
- )
- for q in range(legpos - 40, legpos + 50):
- if q in botlegpos[3]:
- firstleg = False
- if q in botlegpos[4]:
- secondleg = False
- if q in botlegpos[5]:
- thirdleg = False
- if firstleg:
- therung = 1
- if testbmp.lengthString(j.name[:10], 64) > botlegpos[0]:
- botlegpos[0] = testbmp.lengthString(j.name[:10], 64)
- for q in range(legpos - 40, legpos + 50):
- botlegpos[3].add(q)
- # elif secondleg:
- # therung = 2
- # if testbmp.lengthString(j.name[:10], 64) > botlegpos[1]:
- # botlegpos[1] = testbmp.lengthString(j.name[:10], 64)
- # for q in range(legpos - 40, legpos + 50):
- # botlegpos[4].add(q)
- # elif thirdleg:
- # therung = 3
- # if testbmp.lengthString(j.name[:10], 64) > botlegpos[2]:
- # botlegpos[2] = testbmp.lengthString(j.name[:10], 64)
- # for q in range(legpos - 40, legpos + 50):
- # botlegpos[5].add(q)
- else:
- therung = None
- legendBot.append((j.name[:10], legpos, therung))
- else:
- firstleg = True
- secondleg = True
- thirdleg = True
- if genrev1:
- legpos = convertPosR(
- secondlist[-1][0],
- maxlength,
- width,
- (j.start[0] + j.stop[0]) / 2,
- aln,
- )
- else:
- legpos = convertPos(
- secondlist[-1][0],
- maxlength,
- width,
- (j.start[0] + j.stop[0]) / 2,
- aln,
- )
- for q in range(
- (j.start[0] + j.stop[0]) / 2 - 40,
- (j.start[0] + j.stop[0]) / 2 + 50,
- ):
- if q in botlegpos[3]:
- firstleg = False
- if q in botlegpos[4]:
- secondleg = False
- if q in botlegpos[5]:
- thirdleg = False
- if firstleg:
- therung = 1
- if testbmp.lengthString(j.name[:10], 64) > botlegpos[0]:
- botlegpos[0] = testbmp.lengthString(j.name[:10], 64)
- for q in range(
- (j.start[0] + j.stop[0]) / 2 - 40,
- (j.start[0] + j.stop[0]) / 2 + 50,
- ):
- botlegpos[3].add(q)
- # elif secondleg:
- # therung = 2
- # if testbmp.lengthString(j.name[:10], 64) > botlegpos[1]:
- # botlegpos[1] = testbmp.lengthString(j.name[:10], 64)
- # for q in range((j.start[0] + j.stop[0])/2 - 40, (j.start[0] + j.stop[0])/2 + 50):
- # botlegpos[4].add(q)
- # elif thirdleg:
- # therung = 3
- # if testbmp.lengthString(j.name[:10], 64) > botlegpos[2]:
- # botlegpos[2] = testbmp.lengthString(j.name[:10], 64)
- # for q in range((j.start[0] + j.stop[0])/2 - 40, (j.start[0] + j.stop[0])/2 + 50):
- # botlegpos[5].add(q)
- else:
- therung = None
- legendBot.append(
- (j.name[:10], (j.start[0] + j.stop[0]) / 2, therung)
- )
- totalheight += sum(botlegpos[:3]) + 40
- # creates extra width for blast identity legend
- drawfig1hei = 0
- if drawfig1 and minident != 101:
- drawfig1hei = 500
- extraheight = 0
- # creates extra height for scale legend
- drawfig2hei = 0
- if drawfig2:
- drawfig2hei = height1 + 70
- # creates extra height for graph
- totalheight += max([leghei, drawfig1hei, drawfig2hei])
- hei = totalheight
- if graphit != None:
- hei += graphit[3] * len(graphit[0]) + 2 * graphit[7] * len(graphit[0])
- extraheight = (graphit[3] + 20) * len(graphit[0])
- bmp = BitMap(width, hei + 1)
- # draws the scale figure
- columnhei = max([leghei, drawfig1hei, drawfig2hei])
- if legend == "Single column":
- index = 0
- legendArrows = []
- for i in range(len(legendList)):
- x = legendList[i]
- x.sort(key=operator.itemgetter(3))
- if reverseList[i]:
- x.reverse()
- legendArrows += x
- for i in range(columnhei - 74, 10, -90):
- # print len(legendArrows), legendArrows[index][2]
- if index < len(legendArrows) and legendArrows[index][2] == "rect":
- theColor = Color(
- legendArrows[index][1][0],
- legendArrows[index][1][1],
- legendArrows[index][1][2],
- )
- bmp.setPenColor(theColor)
- bmp.drawOutRect(5, i, 96, 64, genet)
- bmp.setPenColor(Color.BLACK)
- bmp.writeString(legendArrows[index][0], 106, i, 64)
- elif index < len(legendArrows) and legendArrows[index][2] == "arrow":
- theColor = Color(
- legendArrows[index][1][0],
- legendArrows[index][1][1],
- legendArrows[index][1][2],
- )
- bmp.setPenColor(theColor)
- bmp.drawRightArrow(5, i, 96, 64, genet)
- bmp.setPenColor(Color.BLACK)
- bmp.writeString(legendArrows[index][0], 106, i, 64)
- elif index < len(legendArrows) and legendArrows[index][2] == "frame":
- theColor = Color(
- legendArrows[index][1][0],
- legendArrows[index][1][1],
- legendArrows[index][1][2],
- )
- bmp.setPenColor(theColor)
- bmp.drawRightFrame(5, i - 48, 96, 128, genet, 1)
- bmp.setPenColor(Color.BLACK)
- bmp.writeString(legendArrows[index][0], 106, i, 64)
- elif index < len(legendArrows) and legendArrows[index][2] == "pointer":
- theColor = Color(
- legendArrows[index][1][0],
- legendArrows[index][1][1],
- legendArrows[index][1][2],
- )
- bmp.setPenColor(theColor)
- bmp.drawPointer(34, i, 64, genet)
- bmp.setPenColor(Color.BLACK)
- bmp.writeString(legendArrows[index][0], 106, i, 64)
- else:
- print ("wang")
- index += 1
- elif legend == "Two columns":
- index = 0
- legendArrows = []
- for i in range(len(legendList)):
- x = legendList[i]
- x.sort(key=operator.itemgetter(3))
- if reverseList[i]:
- x.reverse()
- legendArrows += x
- for i in range(columnhei - 74, 10, -90):
- if index < len(legendArrows) and legendArrows[index][2] == "rect":
- theColor = Color(
- legendArrows[index][1][0],
- legendArrows[index][1][1],
- legendArrows[index][1][2],
- )
- bmp.setPenColor(theColor)
- bmp.drawOutRect(5, i, 96, 64, genet)
- bmp.setPenColor(Color.BLACK)
- bmp.writeString(legendArrows[index][0][:45], 106, i, 64)
- elif index < len(legendArrows) and legendArrows[index][2] == "arrow":
- theColor = Color(
- legendArrows[index][1][0],
- legendArrows[index][1][1],
- legendArrows[index][1][2],
- )
- bmp.setPenColor(theColor)
- bmp.drawRightArrow(5, i, 96, 64, genet)
- bmp.setPenColor(Color.BLACK)
- bmp.writeString(legendArrows[index][0][:45], 106, i, 64)
- elif index < len(legendArrows) and legendArrows[index][2] == "frame":
- theColor = Color(
- legendArrows[index][1][0],
- legendArrows[index][1][1],
- legendArrows[index][1][2],
- )
- bmp.setPenColor(theColor)
- bmp.drawRightFrame(5, i - 48, 96, 128, genet, 1)
- bmp.setPenColor(Color.BLACK)
- bmp.writeString(legendArrows[index][0][:45], 106, i, 64)
- elif index < len(legendArrows) and legendArrows[index][2] == "pointer":
- theColor = Color(
- legendArrows[index][1][0],
- legendArrows[index][1][1],
- legendArrows[index][1][2],
- )
- bmp.setPenColor(theColor)
- bmp.drawPointer(34, i, 64, genet)
- bmp.setPenColor(Color.BLACK)
- bmp.writeString(legendArrows[index][0][:45], 106, i, 64)
- index += 1
- for i in range(columnhei - 74, 10, -90):
- if index < len(legendArrows) and legendArrows[index][2] == "rect":
- theColor = Color(
- legendArrows[index][1][0],
- legendArrows[index][1][1],
- legendArrows[index][1][2],
- )
- bmp.setPenColor(theColor)
- bmp.drawOutRect(5 + width / 3, i, 96, 64, genet)
- bmp.setPenColor(Color.BLACK)
- bmp.writeString(legendArrows[index][0][:45], 106 + width / 3, i, 64)
- elif index < len(legendArrows) and legendArrows[index][2] == "arrow":
- theColor = Color(
- legendArrows[index][1][0],
- legendArrows[index][1][1],
- legendArrows[index][1][2],
- )
- bmp.setPenColor(theColor)
- bmp.drawRightArrow(5 + width / 3, i, 96, 64, genet)
- bmp.setPenColor(Color.BLACK)
- bmp.writeString(legendArrows[index][0][:45], 106 + width / 3, i, 64)
- elif index < len(legendArrows) and legendArrows[index][2] == "frame":
- theColor = Color(
- legendArrows[index][1][0],
- legendArrows[index][1][1],
- legendArrows[index][1][2],
- )
- bmp.setPenColor(theColor)
- bmp.drawRightFrame(5 + width / 3, i - 48, 96, 128, genet, 1)
- bmp.setPenColor(Color.BLACK)
- bmp.writeString(legendArrows[index][0][:45], 106 + width / 3, i, 64)
- elif index < len(legendArrows) and legendArrows[index][2] == "pointer":
- theColor = Color(
- legendArrows[index][1][0],
- legendArrows[index][1][1],
- legendArrows[index][1][2],
- )
- bmp.setPenColor(theColor)
- bmp.drawPointer(34 + width / 3, i, 64, genet)
- bmp.setPenColor(Color.BLACK)
- bmp.writeString(legendArrows[index][0][:45], 106 + width / 3, i, 64)
- index += 1
- if legend == "Top" or legend == "Top & Bottom":
- rung1 = totalheight - sum(toplegpos[:3]) - 30
- rung2 = rung1 + toplegpos[0] + 10
- rung3 = rung2 + toplegpos[1] + 10
- for i in legendTop:
- if i[0][0].lower() == i[0][0]:
- xpos = i[1] + 24
- else:
- xpos = i[1] + 32
- if i[2] == 1:
- bmp.writeString(i[0], xpos, rung1, 64, False, False, 1)
- elif i[2] == 2:
- bmp.writeString(i[0], xpos, rung2, 64, False, False, 1)
- elif i[2] == 3:
- bmp.writeString(i[0], xpos, rung3, 64, False, False, 1)
-
- if legend == "Bottom" or legend == "Top & Bottom":
- rung1 = sum(botlegpos[:3]) + 30 + columnhei
- rung2 = rung1 - botlegpos[0] - 10
- rung3 = rung2 - botlegpos[1] - 10
- for i in legendBot:
- if i[0][-1].lower() == i[0][-1]:
- xpos = i[1] + 24
- else:
- xpos = i[1] + 32
- if i[2] == 1:
- bmp.writeString(i[0], xpos, rung1, 64, False, False, 1, "right")
- elif i[2] == 2:
- bmp.writeString(i[0], xpos, rung2, 64, False, False, 1, "right")
- elif i[2] == 3:
- bmp.writeString(i[0], xpos, rung3, 64, False, False, 1, "right")
- if drawfig2 != False:
- bmp.setPenColor(Color.BLACK)
- x1 = width - 600 - drawfig2 * 1.0 / maxlength * width
- x2 = width - 600
- bmp.drawLine(x1, columnhei - height1 / 2 - 74, x2, columnhei - height1 / 2 - 74)
- bmp.drawLine(
- x1, columnhei - height1 / 2 - 1 - 74, x2, columnhei - height1 / 2 - 1 - 74
- )
- bmp.drawLine(
- x1, columnhei - height1 / 2 + 1 - 74, x2, columnhei - height1 / 2 + 1 - 74
- )
- bmp.drawLine(
- x1 - 1,
- columnhei - height1 / 4 - 74,
- x1 - 1,
- columnhei - height1 / 4 * 3 - 74,
- )
- bmp.drawLine(
- x1 + 1,
- columnhei - height1 / 4 - 74,
- x1 + 1,
- columnhei - height1 / 4 * 3 - 74,
- )
- bmp.drawLine(
- x1, columnhei - height1 / 4 - 74, x1, columnhei - height1 / 4 * 3 - 74
- )
- bmp.drawLine(
- x2, columnhei - height1 / 4 - 74, x2, columnhei - height1 / 4 * 3 - 74
- )
- bmp.drawLine(
- x2 + 1,
- columnhei - height1 / 4 - 74,
- x2 + 1,
- columnhei - height1 / 4 * 3 - 74,
- )
- bmp.drawLine(
- x2 - 1,
- columnhei - height1 / 4 - 74,
- x2 - 1,
- columnhei - height1 / 4 * 3 - 74,
- )
- strfig2 = str(drawfig2)
- if strfig2[-6:] == "000000":
- strfig2 = strfig2[:-6] + " Mbp"
- elif strfig2[-3:] == "000":
- strfig2 = strfig2[:-3] + " Kbp"
- testbmp = BitMap(10, 10)
- bmp.writeString(
- strfig2,
- (x1 + x2) / 2 - testbmp.lengthString(strfig2, 64) / 2,
- columnhei - height1 / 4 - 59,
- 64,
- )
- # draws the graph
- if graphit != None:
- thearray, maxgc, mingc, gheight, glinet, gtype, gmaxy, ggap = graphit
- widthpixellist = []
- leftpixellist = []
- rightpixellist = []
- for i in range(len(thearray)):
- if aln == "best blast":
- shifter = blastmatch[i]
- if reverseList[i]:
- rightpixel = convertPosR(secondlist[i * 2][0], maxlength, width, 0, aln)
- leftpixel = convertPosR(
- secondlist[i * 2][0], maxlength, width, secondlist[i * 2][0], aln
- )
- thearray[i].reverse()
- else:
- leftpixel = convertPos(secondlist[i * 2][0], maxlength, width, 0, aln)
- rightpixel = convertPos(
- secondlist[i * 2][0], maxlength, width, secondlist[i * 2][0], aln
- )
-
- widthpixel = rightpixel - leftpixel + 1
- widthpixellist.append(widthpixel)
- leftpixellist.append(leftpixel)
- rightpixellist.append(rightpixel)
- neg = False
- if gmaxy == "Auto":
- gmaxy = 0
- for i in range(0, len(thearray)):
- if min(thearray[i]) < 0:
- neg = True
- for j in range(0, widthpixellist[i]):
- aa = int(j * (len(thearray[i]) * 1.0 / widthpixellist[i]))
- bb = int((j + 1) * (len(thearray[i]) * 1.0 / widthpixellist[i]))
- if aa == bb:
- bb += 1
- temparr = thearray[i][aa:bb]
- gyval = abs(sum(temparr) * 1.0 / len(temparr))
- if gyval > gmaxy:
- gmaxy = gyval
- else:
- gmaxy = float(gmaxy)
- for i in range(0, len(thearray)):
- if min(thearray[i]) < 0:
- neg = True
- if neg:
- axispos = hei - ggap - gheight / 2 - glinet / 2
- else:
- axispos = hei - ggap - gheight - glinet
- gc1, gc2, gc3 = maxgc
- maxgcColour = Color(gc1, gc2, gc3)
- bmp.setPenColor(maxgcColour)
- gc1, gc2, gc3 = mingc
- mingcColour = Color(gc1, gc2, gc3)
- for qq in range(len(thearray)):
- bmp.setPenColor(Color.BLACK)
- lastgypos = None
- for i in range(axispos, axispos + glinet):
- bmp.drawLine(leftpixellist[qq], i, rightpixellist[qq], i)
- bmp.setPenColor(maxgcColour)
- for i in range(0, widthpixellist[qq]):
- aa = int(i * (len(thearray[qq]) * 1.0 / widthpixellist[qq]))
- bb = int((i + 1) * (len(thearray[qq]) * 1.0 / widthpixellist[qq]))
- if aa == bb:
- bb += 1
- temparr = thearray[qq][aa:bb]
- gyval = sum(temparr) * 1.0 / len(temparr)
- yvalpixratio = gyval / gmaxy
- if yvalpixratio > 1:
- yvalpixratio = 1
- if yvalpixratio < -1:
- yvalpixratio = -1
- if neg:
- if yvalpixratio < 0:
- gc1, gc2, gc3 = mingc
- bmp.setPenColor(mingcColour)
- yvalpix = round(yvalpixratio * (gheight / 2 - glinet / 2))
- if gtype == "Line":
- if lastgypos != None:
- bmp.drawLine(
- leftpixellist[qq] + i - 1,
- lastgypos,
- leftpixellist[qq] + i,
- axispos + yvalpix,
- )
- lastgypos = axispos + yvalpix
- elif gtype == "Histogram":
- bmp.drawLine(
- leftpixellist[qq] + i,
- axispos - 1,
- leftpixellist[qq] + i,
- axispos + yvalpix,
- )
- else:
- gc1, gc2, gc3 = maxgc
- yvalpix = round(
- yvalpixratio * (gheight / 2 - (glinet - glinet / 2))
- )
- bmp.setPenColor(maxgcColour)
- if gtype == "Line":
- if lastgypos != None:
- bmp.drawLine(
- leftpixellist[qq] + i - 1,
- lastgypos,
- leftpixellist[qq] + i,
- axispos + glinet + yvalpix,
- )
- lastgypos = axispos + glinet + yvalpix
- elif gtype == "Histogram" and round(yvalpix) != 0.0:
- bmp.drawLine(
- leftpixellist[qq] + i,
- axispos + glinet,
- leftpixellist[qq] + i,
- axispos + yvalpix,
- )
- else:
- yvalpix = round(yvalpixratio * (gheight - glinet))
- if gtype == "Line":
- if lastgypos != None:
- bmp.drawLine(
- leftpixellist[qq] + i - 1,
- lastgypos,
- i,
- leftpixellist[qq] + axispos + glinet + yvalpix,
- )
- lastgypos = axispos + glinet + 1 + yvalpix
- elif gtype == "Histogram" and round(yvalpix) != 0.0:
- bmp.drawLine(
- leftpixellist[qq] + i,
- axispos + glinet,
- leftpixellist[qq] + i,
- axispos + glinet + yvalpix,
- )
- axispos -= gheight + 2 * ggap + height1 + height2
- modfig1 = (graphit[3] + 2 * ggap) * len(graphit[0])
- else:
- modfig1 = 0
- # draws the blast gradient legend
- if drawfig1 and minident != 101:
- bmp.setPenColor(Color.BLACK)
- bmp.writeString(
- str(int(round(minident))) + "%", width - 300, columnhei - 480, 64
- )
- bmp.writeString("100%", width - 300, columnhei - 84, 64)
- for i in range(columnhei - 480, columnhei - 20):
- ratio = round((i - (columnhei - 480) * 1.0) / 460, 2)
- r1 = int(minblastc[0] * (1 - ratio) + maxblastc[0] * ratio)
- r2 = int(minblastc[1] * (1 - ratio) + maxblastc[1] * ratio)
- r3 = int(minblastc[2] * (1 - ratio) + maxblastc[2] * ratio)
- theColor = Color(r1, r2, r3)
- bmp.setPenColor(theColor)
- bmp.drawLine(width - 400, i, width - 360, i)
- r1 = int(minblastci[0] * (1 - ratio) + maxblastci[0] * ratio)
- r2 = int(minblastci[1] * (1 - ratio) + maxblastci[1] * ratio)
- r3 = int(minblastci[2] * (1 - ratio) + maxblastci[2] * ratio)
- theColor = Color(r1, r2, r3)
- bmp.setPenColor(theColor)
- bmp.drawLine(width - 360, i, width - 320, i)
- # draws feature and blast figures
- for i in range(0, len(secondlist)):
- # draws the blast figure
- if i % 2 == 0:
- if aln == "best blast":
- shifter = blastmatch[int(i / 2)]
- genrev1 = reverseList[int(i / 2)]
- ymod = totalheight - (height1 * i / 2 + height2 * i / 2) - height1
- if graphit != None and len(thearray) > 1:
- ymod += (gheight + 2 * ggap) * (len(thearray) - i / 2 - 1)
- if legend == "Top" or legend == "Top & Bottom":
- ymod -= sum(toplegpos[:3]) + 40
- length = secondlist[i][0]
- bmp.setPenColor(Color.BLACK)
- jj = height1 / 2 + glt / 2
- for j in range(glt):
- bmp.drawLine(
- convertPos(length, maxlength, width, 0, aln),
- (ymod + jj),
- convertPos(length, maxlength, width, length, aln),
- (ymod + jj),
- )
- jj -= 1
- bmp.setPenColor(Color.RED)
- for j in secondlist[i][1]:
- if abortCaptain:
- return None
- if (j.strand == "+" and not genrev1) or (j.strand == "-" and genrev1):
- theColor = Color(j.colour[0], j.colour[1], j.colour[2])
- bmp.setPenColor(theColor)
- if type(j.start) == int:
- if genrev1:
- x2 = convertPosR(length, maxlength, width, j.start, aln)
- x1 = convertPosR(length, maxlength, width, j.stop, aln)
- else:
- x1 = convertPos(length, maxlength, width, j.start, aln)
- x2 = convertPos(length, maxlength, width, j.stop, aln)
- if featDict[j.type][0] == "rect":
- bmp.drawOutRect(x1, ymod, x2 - x1, height1, genet)
- elif featDict[j.type][0] == "arrow":
- bmp.drawRightArrow(x1, ymod, x2 - x1, height1, genet)
- elif featDict[j.type][0] == "frame":
- bmp.drawRightFrame(
- x1, ymod, x2 - x1, height1, genet, j.start % 3
- )
- elif featDict[j.type][0] == "pointer":
- bmp.drawPointer(x1, ymod, height1, genet)
- else:
- if genrev1:
- x2 = convertPosR(length, maxlength, width, j.start[-1], aln)
- x1 = convertPosR(length, maxlength, width, j.stop[-1], aln)
- else:
- x1 = convertPos(length, maxlength, width, j.start[-1], aln)
- x2 = convertPos(length, maxlength, width, j.stop[-1], aln)
- if featDict[j.type][0] == "rect":
- bmp.drawOutRect(x1, ymod, x2 - x1, height1, genet)
- elif featDict[j.type][0] == "arrow":
- bmp.drawRightArrow(x1, ymod, x2 - x1, height1, genet)
- elif featDict[j.type][0] == "frame":
- bmp.drawRightFrame(
- x1, ymod, x2 - x1, height1, genet, j.start[-1] % 3
- )
- elif featDict[j.type][0] == "pointer":
- bmp.drawPointer(x1, ymod, height1, genet)
- for k in range(2, len(j.start) + 1):
- if genrev1:
- x4 = convertPosR(
- length, maxlength, width, j.start[-k], aln
- )
- x3 = convertPosR(
- length, maxlength, width, j.stop[-k], aln
- )
- else:
- x3 = convertPos(
- length, maxlength, width, j.start[-k], aln
- )
- x4 = convertPos(
- length, maxlength, width, j.stop[-k], aln
- )
- if (
- featDict[j.type][0] == "arrow"
- or featDict[j.type][0] == "rect"
- ):
- if x1 - x4 > 2:
- bmp.setPenColor(Color.BLACK)
- bmp.drawDash(
- x4,
- ymod + 3 * height1 / 4,
- x4,
- ymod + height1,
- exont,
- )
- bmp.drawDash(
- x4, ymod + height1, x1, ymod + height1, exont
- )
- bmp.drawDash(
- x1,
- ymod + height1,
- x1,
- ymod + 3 * height1 / 4,
- exont,
- )
- bmp.setPenColor(theColor)
- bmp.drawOutRect(
- x3, ymod + height1 / 4, x4 - x3, height1 / 2, genet
- )
- elif featDict[j.type][0] == "frame":
- if x1 - x4 > 2:
- bmp.setPenColor(Color.BLACK)
- bmp.drawDash(
- x4,
- ymod + 3 * height1 / 4,
- x4,
- ymod + height1,
- exont,
- )
- bmp.drawDash(
- x4, ymod + height1, x1, ymod + height1, exont
- )
- bmp.drawDash(
- x1,
- ymod + height1,
- x1,
- ymod + 3 * height1 / 4,
- exont,
- )
- bmp.setPenColor(theColor)
- bmp.drawRightFrameRect(
- x3, ymod, x4 - x3, height1, genet, j.start[-k] % 3
- )
- x1, x2 = x3, x4
- else:
- theColor = Color(j.colour[0], j.colour[1], j.colour[2])
- bmp.setPenColor(theColor)
- if type(j.start) == int:
- if genrev1:
- x2 = convertPosR(length, maxlength, width, j.start, aln)
- x1 = convertPosR(length, maxlength, width, j.stop, aln)
- else:
- x1 = convertPos(length, maxlength, width, j.start, aln)
- x2 = convertPos(length, maxlength, width, j.stop, aln)
- if featDict[j.type][0] == "rect":
- bmp.drawOutRect(x1, ymod, x2 - x1, height1, genet)
- elif featDict[j.type][0] == "arrow":
- bmp.drawLeftArrow(x1, ymod, x2 - x1, height1, genet)
- elif featDict[j.type][0] == "frame":
- bmp.drawLeftFrame(
- x1, ymod, x2 - x1, height1, genet, j.stop % 3
- )
- elif featDict[j.type][0] == "pointer":
- bmp.drawPointer(x2, ymod, height1, genet)
- else:
- if genrev1:
- x2 = convertPosR(length, maxlength, width, j.start[0], aln)
- x1 = convertPosR(length, maxlength, width, j.stop[0], aln)
- else:
- x1 = convertPos(length, maxlength, width, j.start[0], aln)
- x2 = convertPos(length, maxlength, width, j.stop[0], aln)
- if featDict[j.type][0] == "rect":
- bmp.drawOutRect(x1, ymod, x2 - x1, height1, genet)
- elif featDict[j.type][0] == "arrow":
- bmp.drawLeftArrow(x1, ymod, x2 - x1, height1, genet)
- elif featDict[j.type][0] == "frame":
- bmp.drawLeftFrame(
- x1, ymod, x2 - x1, height1, genet, j.stop[0] % 3
- )
- elif featDict[j.type][0] == "pointer":
- bmp.drawPointer(x2, ymod, height1, genet)
- for k in range(1, len(j.start)):
- if genrev1:
- x4 = convertPosR(
- length, maxlength, width, j.start[k], aln
- )
- x3 = convertPosR(
- length, maxlength, width, j.stop[k], aln
- )
- else:
- x3 = convertPos(
- length, maxlength, width, j.start[k], aln
- )
- x4 = convertPos(
- length, maxlength, width, j.stop[k], aln
- )
- if (
- featDict[j.type][0] == "rect"
- or featDict[j.type][0] == "arrow"
- ):
- if x3 - x2 > 2:
- bmp.setPenColor(Color.BLACK)
- bmp.drawDash(
- x2,
- ymod + 3 * height1 / 4,
- x2,
- ymod + height1,
- exont,
- )
- bmp.drawDash(
- x2, ymod + height1, x3, ymod + height1, exont
- )
- bmp.drawDash(
- x3,
- ymod + height1,
- x3,
- ymod + 3 * height1 / 4,
- exont,
- )
- bmp.setPenColor(theColor)
- bmp.drawOutRect(
- x3, ymod + height1 / 4, x4 - x3, height1 / 2, genet
- )
- elif featDict[j.type][0] == "frame":
- if x3 - x2 > 2:
- bmp.setPenColor(Color.BLACK)
- bmp.drawDash(
- x2, ymod + height1 / 4, x2, ymod, exont
- )
- bmp.drawDash(x2, ymod, x3, ymod, exont)
- bmp.drawDash(
- x3, ymod, x3, ymod + height1 / 4, exont
- )
- bmp.setPenColor(theColor)
- bmp.drawLeftFrameRect(
- x3, ymod, x4 - x3, height1, genet, j.stop[k] % 3
- )
- x1, x2 = x3, x4
- else:
- # draws teh blast hits
- genrev2 = reverseList[int((i + 1) / 2)]
- length1 = secondlist[i - 1][0]
- length2 = secondlist[i + 1][0]
- ymod = (
- totalheight
- - (height1 * (i - 1) / 2 + height2 * (i - 1) / 2)
- - height1
- - 1
- )
- if graphit != None and len(thearray) > 1:
- ymod += (gheight + 2 * ggap) * (len(thearray) - i / 2 - 1)
- if legend == "Top" or legend == "Top & Bottom":
- ymod -= sum(toplegpos[:3]) + 40
- y1 = ymod
- y2 = y1 - height2 + 1
- for j in secondlist[i]:
- if abortCaptain:
- return None
- qStart, qEnd, rStart, rEnd, ident = j
- # is the blast hit inverted
- if (
- (rStart < rEnd and not genrev1 and not genrev2)
- or (rStart > rEnd and not genrev1 and genrev2)
- or (rStart < rEnd and genrev1 and genrev2)
- or (rStart > rEnd and genrev1 and not genrev2)
- ):
- crisscross = False
- else:
- crisscross = True
- try:
- ratio = round((ident - minident) / (100 - minident), 2)
- except:
- ratio = 1
- if crisscross:
- r1 = int(minblastci[0] * (1 - ratio) + maxblastci[0] * ratio)
- r2 = int(minblastci[1] * (1 - ratio) + maxblastci[1] * ratio)
- r3 = int(minblastci[2] * (1 - ratio) + maxblastci[2] * ratio)
- else:
- r1 = int(minblastc[0] * (1 - ratio) + maxblastc[0] * ratio)
- r2 = int(minblastc[1] * (1 - ratio) + maxblastc[1] * ratio)
- r3 = int(minblastc[2] * (1 - ratio) + maxblastc[2] * ratio)
- theColor = Color(r1, r2, r3)
- bmp.setPenColor(theColor)
- if aln == "best blast":
- shifter = blastmatch[int(i / 2)]
- if genrev1:
- x1e = convertPosR(length1, maxlength, width, qStart, aln)
- x1s = convertPosR(length1, maxlength, width, qEnd, aln)
- else:
- x1s = convertPos(length1, maxlength, width, qStart, aln)
- x1e = convertPos(length1, maxlength, width, qEnd, aln)
- if aln == "best blast":
- shifter = blastmatch[int((i + 1) / 2)]
- if genrev2 and rStart < rEnd:
- x2e = convertPosR(length2, maxlength, width, rStart, aln)
- x2s = convertPosR(length2, maxlength, width, rEnd, aln)
- elif genrev2 and rStart >= rEnd:
- x2s = convertPosR(length2, maxlength, width, rStart, aln)
- x2e = convertPosR(length2, maxlength, width, rEnd, aln)
- elif not genrev2 and rStart < rEnd:
- x2s = convertPos(length2, maxlength, width, rStart, aln)
- x2e = convertPos(length2, maxlength, width, rEnd, aln)
- else:
- x2e = convertPos(length2, maxlength, width, rStart, aln)
- x2s = convertPos(length2, maxlength, width, rEnd, aln)
- if crisscross:
- if x1e - x1s >= x2e - x2s:
- for k in range(x1s, x1e):
- try:
- x2 = x2e - (k - x1s) * 1.0 / (x1e - x1s) * (x2e - x2s)
- bmp.drawLine(k, y1, x2, y2)
- except:
- pass
- else:
- for k in range(x2s, x2e):
- x1 = x1e - (k - x2s) * 1.0 / (x2e - x2s) * (x1e - x1s)
- bmp.drawLine(x1, y1, k, y2)
- if blastoutline:
- bmp.setPenColor(Color.BLACK)
- bmp.drawLine(x1s, y1, x2e, y2)
- bmp.drawLine(x1e, y1, x2s, y2)
- else:
- if x1e - x1s >= x2e - x2s:
- for k in range(x1s, x1e):
- try:
- x2 = (k - x1s) * 1.0 / (x1e - x1s) * (x2e - x2s) + x2s
- bmp.drawLine(k, y1, x2, y2)
- bmp.drawLine(k + 1, y1, x2, y2)
- except:
- pass
- else:
- for k in range(x2s, x2e):
- x1 = (k - x2s) * 1.0 / (x2e - x2s) * (x1e - x1s) + x1s
- bmp.drawLine(x1, y1, k, y2)
- bmp.drawLine(x1, y1, k + 1, y2)
- if blastoutline:
- bmp.setPenColor(Color.BLACK)
- bmp.drawLine(x1s, y1, x2s, y2)
- bmp.drawLine(x1e, y1, x2e, y2)
- if writebmp == 0:
- bmp.saveFile(filename, compress)
- return minident
- elif writebmp == 1:
- return bmp.createGIFString(True), minident, bmp.wd, bmp.ht
- elif writebmp == 2:
- return bmp.createGIFString(False), minident, bmp.wd, bmp.ht
-
-
-def drawsvg(
- filename,
- minlength,
- mineval,
- minIdent,
- inputlist,
- width,
- height1,
- height2,
- minblastc,
- maxblastc,
- minblastci,
- maxblastci,
- drawfig1,
- drawfig2,
- drawfig3,
- compress,
- reverseList,
- featDict,
- glt,
- exont,
- genet,
- featlengths,
- aln,
- graphit,
- blastoutline,
- minmaxlist,
- autodetect,
- legend,
- legname,
-):
- # global variable for stopping script midway
- global abortCaptain
- secondlist = []
- maxlength = 0
- totalheight = 0
- # returning a minident value of 101 means the script has been aborted
- minident = 101
- # gets feature file and blast information
- for i in range(0, len(inputlist)):
- if i % 2 == 0:
- temp = getArrows(inputlist[i], legname)
- thirdlist = []
- if minmaxlist[int(i / 2)][1] == "Max":
- if temp[0] == None:
- maxcut = featlengths[int(i / 2)]
- else:
- maxcut = temp[0]
- if minmaxlist[int(i / 2)][0] == 1:
- minmaxopt = 0
- else:
- minmaxopt = 1
- mincut = minmaxlist[int(i / 2)][0]
- else:
- mincut = minmaxlist[int(i / 2)][0]
- maxcut = minmaxlist[int(i / 2)][1]
- if minmaxlist[int(i / 2)][0] < minmaxlist[int(i / 2)][1]:
- minmaxopt = 1
- else:
- minmaxopt = 2
- for j in temp[1]:
- if j.type in featDict:
- if j.colour == None:
- j.colour = featDict[j.type][1]
- if minmaxopt == 0:
- thirdlist.append(j)
- elif minmaxopt == 1:
- if type(j.start) == int:
- if j.start >= mincut and j.stop <= maxcut:
- aninstance = feature(
- j.start - mincut + 1,
- j.stop - mincut + 1,
- j.type,
- j.strand,
- j.colour,
- j.name,
- )
- thirdlist.append(aninstance)
- else:
- if j.start[0] >= mincut and j.stop[-1] <= maxcut:
- tempstart = []
- for k in j.start:
- tempstart.append(k - mincut + 1)
- tempstop = []
- for k in j.stop:
- tempstop.append(k - mincut + 1)
- aninstance = feature(
- tempstart,
- tempstop,
- j.type,
- j.strand,
- j.colour,
- j.name,
- )
- thirdlist.append(aninstance)
- elif minmaxopt == 2:
- if temp[0] == None:
- templength = featlength[int(i / 2)]
- else:
- templength = temp[0]
- if type(j.start) == int:
- if j.stop <= maxcut:
- tempstart = j.start + templength - mincut + 1
- tempstop = j.stop + templength - mincut + 1
- aninstance = feature(
- tempstart,
- tempstop,
- j.type,
- j.strand,
- j.colour,
- j.name,
- )
- thirdlist.append(aninstance)
- elif j.start >= mincut:
- tempstart = j.start - mincut + 1
- tempstop = j.stop - mincut + 1
- aninstance = feature(
- tempstart,
- tempstop,
- j.type,
- j.strand,
- j.colour,
- j.name,
- )
- thirdlist.append(aninstance)
- else:
- if j.stop[-1] <= maxcut:
- tempstart = []
- for k in j.start:
- tempstart.append(k + templength - mincut + 1)
- tempstop = []
- for k in j.stop:
- tempstop.append(k + templength - mincut + 1)
- aninstance = feature(
- tempstart,
- tempstop,
- j.type,
- j.strand,
- j.colour,
- j.name,
- )
- thirdlist.append(aninstance)
- elif j.start[0] >= mincut:
- tempstart = []
- for k in j.start:
- tempstart.append(k - mincut + 1)
- tempstop = []
- for k in j.stop:
- tempstop.append(k - mincut + 1)
- aninstance = feature(
- tempstart,
- tempstop,
- j.type,
- j.strand,
- j.colour,
- j.name,
- )
- thirdlist.append(aninstance)
- thirdlist.sort(key=lambda i: i.length(), reverse=True)
- if minmaxopt == 0:
- if temp[0] == None:
- secondlist.append((featlengths[int(i / 2)], thirdlist))
- if featlengths[int(i / 2)] > maxlength:
- maxlength = featlengths[int(i / 2)]
- else:
- secondlist.append((temp[0], thirdlist))
- if temp[0] >= maxlength:
- maxlength = temp[0]
- elif minmaxopt == 1:
- if maxcut == "Max":
- maxcut = temp[0]
- secondlist.append((maxcut - mincut + 1, thirdlist))
- if maxcut - mincut + 1 > maxlength:
- maxlength = maxcut - mincut + 1
- elif minmaxopt == 2:
- if temp[0] == None:
- templength = featlengths[int(i / 2)]
- else:
- templength = temp[0]
- secondlist.append((templength - mincut + maxcut + 1, thirdlist))
- if templength - mincut + maxcut + 1 > maxlength:
- maxlength = templength - mincut + maxlength + 1
- totalheight += height1
- else:
- totalheight += height2
- temp = getBlast(inputlist[i], minlength, mineval, minIdent)
- for j in temp:
- if j[4] < minident:
- minident = j[4]
- secondlist.append(temp)
- # calculates offsets for genomes if best blast alignment is selected
- if autodetect and maxlength > 100000:
- tempsecond = []
- minident = 101
- for i in range(len(secondlist)):
- temp = []
- if i % 2 == 0:
- for j in secondlist[i][1]:
- if type(j.start) == int:
- if (j.stop - j.start) * 1.0 / maxlength * width > 4:
- temp.append(j)
- else:
- if (j.stop[0] - j.start[0]) * 1.0 / maxlength * width > 4:
- temp.append(j)
- tempsecond.append((secondlist[i][0], temp))
- else:
- for j in secondlist[i]:
- if (j[1] - j[0]) * 1.0 / maxlength * width > 3:
- temp.append(j)
- if j[4] < minident:
- minident = j[4]
- tempsecond.append(temp)
- secondlist = tempsecond
- if minIdent != 0:
- minident = minIdent
- if aln == "best blast":
- blastmatch = [0]
- for i in range(1, len(secondlist), 2):
- maxbitscore = 0
- for j in secondlist[i]:
- if j[1] - j[0] > maxbitscore:
- qstart, qend, rstart, rend = j[0], j[1], j[2], j[3]
- maxbitscore = j[1] - j[0]
- if len(secondlist[i]) == 0:
- theQstart = 0
- elif reverseList[int(i / 2)]:
- theQstart = secondlist[i - 1][0] - qend
- else:
- theQstart = qstart
- if reverseList[int((i + 1) / 2)]:
- if len(secondlist[i]) == 0:
- theRstart = 0
- elif rstart < rend:
- theRstart = secondlist[i + 1][0] - rend
- else:
- theRstart = secondlist[i + 1][0] - rstart
- else:
- if len(secondlist[i]) == 0:
- theRstart = 0
- elif rstart < rend:
- theRstart = rstart
- else:
- theRstart = rend
- blastmatch.append(blastmatch[-1] + theQstart - theRstart)
- theminblast = min(blastmatch)
- templist = []
- for i in blastmatch:
- templist.append(i - theminblast)
- blastmatch = templist
- for i in range(0, len(secondlist) + 1, 2):
- if secondlist[i][0] + blastmatch[int(i / 2)] > maxlength:
- maxlength = secondlist[i][0] + blastmatch[int(i / 2)]
- fighei = 0
- if legend == "Single column" or legend == "Two columns":
- legendArrows = set()
- legendList = []
- for i in range(len(secondlist)):
- if i % 2 == 0:
- legendList.append([])
- for j in secondlist[i][1]:
- if (
- j.name != None
- and (j.name, j.colour, featDict[j.type][0]) not in legendArrows
- ):
- legendArrows.add((j.name, j.colour, featDict[j.type][0]))
- if type(j.start) == int:
- tempjstart = j.start
- else:
- tempjstart = j.start[0]
- legendList[int(i / 2)].append(
- (j.name, j.colour, featDict[j.type][0], tempjstart)
- )
- if legend == "Single column":
- fighei = min([5000, len(legendArrows) * 90])
- elif legend == "Two columns":
- fighei = min([5000, (len(legendArrows) + 1) / 2 * 90])
- global shifter
- if legend == "Top" or legend == "Top & Bottom":
- toplegpos = [0, 0, 0, set(), set(), set()]
- legendTop = []
- testbmp = BitMap(10, 10)
- if aln == "best blast":
- shifter = blastmatch[0]
- genrev1 = reverseList[0]
- for j in secondlist[0][1]:
- if j.name != None:
- if type(j.start) == int:
- firstleg = True
- secondleg = True
- thirdleg = True
- if genrev1:
- legpos = convertPosR(
- secondlist[0][0],
- maxlength,
- width,
- (j.start + j.stop) / 2,
- aln,
- )
- else:
- legpos = convertPos(
- secondlist[0][0],
- maxlength,
- width,
- (j.start + j.stop) / 2,
- aln,
- )
- for q in range(legpos - 40, legpos + 50):
- if q in toplegpos[3]:
- firstleg = False
- if q in toplegpos[4]:
- secondleg = False
- if q in toplegpos[5]:
- thirdleg = False
- if firstleg:
- therung = 1
- if testbmp.lengthString(j.name[:10], 64) > toplegpos[0]:
- toplegpos[0] = testbmp.lengthString(j.name[:10], 64)
- for q in range(legpos - 40, legpos + 50):
- toplegpos[3].add(q)
- # elif secondleg:
- # therung = 2
- # if testbmp.lengthString(j.name[:10], 64) > toplegpos[1]:
- # toplegpos[1] = testbmp.lengthString(j.name[:10], 64)
- # for q in range(legpos - 40, legpos + 50):
- # toplegpos[4].add(q)
- # elif thirdleg:
- # therung = 3
- # if testbmp.lengthString(j.name[:10], 64) > toplegpos[2]:
- # toplegpos[2] = testbmp.lengthString(j.name[:10], 64)
- # for q in range(legpos - 40, legpos + 50):
- # toplegpos[5].add(q)
- else:
- therung = None
- legendTop.append((j.name[:10], legpos, therung))
- else:
- firstleg = True
- secondleg = True
- thirdleg = True
- if genrev1:
- legpos = convertPosR(
- secondlist[0][0],
- maxlength,
- width,
- (j.start[0] + j.stop[0]) / 2,
- aln,
- )
- else:
- legpos = convertPos(
- secondlist[0][0],
- maxlength,
- width,
- (j.start[0] + j.stop[0]) / 2,
- aln,
- )
- for q in range(legpos - 40, legpos + 50):
- if q in toplegpos[3]:
- firstleg = False
- if q in toplegpos[4]:
- secondleg = False
- if q in toplegpos[5]:
- thirdleg = False
- if firstleg:
- therung = 1
- if testbmp.lengthString(j.name[:10], 64) > toplegpos[0]:
- toplegpos[0] = testbmp.lengthString(j.name[:10], 64)
- for q in range(legpos - 40, legpos + 50):
- toplegpos[3].add(q)
- # elif secondleg:
- # therung = 2
- # if testbmp.lengthString(j.name[:10], 64) > toplegpos[1]:
- # toplegpos[1] = testbmp.lengthString(j.name[:10], 64)
- # for q in range(legpos - 40, legpos + 50):
- # toplegpos[4].add(q)
- # elif thirdleg:
- # therung = 3
- # if testbmp.lengthString(j.name[:10], 64) > toplegpos[2]:
- # toplegpos[2] = testbmp.lengthString(j.name[:10], 64)
- # for q in range(legpos - 40, legpos + 50):
- # toplegpos[5].add(q)
- else:
- therung = None
- legendTop.append((j.name[:10], legpos, therung))
- totalheight += sum(toplegpos[:3]) + 40
- if legend == "Bottom" or legend == "Top & Bottom":
- botlegpos = [0, 0, 0, set(), set(), set()]
- legendBot = []
- testbmp = BitMap(10, 10)
- if aln == "best blast":
- shifter = blastmatch[-1]
- genrev1 = reverseList[-1]
- if aln == "best blast":
- shifter = blastmatch[-1]
- genrev1 = reverseList[-1]
- for j in secondlist[-1][1]:
- if j.name != None:
- if type(j.start) == int:
- firstleg = True
- secondleg = True
- thirdleg = True
- if genrev1:
- legpos = convertPosR(
- secondlist[-1][0],
- maxlength,
- width,
- (j.start + j.stop) / 2,
- aln,
- )
- else:
- legpos = convertPos(
- secondlist[-1][0],
- maxlength,
- width,
- (j.start + j.stop) / 2,
- aln,
- )
- for q in range(legpos - 40, legpos + 50):
- if q in botlegpos[3]:
- firstleg = False
- if q in botlegpos[4]:
- secondleg = False
- if q in botlegpos[5]:
- thirdleg = False
- if firstleg:
- therung = 1
- if testbmp.lengthString(j.name[:10], 64) > botlegpos[0]:
- botlegpos[0] = testbmp.lengthString(j.name[:10], 64)
- for q in range(legpos - 40, legpos + 50):
- botlegpos[3].add(q)
- # elif secondleg:
- # therung = 2
- # if testbmp.lengthString(j.name[:10], 64) > botlegpos[1]:
- # botlegpos[1] = testbmp.lengthString(j.name[:10], 64)
- # for q in range(legpos - 40, legpos + 50):
- # botlegpos[4].add(q)
- # elif thirdleg:
- # therung = 3
- # if testbmp.lengthString(j.name[:10], 64) > botlegpos[2]:
- # botlegpos[2] = testbmp.lengthString(j.name[:10], 64)
- # for q in range(legpos - 40, legpos + 50):
- # botlegpos[5].add(q)
- else:
- therung = None
- legendBot.append((j.name[:10], legpos, therung))
- else:
- firstleg = True
- secondleg = True
- thirdleg = True
- if genrev1:
- legpos = convertPosR(
- secondlist[-1][0],
- maxlength,
- width,
- (j.start[0] + j.stop[0]) / 2,
- aln,
- )
- else:
- legpos = convertPos(
- secondlist[-1][0],
- maxlength,
- width,
- (j.start[0] + j.stop[0]) / 2,
- aln,
- )
- for q in range(
- (j.start[0] + j.stop[0]) / 2 - 40,
- (j.start[0] + j.stop[0]) / 2 + 50,
- ):
- if q in botlegpos[3]:
- firstleg = False
- if q in botlegpos[4]:
- secondleg = False
- if q in botlegpos[5]:
- thirdleg = False
- if firstleg:
- therung = 1
- if testbmp.lengthString(j.name[:10], 64) > botlegpos[0]:
- botlegpos[0] = testbmp.lengthString(j.name[:10], 64)
- for q in range(
- (j.start[0] + j.stop[0]) / 2 - 40,
- (j.start[0] + j.stop[0]) / 2 + 50,
- ):
- botlegpos[3].add(q)
- # elif secondleg:
- # therung = 2
- # if testbmp.lengthString(j.name[:10], 64) > botlegpos[1]:
- # botlegpos[1] = testbmp.lengthString(j.name[:10], 64)
- # for q in range((j.start[0] + j.stop[0])/2 - 40, (j.start[0] + j.stop[0])/2 + 50):
- # botlegpos[4].add(q)
- # elif thirdleg:
- # therung = 3
- # if testbmp.lengthString(j.name[:10], 64) > botlegpos[2]:
- # botlegpos[2] = testbmp.lengthString(j.name[:10], 64)
- # for q in range((j.start[0] + j.stop[0])/2 - 40, (j.start[0] + j.stop[0])/2 + 50):
- # botlegpos[5].add(q)
- else:
- therung = None
- legendBot.append(
- (j.name[:10], (j.start[0] + j.stop[0]) / 2, therung)
- )
- totalheight += sum(botlegpos[:3]) + 40
- # creates extra width for blast identity legend
- drawfig1hei = 0
- if drawfig1 and minident != 101:
- drawfig1hei = 500
- extraheight = 0
- # creates extra height for scale legend
- drawfig2hei = 0
- if drawfig2:
- drawfig2hei = height1
- columnhei = max([fighei, drawfig1hei, drawfig2hei])
- totalheight += columnhei
- hei = totalheight
- # creates extra height for graph
- if graphit != None:
- hei += graphit[3] * len(graphit[0]) + 2 * graphit[7] * len(graphit[0])
- extraheight = (graphit[3] + 20) * len(graphit[0])
- svg = scalableVectorGraphics(hei + 1, width)
- if legend == "Single column":
- index = 0
- legendArrows = []
- for i in range(len(legendList)):
- x = legendList[i]
- x.sort(key=operator.itemgetter(3))
- if reverseList[i]:
- x.reverse()
- legendArrows += x
- for i in range(hei - columnhei + 74, hei, 90):
- if index < len(legendArrows) and legendArrows[index][2] == "rect":
- svg.drawOutRect(5, i - 64, 96, 64, legendArrows[index][1], genet)
- svg.writeString(legendArrows[index][0], 106, i, 64)
- elif index < len(legendArrows) and legendArrows[index][2] == "arrow":
- svg.drawRightArrow(
- 5, i - 64, 96, 64, legendArrows[index][1], (0, 0, 0), genet
- )
- svg.writeString(legendArrows[index][0], 106, i, 64)
- elif index < len(legendArrows) and legendArrows[index][2] == "frame":
- svg.drawRightFrame(5, i - 16, 96, 128, genet, 1, legendArrows[index][1])
- svg.writeString(legendArrows[index][0], 106, i, 64)
- elif index < len(legendArrows) and legendArrows[index][2] == "pointer":
- svg.drawPointer(34, i - 64, 64, genet, legendArrows[index][1])
- svg.writeString(legendArrows[index][0], 106, i, 64)
- index += 1
- elif legend == "Two columns":
- index = 0
- legendArrows = []
- for i in range(len(legendList)):
- x = legendList[i]
- x.sort(key=operator.itemgetter(3))
- if reverseList[i]:
- x.reverse()
- legendArrows += x
- for i in range(hei - columnhei + 74, hei, 90):
- if index < len(legendArrows) and legendArrows[index][2] == "rect":
- svg.drawOutRect(5, i - 64, 96, 64, legendArrows[index][1], genet)
- svg.writeString(legendArrows[index][0][:45], 106, i, 64)
- elif index < len(legendArrows) and legendArrows[index][2] == "arrow":
- svg.writeString(legendArrows[index][0][:45], 106, i, 64)
- svg.drawRightArrow(
- 5, i - 64, 96, 64, legendArrows[index][1], (0, 0, 0), genet
- )
- elif index < len(legendArrows) and legendArrows[index][2] == "frame":
- svg.drawRightFrame(5, i - 16, 96, 128, genet, 1, legendArrows[index][1])
- svg.writeString(legendArrows[index][0][:45], 106, i, 64)
- elif index < len(legendArrows) and legendArrows[index][2] == "pointer":
- svg.drawPointer(34, i - 64, 64, genet, legendArrows[index][1])
- svg.writeString(legendArrows[index][0][:45], 76, i, 64)
- index += 1
- for i in range(hei - columnhei + 74, hei, 90):
- if index < len(legendArrows) and legendArrows[index][2] == "rect":
- svg.drawOutRect(
- 5 + width / 3, i - 64, 96, 64, legendArrows[index][1], genet
- )
- svg.writeString(legendArrows[index][0][:45], 106 + width / 3, i, 64)
- elif index < len(legendArrows) and legendArrows[index][2] == "arrow":
- svg.drawRightArrow(
- 5 + width / 3,
- i - 64,
- 96,
- 64,
- legendArrows[index][1],
- (0, 0, 0),
- genet,
- )
- svg.writeString(legendArrows[index][0][:45], 106 + width / 3, i, 64)
- elif index < len(legendArrows) and legendArrows[index][2] == "frame":
- svg.drawRightFrame(
- 5 + width / 3, i - 16, 96, 128, genet, 1, legendArrows[index][1]
- )
- svg.writeString(legendArrows[index][0][:45], 106 + width / 3, i, 64)
- elif index < len(legendArrows) and legendArrows[index][2] == "pointer":
- svg.drawPointer(
- 34 + width / 3, i - 64, 64, genet, legendArrows[index][1]
- )
- svg.writeString(legendArrows[index][0][:45], 76 + width / 3, i, 64)
- index += 1
- if legend == "Top" or legend == "Top & Bottom":
- rung1 = sum(toplegpos[:3]) + 30
- rung2 = rung1 - toplegpos[0] - 10
- rung3 = rung2 - toplegpos[1] - 10
- for i in legendTop:
- if i[0][0].lower() == i[0][0]:
- xpos = i[1] + 16
- else:
- xpos = i[1] + 32
- if i[2] == 1:
- svg.writeString(i[0], xpos, rung1, 64, False, False, 1)
- elif i[2] == 2:
- svg.writeString(i[0], xpos, rung2, 64, False, False, 1)
- elif i[2] == 3:
- svg.writeString(i[0], xpos, rung3, 64, False, False, 1)
- if legend == "Bottom" or legend == "Top & Bottom":
- rung1 = hei - sum(botlegpos[:3]) - 30 - columnhei
- rung2 = rung1 + botlegpos[0] + 10
- rung3 = rung2 + botlegpos[1] + 10
- for i in legendBot:
- if i[0][-1].lower() == i[0][-1]:
- xpos = i[1] + 16
- else:
- xpos = i[1] + 32
- if i[2] == 1:
- svg.writeString(i[0], xpos, rung1, 64, False, False, 1, "right")
- elif i[2] == 2:
- svg.writeString(i[0], xpos, rung2, 64, False, False, 1, "right")
- elif i[2] == 3:
- svg.writeString(i[0], xpos, rung3, 64, False, False, 1, "right")
- # draws the scale figure
- if drawfig2 != False:
- testbmp = BitMap(5, 5)
- x1 = width - 600 - drawfig2 * 1.0 / maxlength * width
- x2 = width - 600
- svg.drawLine(
- x1,
- hei - columnhei + height1 / 2 + 70,
- x2,
- hei - columnhei + height1 / 2 + 70,
- 3,
- )
- svg.drawLine(
- x1,
- hei - columnhei + height1 / 4 + 70,
- x1,
- hei - columnhei + height1 / 4 * 3 + 70,
- 3,
- )
- svg.drawLine(
- x2,
- hei - columnhei + height1 / 4 + 70,
- x2,
- hei - columnhei + height1 / 4 * 3 + 70,
- 3,
- )
- strfig2 = str(drawfig2)
- if strfig2[-6:] == "000000":
- strfig2 = strfig2[:-6] + " Mbp"
- elif strfig2[-3:] == "000":
- strfig2 = strfig2[:-3] + " Kbp"
- svg.writeString(
- strfig2,
- (x1 + x2) / 2 - testbmp.lengthString(strfig2, 64) / 2,
- hei - columnhei + height1 / 4 + 65,
- 64,
- )
- # draws the graph
- if graphit != None:
- thearray, maxgc, mingc, gheight, glinet, gtype, gmaxy, ggap = graphit
- widthpixellist = []
- leftpixellist = []
- rightpixellist = []
- for i in range(len(thearray)):
- if aln == "best blast":
- shifter = blastmatch[i]
- if reverseList[i]:
- rightpixel = convertPosR(secondlist[i * 2][0], maxlength, width, 0, aln)
- leftpixel = convertPosR(
- secondlist[i * 2][0], maxlength, width, secondlist[i * 2][0], aln
- )
- thearray[i].reverse()
- else:
- leftpixel = convertPos(secondlist[i * 2][0], maxlength, width, 0, aln)
- rightpixel = convertPos(
- secondlist[i * 2][0], maxlength, width, secondlist[i * 2][0], aln
- )
-
- widthpixel = rightpixel - leftpixel + 1
- widthpixellist.append(widthpixel)
- leftpixellist.append(leftpixel)
- rightpixellist.append(rightpixel)
- neg = False
- if gmaxy == "Auto":
- gmaxy = 0
- for i in range(0, len(thearray)):
- if min(thearray[i]) < 0:
- neg = True
- for j in range(0, widthpixellist[i]):
- aa = int(j * (len(thearray[i]) * 1.0 / widthpixellist[i]))
- bb = int((j + 1) * (len(thearray[i]) * 1.0 / widthpixellist[i]))
- if aa == bb:
- bb += 1
- temparr = thearray[i][aa:bb]
- gyval = abs(sum(temparr) * 1.0 / len(temparr))
- if gyval > gmaxy:
- gmaxy = gyval
- else:
- gmaxy = float(gmaxy)
- for i in range(0, len(thearray)):
- if min(thearray[i]) < 0:
- neg = True
- if neg:
- axispos = ggap + gheight / 2 + glinet / 2
- else:
- axispos = ggap + gheight
- for qq in range(len(thearray)):
- lastgypos = None
- svg.drawLine(
- leftpixellist[qq],
- axispos + glinet / 2,
- rightpixellist[qq],
- axispos + glinet / 2,
- glinet,
- )
- for i in range(0, widthpixellist[qq]):
- aa = int(i * (len(thearray[qq]) * 1.0 / widthpixellist[qq]))
- bb = int((i + 1) * (len(thearray[qq]) * 1.0 / widthpixellist[qq]))
- if aa == bb:
- bb += 1
- temparr = thearray[qq][aa:bb]
- gyval = sum(temparr) * 1.0 / len(temparr)
- yvalpixratio = gyval / gmaxy
- if yvalpixratio > 1:
- yvalpixratio = 1
- if yvalpixratio < -1:
- yvalpixratio = -1
- if neg:
- if yvalpixratio < 0:
- gc1, gc2, gc3 = mingc
- yvalpix = round(yvalpixratio * (gheight / 2 - glinet / 2))
- if gtype == "Line":
- if lastgypos != None:
- svg.drawLine(
- leftpixellist[qq] + i - 1,
- lastgypos,
- leftpixellist[qq] + i,
- axispos - yvalpix,
- 1,
- mingc,
- )
- lastgypos = axispos - yvalpix
- elif gtype == "Histogram":
- svg.drawLine(
- leftpixellist[qq] + i,
- axispos + glinet / 2,
- leftpixellist[qq] + i,
- axispos - yvalpix,
- 1,
- mingc,
- )
- else:
- gc1, gc2, gc3 = maxgc
- yvalpix = round(
- yvalpixratio * (gheight / 2 - (glinet - glinet / 2))
- )
- if gtype == "Line":
- if lastgypos != None:
- svg.drawLine(
- leftpixellist[qq] + i - 1,
- lastgypos,
- leftpixellist[qq] + i,
- axispos - glinet - yvalpix,
- 1,
- maxgc,
- )
- lastgypos = axispos - glinet - yvalpix
- elif gtype == "Histogram" and round(yvalpix) != 0.0:
- svg.drawLine(
- leftpixellist[qq] + i,
- axispos - glinet / 2,
- leftpixellist[qq] + i,
- axispos - yvalpix,
- 1,
- maxgc,
- )
- else:
- yvalpix = round(yvalpixratio * (gheight - glinet))
- if gtype == "Line":
- if lastgypos != None:
- svg.drawLine(
- leftpixellist[qq] + i - 1,
- lastgypos,
- i,
- leftpixellist[qq] - axispos - glinet - yvalpix,
- 1,
- maxgc,
- )
- lastgypos = axispos - glinet - 1 - yvalpix
- elif gtype == "Histogram" and round(yvalpix) != 0.0:
- svg.drawLine(
- leftpixellist[qq] + i,
- axispos,
- leftpixellist[qq] + i,
- axispos - yvalpix,
- 1,
- maxgc,
- )
- axispos += gheight + 2 * ggap + height1 + height2
- modfig1 = (graphit[3] + 2 * ggap) * len(graphit[0])
- else:
- modfig1 = 0
- # draws the blast gradient legend
- if drawfig1 and minident != 101:
- svg.writeString(
- str(int(round(minident))) + "%", width - 300, hei - columnhei + 480, 64
- )
- svg.writeString("100%", width - 300, hei - columnhei + 84, 64)
- svg.drawGradient(
- width - 400, hei - columnhei + 20, 40, 460, minblastc, maxblastc
- )
- svg.drawGradient2(
- width - 360, hei - columnhei + 20, 40, 460, minblastci, maxblastci
- )
- # draws feature and blast figures
- for i in range(0, len(secondlist)):
- # draws the blast figure
- if i % 2 == 0:
- if aln == "best blast":
- shifter = blastmatch[int(i / 2)]
- genrev1 = reverseList[int(i / 2)]
- ymod = height1 * i / 2 + height2 * i / 2
- if graphit != None:
- ymod += (gheight + 2 * ggap) * (min([len(thearray), i / 2 + 1]))
- if legend == "Top" or legend == "Top & Bottom":
- ymod += sum(toplegpos[:3]) + 40
- length = secondlist[i][0]
- svg.drawLine(
- convertPos(length, maxlength, width, 0, aln),
- ymod + height1 / 2,
- convertPos(length, maxlength, width, length, aln),
- ymod + height1 / 2,
- glt,
- )
- for j in secondlist[i][1]:
- if abortCaptain:
- return None
- if (j.strand == "+" and not genrev1) or (j.strand == "-" and genrev1):
- if type(j.start) == int:
- if genrev1:
- x2 = convertPosR(length, maxlength, width, j.start, aln)
- x1 = convertPosR(length, maxlength, width, j.stop, aln)
- else:
- x1 = convertPos(length, maxlength, width, j.start, aln)
- x2 = convertPos(length, maxlength, width, j.stop, aln)
- if featDict[j.type][0] == "rect":
- svg.drawOutRect(
- x1, ymod, max([x2 - x1, 1]), height1, j.colour, genet
- )
- elif featDict[j.type][0] == "arrow":
- svg.drawRightArrow(
- x1,
- ymod,
- max([x2 - x1, 1]),
- height1,
- j.colour,
- (0, 0, 0),
- genet,
- )
- elif featDict[j.type][0] == "frame":
- svg.drawRightFrame(
- x1,
- ymod,
- max([x2 - x1, 1]),
- height1,
- genet,
- j.start % 3,
- j.colour,
- )
- elif featDict[j.type][0] == "pointer":
- svg.drawPointer(x1, ymod, height1, genet, j.colour)
- else:
- if genrev1:
- x2 = convertPosR(length, maxlength, width, j.start[-1], aln)
- x1 = convertPosR(length, maxlength, width, j.stop[-1], aln)
- else:
- x1 = convertPos(length, maxlength, width, j.start[-1], aln)
- x2 = convertPos(length, maxlength, width, j.stop[-1], aln)
- if featDict[j.type][0] == "rect":
- svg.drawOutRect(
- x1, ymod, max([x2 - x1, 1]), height1, j.colour, genet
- )
- elif featDict[j.type][0] == "arrow":
- svg.drawRightArrow(
- x1,
- ymod,
- max([x2 - x1, 1]),
- height1,
- j.colour,
- (0, 0, 0),
- genet,
- )
- elif featDict[j.type][0] == "frame":
- svg.drawRightFrame(
- x1,
- ymod,
- max([x2 - x1, 1]),
- height1,
- genet,
- j.start[-1] % 3,
- j.colour,
- )
- elif featDict[j.type][0] == "pointer":
- svg.drawPointer(x1, ymod, height1, genet, j.colour)
- for k in range(2, len(j.start) + 1):
- if genrev1:
- x4 = convertPosR(
- length, maxlength, width, j.start[-k], aln
- )
- x3 = convertPosR(
- length, maxlength, width, j.stop[-k], aln
- )
- else:
- x3 = convertPos(
- length, maxlength, width, j.start[-k], aln
- )
- x4 = convertPos(
- length, maxlength, width, j.stop[-k], aln
- )
- if (
- featDict[j.type][0] == "arrow"
- or featDict[j.type][0] == "rect"
- ):
- if x1 - x4 > 2:
- svg.drawDash(
- x4, ymod + height1 / 4, x4, ymod, exont
- )
- svg.drawDash(x4, ymod, x1, ymod, exont)
- svg.drawDash(
- x1, ymod, x1, ymod + height1 / 4, exont
- )
- svg.drawOutRect(
- x3,
- ymod + height1 / 4,
- x4 - x3,
- height1 / 2,
- j.colour,
- genet,
- )
- elif featDict[j.type][0] == "frame":
- if x1 - x4 > 2:
- svg.drawDash(
- x4, ymod + height1 / 4, x4, ymod, exont
- )
- svg.drawDash(x4, ymod, x1, ymod, exont)
- svg.drawDash(
- x1, ymod, x1, ymod + height1 / 4, exont
- )
- svg.drawRightFrameRect(
- x3,
- ymod,
- x4 - x3,
- height1,
- genet,
- j.start[-k] % 3,
- j.colour,
- )
- # need to get exons working for other types
- x1, x2 = x3, x4
- else:
- if type(j.start) == int:
- if genrev1:
- x2 = convertPosR(length, maxlength, width, j.start, aln)
- x1 = convertPosR(length, maxlength, width, j.stop, aln)
- else:
- x1 = convertPos(length, maxlength, width, j.start, aln)
- x2 = convertPos(length, maxlength, width, j.stop, aln)
- if featDict[j.type][0] == "rect":
- svg.drawOutRect(x1, ymod, x2 - x1, height1, j.colour, genet)
- elif featDict[j.type][0] == "arrow":
- svg.drawLeftArrow(
- x1, ymod, x2 - x1, height1, j.colour, (0, 0, 0), genet
- )
- elif featDict[j.type][0] == "frame":
- svg.drawLeftFrame(
- x1, ymod, x2 - x1, height1, genet, j.stop % 3, j.colour
- )
- elif featDict[j.type][0] == "pointer":
- svg.drawPointer(x1, ymod, height1, genet, j.colour)
- else:
- if genrev1:
- x2 = convertPosR(length, maxlength, width, j.start[0], aln)
- x1 = convertPosR(length, maxlength, width, j.stop[0], aln)
- else:
- x1 = convertPos(length, maxlength, width, j.start[0], aln)
- x2 = convertPos(length, maxlength, width, j.stop[0], aln)
- if featDict[j.type][0] == "rect":
- svg.drawOutRect(x1, ymod, x2 - x1, height1, j.colour, genet)
- elif featDict[j.type][0] == "arrow":
- svg.drawLeftArrow(
- x1, ymod, x2 - x1, height1, j.colour, (0, 0, 0), genet
- )
- elif featDict[j.type][0] == "frame":
- svg.drawLeftFrame(
- x1,
- ymod,
- x2 - x1,
- height1,
- genet,
- j.stop[0] % 3,
- j.colour,
- )
- elif featDict[j.type][0] == "pointer":
- svg.drawPointer(x1, ymod, height1, genet, j.colour)
- for k in range(1, len(j.start)):
- if genrev1:
- x4 = convertPosR(
- length, maxlength, width, j.start[k], aln
- )
- x3 = convertPosR(
- length, maxlength, width, j.stop[k], aln
- )
- else:
- x3 = convertPos(
- length, maxlength, width, j.start[k], aln
- )
- x4 = convertPos(
- length, maxlength, width, j.stop[k], aln
- )
- if (
- featDict[j.type][0] == "rect"
- or featDict[j.type][0] == "arrow"
- ):
- if x3 - x2 > 2:
- svg.drawDash(
- x2,
- ymod + 3 * height1 / 4,
- x2,
- ymod + height1,
- exont,
- )
- svg.drawDash(
- x2, ymod + height1, x3, ymod + height1, exont
- )
- svg.drawDash(
- x3,
- ymod + height1,
- x3,
- ymod + 3 * height1 / 4,
- exont,
- )
- elif featDict[j.type][0] == "frame":
- if x3 - x2 > 2:
- svg.drawDash(
- x2,
- ymod + 3 * height1 / 4,
- x2,
- ymod + height1,
- exont,
- )
- svg.drawDash(
- x2, ymod + height1, x3, ymod + height1, exont
- )
- svg.drawDash(
- x3,
- ymod + height1,
- x3,
- ymod + 3 * height1 / 4,
- exont,
- )
- svg.drawLeftFrameRect(
- x3,
- ymod,
- x4 - x3,
- height1,
- genet,
- j.stop[k] % 3,
- j.colour,
- )
- x1, x2 = x3, x4
- else:
- # draws teh blast hits
- genrev2 = reverseList[int((i + 1) / 2)]
- length1 = secondlist[i - 1][0]
- length2 = secondlist[i + 1][0]
- ymod = (height1 * (i - 1) / 2 + height2 * (i - 1) / 2) - 1 + height1
- if graphit != None:
- ymod += (gheight + 2 * ggap) * (min([len(thearray), i / 2 + 1]))
- if legend == "Top" or legend == "Top & Bottom":
- ymod += sum(toplegpos[:3]) + 40
- y1 = ymod
- y2 = y1 + height2 + 1
- for j in secondlist[i]:
- if abortCaptain:
- return None
- qStart, qEnd, rStart, rEnd, ident = j
- # is the blast hit inverted
- if (
- (rStart < rEnd and not genrev1 and not genrev2)
- or (rStart > rEnd and not genrev1 and genrev2)
- or (rStart < rEnd and genrev1 and genrev2)
- or (rStart > rEnd and genrev1 and not genrev2)
- ):
- crisscross = False
- else:
- crisscross = True
- try:
- ratio = round((ident - minident) / (100 - minident), 2)
- except:
- ratio = 1
- if crisscross:
- r1 = int(minblastci[0] * (1 - ratio) + maxblastci[0] * ratio)
- r2 = int(minblastci[1] * (1 - ratio) + maxblastci[1] * ratio)
- r3 = int(minblastci[2] * (1 - ratio) + maxblastci[2] * ratio)
- else:
- r1 = int(minblastc[0] * (1 - ratio) + maxblastc[0] * ratio)
- r2 = int(minblastc[1] * (1 - ratio) + maxblastc[1] * ratio)
- r3 = int(minblastc[2] * (1 - ratio) + maxblastc[2] * ratio)
- if aln == "best blast":
- shifter = blastmatch[int(i / 2)]
- if genrev1:
- x1e = convertPosR(length1, maxlength, width, qStart, aln)
- x1s = convertPosR(length1, maxlength, width, qEnd, aln)
- else:
- x1s = convertPos(length1, maxlength, width, qStart, aln)
- x1e = convertPos(length1, maxlength, width, qEnd, aln)
- if aln == "best blast":
- shifter = blastmatch[int((i + 1) / 2)]
- if genrev2 and rStart < rEnd:
- x2e = convertPosR(length2, maxlength, width, rStart, aln)
- x2s = convertPosR(length2, maxlength, width, rEnd, aln)
- elif genrev2 and rStart >= rEnd:
- x2s = convertPosR(length2, maxlength, width, rStart, aln)
- x2e = convertPosR(length2, maxlength, width, rEnd, aln)
- elif not genrev2 and rStart < rEnd:
- x2s = convertPos(length2, maxlength, width, rStart, aln)
- x2e = convertPos(length2, maxlength, width, rEnd, aln)
- else:
- x2e = convertPos(length2, maxlength, width, rStart, aln)
- x2s = convertPos(length2, maxlength, width, rEnd, aln)
- if crisscross:
- svg.drawBlastHit(x1s, y1, x1e, y1, x2s, y2, x2e, y2, (r1, r2, r3))
- if blastoutline:
- svg.drawLine(x1s, y1, x2e, y2)
- svg.drawLine(x1e, y1, x2s, y2)
- else:
- svg.drawBlastHit(x1s, y1, x1e, y1, x2e, y2, x2s, y2, (r1, r2, r3))
- if blastoutline:
- svg.drawLine(x1s, y1, x2s, y2)
- svg.drawLine(x1e, y1, x2e, y2)
- svg.writesvg(filename)
- return minident
-
-
-# The GUI
-class App:
- def __init__(self, master):
- self.pwd = os.getcwd()
- self.menubar = Menu(master)
- self.filemenu = Menu(self.menubar, tearoff=0)
- self.filemenu.add_command(label="New Figure", command=self.defaultoptions)
- self.filemenu.add_command(label="Save Settings", command=self.saveOptions)
- self.filemenu.add_command(label="Load Settings", command=self.openOptions)
- self.filemenu.add_separator()
- self.filemenu.add_command(label="Preferences", command=self.preferencewindow)
- self.filemenu.add_separator()
- self.filemenu.add_command(label="Exit", command=root.quit)
- self.menubar.add_cascade(label="File", menu=self.filemenu)
-
- # create more pulldown menus
- self.confmenu = Menu(self.menubar, tearoff=0)
- self.confmenu.add_command(label="Figure", command=self.figureoptions)
- self.confmenu.add_command(label="Annotation", command=self.annotateoptions)
- self.confmenu.add_command(label="Blast", command=self.blastoptions)
- self.confmenu.add_command(label="Graph", command=self.graphoptions)
- self.confmenu.add_command(label="Subregions", command=self.annmod)
- self.menubar.add_cascade(label="Image", menu=self.confmenu)
-
- self.blastmenu = Menu(self.menubar, tearoff=0)
- self.blastmenu.add_command(
- label="Download Blast Automatically", command=self.downloadBlastAuto
- )
- self.blastmenu.add_command(
- label="Download Blast Manually", command=self.downloadBlastMan
- )
- self.blastmenu.add_command(
- label="Choose Blast Location", command=self.chooseBlastDir
- )
- self.menubar.add_cascade(label="Blast", menu=self.blastmenu)
-
- self.helpmenu = Menu(self.menubar, tearoff=0)
- self.helpmenu.add_command(label="Help", command=self.openhelpsite)
- self.helpmenu.add_command(label="Support", command=self.supportwin)
- self.helpmenu.add_separator()
- self.helpmenu.add_command(label="About", command=self.openabout)
- self.helpmenu.add_command(label="Reference", command=self.openref)
- self.menubar.add_cascade(label="Help", menu=self.helpmenu)
- master.config(menu=self.menubar)
- frame1 = Frame(master)
- frame1.grid(row=0, column=0, padx=40, pady=10)
- master.geometry("+10+20")
- self.showit = False
- self.running = False
- self.graphshow = False
- self.cutstate = None
- self.orderstate = None
- self.blastlDir = None
- self.blastnDir = None
- self.dblDir = None
- self.dbnDir = None
- self.workingDir = "test"
- self.mincutlist = {}
- self.maxcutlist = {}
- self.revlist = {}
- self.entrynum = 0
- self.theTitle = Label(
- frame1, text="Easyfig 2.2.3", font="TkDefaultFont 24 bold"
- )
- self.theTitle.grid(row=0, column=1, columnspan=3, padx=10, sticky="W")
- self.annLab = Label(
- frame1, text="Annotation Files", font="TkDefaultFont 13 bold underline"
- )
- self.annLab.grid(row=1, column=2, pady=10)
- self.scrollbar = Scrollbar(frame1, orient=VERTICAL)
- self.genlist = DDlistbox(frame1, yscrollcommand=self.scrollbar.set)
- self.genlist.bind("", self.annmod)
- self.genlist.config(height=10)
- self.blastlist = DDlistbox(frame1, yscrollcommand=self.scrollbar.set)
- self.blastlist.config(height=9)
- self.scrollbar.config(command=self.yview)
- self.scrollbar.grid(row=2, column=1, rowspan=9, sticky=NS)
- self.genlist.grid(row=2, column=2, rowspan=9)
- self.annLab = Label(
- frame1, text="Blast Files", font="TkDefaultFont 13 bold underline"
- )
- self.annLab.grid(row=1, column=3)
- self.blastlist.grid(row=2, column=3, rowspan=9)
- self.addgenbutton = Button(
- frame1, text="Add feature file", command=self.addfeat
- )
- self.addgenbutton.grid(row=11, column=2, sticky=EW)
- self.addgenbutton = Button(frame1, text="Add folder", command=self.addfolder)
- self.addgenbutton.grid(row=12, column=2, sticky=EW)
- self.removegenbutton = Button(
- frame1, text="Remove feature file", command=self.removefeat
- )
- self.removegenbutton.grid(row=13, column=2, sticky=EW)
-
- self.addblastbutton = Button(
- frame1, text="Add blast file", command=self.addblast
- )
- self.addblastbutton.grid(row=11, column=3, sticky=EW)
- self.removeblastbutton = Button(
- frame1, text="Remove blast file", command=self.removeblast
- )
- self.removeblastbutton.grid(row=12, column=3, sticky=EW)
-
- self.spacefiller = Label(frame1, text=" ")
- self.spacefiller.grid(row=12, column=0)
- self.blastit = Button(
- frame1, text="Generate blastn Files", command=self.genBlast
- )
- self.blastit.grid(row=14, column=3, sticky="EW")
- self.blastx = Button(
- frame1, text="Generate tblastx Files", command=self.genBlastX
- )
- self.blastx.grid(row=15, column=3, sticky="EW")
-
- self.outfile = StringVar(value="")
- self.outopen = Button(frame1, text="Save As", command=self.getoutfile)
- self.outopen.grid(row=17, column=2, columnspan=2, sticky=W)
- self.outfilename = Entry(frame1, textvariable=self.outfile)
- self.outfilename.grid(row=17, column=2, columnspan=2)
- self.filetype = StringVar(value="Bitmap (bmp)")
- self.filetypelabel = Label(frame1, text="File type:")
- self.filetypelabel.grid(row=18, column=2, columnspan=2, pady=5, sticky=W)
- self.filetypeentry = OptionMenu(
- frame1,
- self.filetype,
- "Bitmap (bmp)",
- "Vector file (svg)",
- "Preview (shrink)",
- "Preview (1:1)",
- )
- self.filetypeentry.grid(row=18, column=2, columnspan=2, pady=5)
- self.createFigure = Button(
- frame1,
- text="Create Figure",
- font="TkDefaultFont 12 bold",
- width=20,
- command=self.makeFigure,
- )
- self.createFigure.grid(row=19, column=2, columnspan=2, rowspan=3, sticky="NS")
-
- self.processLab = Label(frame1, bg="#FFFF99", relief=SUNKEN)
- self.processLab.grid(
- row=14, column=1, rowspan=3, columnspan=2, sticky="NSEW", padx=5, pady=5
- )
-
- self.gap = Label(frame1, text=" ")
- self.gap.grid(row=18, column=3)
- self.gap2 = Label(frame1, text=" ")
- self.gap2.grid(row=16, column=3)
- self.gap3 = Label(frame1, text=" ")
- self.gap3.grid(row=19, column=4)
- self.gap4 = Label(frame1, text=" ")
- self.gap4.grid(row=20, column=4)
- self.gap4 = Label(frame1, text=" ")
- self.gap4.grid(row=21, column=4)
-
- self.defaultpreferences()
- if os.path.exists(".easyfig.pref"):
- self.opendefault()
-
- def yview(self, *args):
- apply(self.genlist.yview, args)
- apply(self.blastlist.yview, args)
-
- def addfolder(self):
- tempfolder = tkFileDialog.askdirectory(
- title="Please select a directory with feature files."
- )
- if tempfolder == () or tempfolder == "":
- return
- for i in os.listdir(tempfolder):
- if self.entrynum == 99:
- if self.genlist.size() == 99:
- tkMessageBox.showerror(
- "Maximum feature files reached.",
- "At this time easyfig only supports 99 genomes.\nEasyfig_CL does not have a maximum limit.",
- )
- return
- self.renumbergen()
- filename = tempfolder + "/" + i
- self.entrynum += 1
- entryname = "%02d" % self.entrynum + ". " + filename
- self.genlist.insert(END, entryname)
- self.mincutlist[entryname[:2]] = "1"
- self.maxcutlist[entryname[:2]] = "Max"
- self.revlist[entryname[:2]] = False
- self.genlist.xview_moveto(1)
-
- def addfeat(self):
- if self.entrynum == 99:
- if self.genlist.size() == 99:
- tkMessageBox.showerror(
- "Maximum feature files reached.",
- "At this time easyfig only supports 99 genomes.\nEasyfig_CL does not have a maximum limit.",
- )
- return
- self.renumbergen()
- filename = tkFileDialog.askopenfilename(
- filetypes=[
- (
- "genbank/embl/fasta",
- (
- "*.gbk",
- "*.embl",
- "*.gb",
- "*.fa",
- "*.fna",
- "*.dna",
- "*.fas",
- "*.fasta",
- ),
- ),
- ("All files", "*"),
- ]
- )
- if filename == "":
- return
- self.entrynum += 1
- entryname = "%02d" % self.entrynum + ". " + filename
- self.genlist.insert(END, entryname)
- self.genlist.xview_moveto(1)
- self.mincutlist[entryname[:2]] = "1"
- self.maxcutlist[entryname[:2]] = "Max"
- self.revlist[entryname[:2]] = False
-
- def renumbergen(self):
- try:
- self.annwindow.destroy()
- except:
- pass
- tempmincutlist = {}
- tempmaxcutlist = {}
- temprevlist = {}
- for i in range(self.genlist.size()):
- tempgen = self.genlist.get(i)
- self.genlist.delete(i)
- self.genlist.insert(i, "%02d" % (i + 1) + tempgen[2:])
- tempmincutlist["%02d" % (i + 1)] = self.mincutlist[tempgen[:2]]
- tempmaxcutlist["%02d" % (i + 1)] = self.maxcutlist[tempgen[:2]]
- temprevlist["%02d" % (i + 1)] = self.revlist[tempgen[:2]]
- self.mincutlist = tempmincutlist
- self.maxcutlist = tempmaxcutlist
- self.revlist = temprevlist
- self.entrynum = self.genlist.size()
- self.genlist.xview_moveto(1)
-
- def removefeat(self):
- self.genlist.delete(ANCHOR)
- self.renumbergen()
-
- def addblast(self):
- filename = tkFileDialog.askopenfilename()
- self.blastlist.insert(END, filename)
- self.blastlist.xview_moveto(1)
- self.orderstate = None
- self.cutstate = None
-
- def removeblast(self):
- self.blastlist.delete(ANCHOR)
-
- def defaultoptions(self):
- try:
- self.prefwin.destroy()
- except:
- pass
- try:
- self.figureoptionswindow.destroy()
- except:
- pass
- try:
- self.blastoptionswindow.destroy()
- except:
- pass
- try:
- self.annotateoptionswindow.destroy()
- except:
- pass
- try:
- self.graphoptionswindow.destroy()
- except:
- pass
- try:
- self.annwindow.destroy()
- except:
- pass
- try:
- self.doublecutswin.destroy()
- except:
- pass
- self.outfile.set("")
- self.genlist.delete(0, END)
- self.blastlist.delete(0, END)
- self.defaultpreferences()
- self.entrynum = 0
- self.cutstate = None
- self.orderstate = None
- if os.path.exists(".easyfig.pref"):
- self.opendefault()
- else:
- self.defaultpreferences()
-
- def defaultpreferences(self):
- self.filetype.set("Bitmap (bmp)")
- self.figwidthvar = StringVar(value="5000")
- self.height1var = StringVar(value="150")
- self.height2var = StringVar(value="500")
- self.aln = StringVar(value="centre")
- self.autodetect = IntVar()
- self.autodetect.set(1)
- self.drawfig1 = IntVar()
- self.drawfig1.set(1)
- self.drawfig2var = StringVar(value="0")
-
- self.minlengthvar = StringVar(value="0")
- self.minevalvar = StringVar(value="0.001")
- self.minIdentvar = StringVar(value="0")
- self.minblastc = (200, 200, 200)
- self.minblastchex = "#C8C8C8"
- self.minblastci = (200, 200, 200)
- self.minblastcihex = "#C8C8C8"
- self.maxblastc = (100, 100, 100)
- self.maxblastchex = "#646464"
- self.maxblastci = (100, 100, 100)
- self.maxblastcihex = "#646464"
- self.blastoutline = IntVar()
- self.blastoutline.set(1)
-
- self.leg = StringVar(value="None")
- self.leg2 = StringVar(value="None")
- self.legname = StringVar(value="gene")
- self.gltvar = StringVar(value="20")
- self.exontvar = StringVar(value="2")
- self.genetvar = StringVar(value="1")
-
- self.genef = IntVar()
- self.genef.set(1)
- self.genefcolour = (64, 224, 208)
- self.genefcolourhex = "#40e0d0"
- self.genefrect = StringVar(value="arrow")
-
- self.cdsf = IntVar()
- self.cdsfcolour = (255, 140, 0)
- self.cdsfcolourhex = "#ff8c00"
- self.cdsfrect = StringVar(value="arrow")
-
- self.trnaf = IntVar()
- self.trnafcolour = (165, 42, 42)
- self.trnafcolourhex = "#a52a2a"
- self.trnafrect = StringVar(value="rect")
-
- self.miscf = IntVar()
- self.miscfcolour = (0, 191, 255)
- self.miscfcolourhex = "#00bfff"
- self.miscfrect = StringVar(value="rect")
-
- self.randfeat = StringVar()
- self.randf = IntVar()
- self.randfcolour = (72, 61, 139)
- self.randfcolourhex = "#483d8b"
- self.randfrect = StringVar(value="arrow")
-
- self.graphtype = StringVar(value="None")
- self.allorone = IntVar()
- self.graphfile = StringVar()
- self.step = StringVar(value="1000")
- self.windsize = StringVar(value="1000")
- self.graphheight = StringVar(value="200")
- self.maxy = StringVar(value="Auto")
- self.logit = IntVar()
- self.histo = StringVar(value="Histogram")
- self.graphlinet = StringVar(value="1")
- self.poscol = (255, 0, 0)
- self.poscolhex = "#FF0000"
- self.negcol = (0, 0, 255)
- self.negcolhex = "#0000FF"
- self.ggap = StringVar(value="10")
- self.blastnDir = None
- self.dbnDir = None
-
- def saveOptions(self):
- filename = ""
- filename = tkFileDialog.asksaveasfilename(
- filetypes=[("easycfg", "*.easycfg"), ("All files", "*")]
- )
- if filename == "" or filename == ():
- return
- savefile = open(filename, "w")
- savefile.write("\t".join(self.genlist.get(0, END)) + "\n")
- for i in self.genlist.get(0, END):
- savefile.write(
- i[:2]
- + "\t"
- + self.mincutlist[i[:2]]
- + "\t"
- + self.maxcutlist[i[:2]]
- + "\t"
- + str(self.revlist[i[:2]])
- + "\n"
- )
- savefile.write("\t".join(self.blastlist.get(0, END)) + "\n")
-
- savefile.write(self.outfile.get() + "\n")
- savefile.write(self.filetype.get() + "\n")
-
- savefile.write(self.figwidthvar.get() + "\n")
- savefile.write(self.height1var.get() + "\n")
- savefile.write(self.height2var.get() + "\n")
- savefile.write(self.aln.get() + "\n")
- savefile.write(str(self.autodetect.get()) + "\n")
- savefile.write(str(self.drawfig1.get()) + "\n")
- savefile.write(self.drawfig2var.get() + "\n")
-
- savefile.write(self.minlengthvar.get() + "\n")
- savefile.write(self.minevalvar.get() + "\n")
- savefile.write(self.minIdentvar.get() + "\n")
- savefile.write(str(self.minblastc[0]) + "\n")
- savefile.write(str(self.minblastc[1]) + "\n")
- savefile.write(str(self.minblastc[2]) + "\n")
- savefile.write(self.minblastchex + "\n")
- savefile.write(str(self.minblastci[0]) + "\n")
- savefile.write(str(self.minblastci[1]) + "\n")
- savefile.write(str(self.minblastci[2]) + "\n")
- savefile.write(self.minblastcihex + "\n")
- savefile.write(str(self.maxblastc[0]) + "\n")
- savefile.write(str(self.maxblastc[1]) + "\n")
- savefile.write(str(self.maxblastc[2]) + "\n")
- savefile.write(self.maxblastchex + "\n")
- savefile.write(str(self.maxblastci[0]) + "\n")
- savefile.write(str(self.maxblastci[1]) + "\n")
- savefile.write(str(self.maxblastci[2]) + "\n")
- savefile.write(self.maxblastcihex + "\n")
- savefile.write(str(self.blastoutline.get()) + "\n")
-
- savefile.write(self.leg.get() + "\n")
- savefile.write(self.leg2.get() + "\n")
- savefile.write(self.legname.get() + "\n")
- savefile.write(self.gltvar.get() + "\n")
- savefile.write(self.exontvar.get() + "\n")
- savefile.write(self.genetvar.get() + "\n")
-
- savefile.write(str(self.genef.get()) + "\n")
- savefile.write(str(self.genefcolour[0]) + "\n")
- savefile.write(str(self.genefcolour[1]) + "\n")
- savefile.write(str(self.genefcolour[2]) + "\n")
- savefile.write(self.genefcolourhex + "\n")
- savefile.write(self.genefrect.get() + "\n")
-
- savefile.write(str(self.cdsf.get()) + "\n")
- savefile.write(str(self.cdsfcolour[0]) + "\n")
- savefile.write(str(self.cdsfcolour[1]) + "\n")
- savefile.write(str(self.cdsfcolour[2]) + "\n")
- savefile.write(self.cdsfcolourhex + "\n")
- savefile.write(self.cdsfrect.get() + "\n")
-
- savefile.write(str(self.trnaf.get()) + "\n")
- savefile.write(str(self.trnafcolour[0]) + "\n")
- savefile.write(str(self.trnafcolour[1]) + "\n")
- savefile.write(str(self.trnafcolour[2]) + "\n")
- savefile.write(self.trnafcolourhex + "\n")
- savefile.write(self.trnafrect.get() + "\n")
-
- savefile.write(str(self.miscf.get()) + "\n")
- savefile.write(str(self.miscfcolour[0]) + "\n")
- savefile.write(str(self.miscfcolour[1]) + "\n")
- savefile.write(str(self.miscfcolour[2]) + "\n")
- savefile.write(self.miscfcolourhex + "\n")
- savefile.write(self.miscfrect.get() + "\n")
-
- savefile.write(self.randfeat.get() + "\n")
- savefile.write(str(self.randf.get()) + "\n")
- savefile.write(str(self.randfcolour[0]) + "\n")
- savefile.write(str(self.randfcolour[1]) + "\n")
- savefile.write(str(self.randfcolour[2]) + "\n")
- savefile.write(self.randfcolourhex + "\n")
- savefile.write(self.randfrect.get() + "\n")
-
- savefile.write(self.graphtype.get() + "\n")
- savefile.write(str(self.allorone.get()) + "\n")
- savefile.write(self.graphfile.get() + "\n")
- savefile.write(self.step.get() + "\n")
- savefile.write(self.windsize.get() + "\n")
- savefile.write(self.graphheight.get() + "\n")
- savefile.write(self.maxy.get() + "\n")
- savefile.write(str(self.logit.get()) + "\n")
- savefile.write(self.histo.get() + "\n")
- savefile.write(self.graphlinet.get() + "\n")
- savefile.write(str(self.poscol[0]) + "\n")
- savefile.write(str(self.poscol[1]) + "\n")
- savefile.write(str(self.poscol[2]) + "\n")
- savefile.write(self.poscolhex + "\n")
- savefile.write(str(self.negcol[0]) + "\n")
- savefile.write(str(self.negcol[1]) + "\n")
- savefile.write(str(self.negcol[2]) + "\n")
- savefile.write(self.negcolhex + "\n")
- savefile.write(self.ggap.get() + "\n")
- savefile.close()
-
- def openOptions(self):
- try:
- filename = tkFileDialog.askopenfilename(
- filetypes=[("easycfg", "*.easycfg"), ("All files", "*")]
- )
- if filename == "":
- return
- openfile = open(filename)
- templist = openfile.readline().rstrip().split("\t")
- self.genlist.delete(0, END)
- if templist == [""]:
- templist = []
- for i in templist:
- self.genlist.insert(END, i)
- self.genlist.xview_moveto(1)
- for i in range(len(templist)):
- name, mincut, maxcut, rev = openfile.readline().rstrip().split("\t")
- self.mincutlist[name] = mincut
- self.maxcutlist[name] = maxcut
- if rev == "True":
- self.revlist[name] = True
- else:
- self.revlist[name] = False
- templist = openfile.readline().rstrip().split("\t")
- if templist == [""]:
- templist = []
- self.blastlist.delete(0, END)
- for i in templist:
- self.blastlist.insert(END, i)
- self.blastlist.xview_moveto(1)
- self.outfile.set(openfile.readline().rstrip())
- self.filetype.set(openfile.readline().rstrip())
-
- self.figwidthvar.set(openfile.readline().rstrip())
- self.height1var.set(openfile.readline().rstrip())
- self.height2var.set(openfile.readline().rstrip())
- self.aln.set(openfile.readline().rstrip())
- self.autodetect.set(int(openfile.readline().rstrip()))
- self.drawfig1.set(int(openfile.readline().rstrip()))
- self.drawfig2var.set(openfile.readline().rstrip())
-
- self.minlengthvar.set(openfile.readline().rstrip())
- self.minevalvar.set(openfile.readline().rstrip())
- self.minIdentvar.set(openfile.readline().rstrip())
- x = int(openfile.readline().rstrip())
- y = int(openfile.readline().rstrip())
- z = int(openfile.readline().rstrip())
- self.minblastc = (x, y, z)
- self.minblastchex = openfile.readline().rstrip()
- x = int(openfile.readline().rstrip())
- y = int(openfile.readline().rstrip())
- z = int(openfile.readline().rstrip())
- self.minblastci = (x, y, z)
- self.minblastcihex = openfile.readline().rstrip()
- x = int(openfile.readline().rstrip())
- y = int(openfile.readline().rstrip())
- z = int(openfile.readline().rstrip())
- self.maxblastc = (x, y, z)
- self.maxblastchex = openfile.readline().rstrip()
- x = int(openfile.readline().rstrip())
- y = int(openfile.readline().rstrip())
- z = int(openfile.readline().rstrip())
- self.maxblastci = (x, y, z)
- self.maxblastcihex = openfile.readline().rstrip()
- self.blastoutline.set(int(openfile.readline().rstrip()))
-
- self.leg.set(openfile.readline().rstrip())
- self.leg2.set(openfile.readline().rstrip())
- self.legname.set(openfile.readline().rstrip())
- self.gltvar.set(openfile.readline().rstrip())
- self.exontvar.set(openfile.readline().rstrip())
- self.genetvar.set(openfile.readline().rstrip())
-
- self.genef.set(int(openfile.readline().rstrip()))
- x = int(openfile.readline().rstrip())
- y = int(openfile.readline().rstrip())
- z = int(openfile.readline().rstrip())
- self.genefcolour = (x, y, z)
- self.genefcolourhex = openfile.readline().rstrip()
- self.genefrect.set(openfile.readline().rstrip())
-
- self.cdsf.set(int(openfile.readline().rstrip()))
- x = int(openfile.readline().rstrip())
- y = int(openfile.readline().rstrip())
- z = int(openfile.readline().rstrip())
- self.cdsfcolour = (x, y, z)
- self.cdsfcolourhex = openfile.readline().rstrip()
- self.cdsfrect.set(openfile.readline().rstrip())
-
- self.trnaf.set(int(openfile.readline().rstrip()))
- x = int(openfile.readline().rstrip())
- y = int(openfile.readline().rstrip())
- z = int(openfile.readline().rstrip())
- self.trnafcolour = (x, y, z)
- self.trnafcolourhex = openfile.readline().rstrip()
- self.trnafrect.set(openfile.readline().rstrip())
-
- self.miscf.set(int(openfile.readline().rstrip()))
- x = int(openfile.readline().rstrip())
- y = int(openfile.readline().rstrip())
- z = int(openfile.readline().rstrip())
- self.miscfcolour = (x, y, z)
- self.miscfcolourhex = openfile.readline().rstrip()
- self.miscfrect.set(openfile.readline().rstrip())
-
- self.randfeat.set(openfile.readline().rstrip())
- self.randf.set(int(openfile.readline().rstrip()))
- x = int(openfile.readline().rstrip())
- y = int(openfile.readline().rstrip())
- z = int(openfile.readline().rstrip())
- self.randfcolour = (x, y, z)
- self.randfcolourhex = openfile.readline().rstrip()
- self.randfrect.set(openfile.readline().rstrip())
-
- self.graphtype.set(openfile.readline().rstrip())
- self.allorone.set(int(openfile.readline().rstrip()))
- self.graphfile.set(openfile.readline().rstrip())
- self.step.set(openfile.readline().rstrip())
- self.windsize.set(openfile.readline().rstrip())
- self.graphheight.set(openfile.readline().rstrip())
- self.maxy.set(openfile.readline().rstrip())
- self.logit.set(openfile.readline().rstrip())
- self.histo.set(openfile.readline().rstrip())
- self.graphlinet.set(openfile.readline().rstrip())
- x = int(openfile.readline().rstrip())
- y = int(openfile.readline().rstrip())
- z = int(openfile.readline().rstrip())
- self.poscol = (x, y, z)
- self.poscolhex = openfile.readline().rstrip()
- x = int(openfile.readline().rstrip())
- y = int(openfile.readline().rstrip())
- z = int(openfile.readline().rstrip())
- self.negcol = (x, y, z)
- self.negcolhex = openfile.readline().rstrip()
- self.ggap.set(openfile.readline().rstrip())
- openfile.close()
- except:
- tkMessageBox.showerror("Try again.", "Easyfig config file invalid.")
-
- def opendefault(self):
- try:
- if not os.path.exists(".easyfig.pref"):
- self.defaultpreferences()
- return
- preffile = open(".easyfig.pref")
- gotpref = False
- for line in preffile:
- if line.startswith(">"):
- preflist = line.split("\t")[1:]
- gotpref = True
- preffile.close()
- if not gotpref:
- self.defaultpreferences()
- return
- self.filetype.set(preflist.pop(0))
-
- self.figwidthvar.set(preflist.pop(0))
- self.height1var.set(preflist.pop(0))
- self.height2var.set(preflist.pop(0))
- self.aln.set(preflist.pop(0))
- self.autodetect.set(int(preflist.pop(0)))
- self.drawfig1.set(int(preflist.pop(0)))
- self.drawfig2var.set(preflist.pop(0))
-
- self.minlengthvar.set(preflist.pop(0))
- self.minevalvar.set(preflist.pop(0))
- self.minIdentvar.set(preflist.pop(0))
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.minblastc = (x, y, z)
- self.minblastchex = preflist.pop(0)
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.minblastci = (x, y, z)
- self.minblastcihex = preflist.pop(0)
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.maxblastc = (x, y, z)
- self.maxblastchex = preflist.pop(0)
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.maxblastci = (x, y, z)
- self.maxblastcihex = preflist.pop(0)
- self.blastoutline.set(int(preflist.pop(0)))
-
- self.leg.set(preflist.pop(0))
- self.leg2.set(preflist.pop(0))
- self.legname.set(preflist.pop(0))
- self.gltvar.set(preflist.pop(0))
- self.exontvar.set(preflist.pop(0))
- self.genetvar.set(preflist.pop(0))
-
- self.genef.set(int(preflist.pop(0)))
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.genefcolour = (x, y, z)
- self.genefcolourhex = preflist.pop(0)
- self.genefrect.set(preflist.pop(0))
-
- self.cdsf.set(int(preflist.pop(0)))
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.cdsfcolour = (x, y, z)
- self.cdsfcolourhex = preflist.pop(0)
- self.cdsfrect.set(preflist.pop(0))
-
- self.trnaf.set(int(preflist.pop(0)))
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.trnafcolour = (x, y, z)
- self.trnafcolourhex = preflist.pop(0)
- self.trnafrect.set(preflist.pop(0))
-
- self.miscf.set(int(preflist.pop(0)))
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.miscfcolour = (x, y, z)
- self.miscfcolourhex = preflist.pop(0)
- self.miscfrect.set(preflist.pop(0))
-
- self.randfeat.set(preflist.pop(0))
- self.randf.set(int(preflist.pop(0)))
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.randfcolour = (x, y, z)
- self.randfcolourhex = preflist.pop(0)
- self.randfrect.set(preflist.pop(0))
-
- self.graphtype.set(preflist.pop(0))
- self.allorone.set(int(preflist.pop(0)))
- self.graphfile.set(preflist.pop(0))
- self.step.set(preflist.pop(0))
- self.windsize.set(preflist.pop(0))
- self.graphheight.set(preflist.pop(0))
- self.maxy.set(preflist.pop(0))
- self.logit.set(preflist.pop(0))
- self.histo.set(preflist.pop(0))
- self.graphlinet.set(preflist.pop(0))
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.poscol = (x, y, z)
- self.poscolhex = preflist.pop(0)
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.negcol = (x, y, z)
- self.negcolhex = preflist.pop(0)
- self.ggap.set(preflist.pop(0))
- self.blastnDir = preflist.pop(0)
- if self.blastnDir == "None":
- self.blastnDir = None
- self.dbnDir = preflist.pop(0).rstrip()
- if self.dbnDir == "None":
- self.dbnDir = None
- except:
- self.defaultpreferences()
-
- def openhelpsite(self):
- webbrowser.open_new("https://github.com/mjsull/Easyfig/wiki")
-
- def openabout(self):
- try:
- self.aboutpanel.destroy()
- except:
- pass
- self.aboutpanel = Toplevel()
- self.frame7 = Frame(self.aboutpanel)
- self.about1label = Label(
- self.frame7, text="Easyfig", font="TkDefaultFont 13 bold"
- )
- self.about1label.grid(row=0, column=0)
- self.about2label = Label(
- self.frame7,
- text="Easyfig is a Python application for creating linear\n\
-comparison figures of multiple genomic loci\n with an easy-to-use graphical user interface (GUI).\n\n\
-Version 2.2.3\n\nIf Easyfig is used to generate figures for publication,\n\
-please cite our paper:\n\n\
-Sullivan MJ, Petty NK, Beatson SA. (2011)\nEasyfig: a genome comparison visualiser.\nBioinformatics; 27 (7): 1009-1010",
- )
- self.about2label.grid(row=1, column=0)
- self.frame7.grid(padx=10, pady=10)
-
- def supportwin(self):
- try:
- self.supportpanel.destroy()
- except:
- pass
- self.supportpanel = Toplevel()
- self.frame9 = Frame(self.supportpanel)
- self.about1label1 = Label(
- self.frame9, text="Easyfig", font="TkDefaultFont 13 bold"
- )
- self.about1label1.grid(row=0, column=0)
- self.supportlabel2 = Label(
- self.frame9,
- text="written by Mitchell Sullivan - mjsull@gmail.com\n\
-To submit a bug please visit https://github.com/mjsull/Easyfig/issues.",
- )
- self.supportlabel2.grid(row=1, column=0)
- self.frame9.grid(padx=10, pady=10)
-
- def preferencewindow(self):
- try:
- self.prefwin.destroy()
- except:
- pass
- self.prefwin = Toplevel()
- self.frame8 = Frame(self.prefwin)
- self.prefwin.title("preferences")
- self.scrollbar3 = Scrollbar(self.frame8)
- self.preflist = Listbox(self.frame8, yscrollcommand=self.scrollbar3.set)
- templist = ["easyfig_standard"]
- validfile = True
- if os.path.exists(".easyfig.pref"):
- preffile = open(".easyfig.pref")
- for line in preffile:
- if len(line.split("\t")) == 87:
- templist.append(line.split("\t")[0])
- else:
- validfile = False
- if not validfile:
- nocompare = tkMessageBox.askquestion(
- "Preference file not valid",
- "Do you wish to create a new preference file at "
- + os.getcwd()
- + "/.easyfig.pref?",
- parent=self.frame8,
- )
- if nocompare == "no":
- return
- else:
- preffile = open(".easyfig.pref", "w")
- preffile.close()
- templist.sort(key=str.lower)
- for i in templist:
- self.preflist.insert(END, i)
- self.preflist.grid(column=1, row=0, rowspan=10)
- self.scrollbar3.config(command=self.preflist.yview)
- self.scrollbar3.grid(column=0, row=0, rowspan=10, sticky=NS)
- self.addprefbut = Button(
- self.frame8, text="Save preferences as", command=self.addpref
- )
- self.addprefbut.grid(column=2, row=0, sticky=EW)
- self.loadprefbut = Button(
- self.frame8, text="Load preferences", command=self.loadpref
- )
- self.loadprefbut.grid(column=2, row=1, sticky=EW)
- self.removeprefbut = Button(self.frame8, text="Remove", command=self.removepref)
- self.removeprefbut.grid(column=2, row=2, sticky=EW)
- self.setdefaultbut = Button(
- self.frame8, text="Set as default", command=self.setdefault
- )
- self.setdefaultbut.grid(column=2, row=3, sticky=EW)
- self.closeprefwinbut = Button(
- self.frame8, text="close", command=self.closeprefwin
- )
- self.closeprefwinbut.grid(column=2, row=9, sticky=E)
- self.frame8.grid(padx=20, pady=20)
-
- def addpref(self):
- preffile = open(".easyfig.pref", "a")
- savename = tkSimpleDialog.askstring(
- "Input name",
- "Please choose name to save preferences under.",
- parent=self.frame8,
- )
- if savename == None:
- return None
- while savename in self.preflist.get(0, END):
- savename = tkSimpleDialog.askstring(
- "Name taken",
- "Please choose name to save preferences under.",
- parent=self.frame8,
- )
- if savename == None:
- return None
- savestring = savename + "\t"
- savestring += self.filetype.get() + "\t"
- savestring += self.figwidthvar.get() + "\t"
- savestring += self.height1var.get() + "\t"
- savestring += self.height2var.get() + "\t"
- savestring += self.aln.get() + "\t"
- savestring += str(self.autodetect.get()) + "\t"
- savestring += str(self.drawfig1.get()) + "\t"
- savestring += self.drawfig2var.get() + "\t"
- savestring += self.minlengthvar.get() + "\t"
- savestring += self.minevalvar.get() + "\t"
- savestring += self.minIdentvar.get() + "\t"
- savestring += str(self.minblastc[0]) + "\t"
- savestring += str(self.minblastc[1]) + "\t"
- savestring += str(self.minblastc[2]) + "\t"
- savestring += self.minblastchex + "\t"
- savestring += str(self.minblastci[0]) + "\t"
- savestring += str(self.minblastci[1]) + "\t"
- savestring += str(self.minblastci[2]) + "\t"
- savestring += self.minblastcihex + "\t"
- savestring += str(self.maxblastc[0]) + "\t"
- savestring += str(self.maxblastc[1]) + "\t"
- savestring += str(self.maxblastc[2]) + "\t"
- savestring += self.maxblastchex + "\t"
- savestring += str(self.maxblastci[0]) + "\t"
- savestring += str(self.maxblastci[1]) + "\t"
- savestring += str(self.maxblastci[2]) + "\t"
- savestring += self.maxblastcihex + "\t"
- savestring += str(self.blastoutline.get()) + "\t"
- savestring += self.leg.get() + "\t"
- savestring += self.leg2.get() + "\t"
- savestring += self.legname.get() + "\t"
- savestring += self.gltvar.get() + "\t"
- savestring += self.exontvar.get() + "\t"
- savestring += self.genetvar.get() + "\t"
- savestring += str(self.genef.get()) + "\t"
- savestring += str(self.genefcolour[0]) + "\t"
- savestring += str(self.genefcolour[1]) + "\t"
- savestring += str(self.genefcolour[2]) + "\t"
- savestring += self.genefcolourhex + "\t"
- savestring += self.genefrect.get() + "\t"
- savestring += str(self.cdsf.get()) + "\t"
- savestring += str(self.cdsfcolour[0]) + "\t"
- savestring += str(self.cdsfcolour[1]) + "\t"
- savestring += str(self.cdsfcolour[2]) + "\t"
- savestring += self.cdsfcolourhex + "\t"
- savestring += self.cdsfrect.get() + "\t"
- savestring += str(self.trnaf.get()) + "\t"
- savestring += str(self.trnafcolour[0]) + "\t"
- savestring += str(self.trnafcolour[1]) + "\t"
- savestring += str(self.trnafcolour[2]) + "\t"
- savestring += self.trnafcolourhex + "\t"
- savestring += self.trnafrect.get() + "\t"
- savestring += str(self.miscf.get()) + "\t"
- savestring += str(self.miscfcolour[0]) + "\t"
- savestring += str(self.miscfcolour[1]) + "\t"
- savestring += str(self.miscfcolour[2]) + "\t"
- savestring += self.miscfcolourhex + "\t"
- savestring += self.miscfrect.get() + "\t"
- savestring += self.randfeat.get() + "\t"
- savestring += str(self.randf.get()) + "\t"
- savestring += str(self.randfcolour[0]) + "\t"
- savestring += str(self.randfcolour[1]) + "\t"
- savestring += str(self.randfcolour[2]) + "\t"
- savestring += self.randfcolourhex + "\t"
- savestring += self.randfrect.get() + "\t"
- savestring += self.graphtype.get() + "\t"
- savestring += str(self.allorone.get()) + "\t"
- savestring += self.graphfile.get() + "\t"
- savestring += self.step.get() + "\t"
- savestring += self.windsize.get() + "\t"
- savestring += self.graphheight.get() + "\t"
- savestring += self.maxy.get() + "\t"
- savestring += str(self.logit.get()) + "\t"
- savestring += self.histo.get() + "\t"
- savestring += self.graphlinet.get() + "\t"
- savestring += str(self.poscol[0]) + "\t"
- savestring += str(self.poscol[1]) + "\t"
- savestring += str(self.poscol[2]) + "\t"
- savestring += self.poscolhex + "\t"
- savestring += str(self.negcol[0]) + "\t"
- savestring += str(self.negcol[1]) + "\t"
- savestring += str(self.negcol[2]) + "\t"
- savestring += self.negcolhex + "\t"
- savestring += self.ggap.get() + "\t"
- if self.blastnDir == None:
- savestring += "None\t"
- else:
- savestring += self.blastnDir + "\t"
- if self.dbnDir == None:
- savestring += "None\n"
- else:
- savestring += self.dbnDir + "\n"
- if savestring.count("\t") == 86:
- if savestring.startswith(">"):
- tkMessageBox.showerror(
- "Try again.", "Please remove > from start of preference name."
- )
- else:
- preffile.write(savestring)
- self.preflist.insert(END, savename)
- else:
- tkMessageBox.showerror(
- "Try again.", " character in variable, please remove."
- )
- preffile.close()
-
- def loadpref(self):
- try:
- prefname = self.preflist.get(ACTIVE)
- if prefname == "easyfig_standard":
- self.defaultpreferences()
- return
- if not os.path.exists(".easyfig.pref"):
- tkMessageBox.showerror("Try again.", "Where'd the preference file go?")
- return
- preffile = open(".easyfig.pref")
- for line in preffile:
- splitline = line.split("\t")
- if splitline[0] == prefname:
- preflist = splitline[1:]
- preffile.close()
- self.filetype.set(preflist.pop(0))
-
- self.figwidthvar.set(preflist.pop(0))
- self.height1var.set(preflist.pop(0))
- self.height2var.set(preflist.pop(0))
- self.aln.set(preflist.pop(0))
- self.autodetect.set(int(preflist.pop(0)))
- self.drawfig1.set(int(preflist.pop(0)))
- self.drawfig2var.set(preflist.pop(0))
-
- self.minlengthvar.set(preflist.pop(0))
- self.minevalvar.set(preflist.pop(0))
- self.minIdentvar.set(preflist.pop(0))
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.minblastc = (x, y, z)
- self.minblastchex = preflist.pop(0)
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.minblastci = (x, y, z)
- self.minblastcihex = preflist.pop(0)
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.maxblastc = (x, y, z)
- self.maxblastchex = preflist.pop(0)
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.maxblastci = (x, y, z)
- self.maxblastcihex = preflist.pop(0)
- self.blastoutline.set(int(preflist.pop(0)))
-
- self.leg.set(preflist.pop(0))
- self.leg2.set(preflist.pop(0))
- self.legname.set(preflist.pop(0))
- self.gltvar.set(preflist.pop(0))
- self.exontvar.set(preflist.pop(0))
- self.genetvar.set(preflist.pop(0))
-
- self.genef.set(int(preflist.pop(0)))
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.genefcolour = (x, y, z)
- self.genefcolourhex = preflist.pop(0)
- self.genefrect.set(preflist.pop(0))
-
- self.cdsf.set(int(preflist.pop(0)))
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.cdsfcolour = (x, y, z)
- self.cdsfcolourhex = preflist.pop(0)
- self.cdsfrect.set(preflist.pop(0))
-
- self.trnaf.set(int(preflist.pop(0)))
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.trnafcolour = (x, y, z)
- self.trnafcolourhex = preflist.pop(0)
- self.trnafrect.set(preflist.pop(0))
-
- self.miscf.set(int(preflist.pop(0)))
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.miscfcolour = (x, y, z)
- self.miscfcolourhex = preflist.pop(0)
- self.miscfrect.set(preflist.pop(0))
-
- self.randfeat.set(preflist.pop(0))
- self.randf.set(int(preflist.pop(0)))
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.randfcolour = (x, y, z)
- self.randfcolourhex = preflist.pop(0)
- self.randfrect.set(preflist.pop(0))
-
- self.graphtype.set(preflist.pop(0))
- self.allorone.set(int(preflist.pop(0)))
- self.graphfile.set(preflist.pop(0))
- self.step.set(preflist.pop(0))
- self.windsize.set(preflist.pop(0))
- self.graphheight.set(preflist.pop(0))
- self.maxy.set(preflist.pop(0))
- self.logit.set(preflist.pop(0))
- self.histo.set(preflist.pop(0))
- self.graphlinet.set(preflist.pop(0))
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.poscol = (x, y, z)
- self.poscolhex = preflist.pop(0)
- x = int(preflist.pop(0))
- y = int(preflist.pop(0))
- z = int(preflist.pop(0))
- self.negcol = (x, y, z)
- self.negcolhex = preflist.pop(0)
- self.ggap.set(preflist.pop(0))
- self.blastnDir = preflist.pop(0)
- if self.blastnDir == "None":
- self.blastnDir = None
- self.dbnDir = preflist.pop(0).rstrip()
- if self.dbnDir == "None":
- self.dbnDir = None
- except:
- self.defaultpreferences()
- tkMessageBox.showerror(
- "Preference File Invalid", "Loaded default preferences."
- )
- nocompare = tkMessageBox.askquestion(
- "Preference file not valid",
- "Do you wish to create a new preference file at "
- + os.getcwd()
- + "/.easyfig.pref?",
- parent=self.frame8,
- )
- if nocompare == "no":
- return
- else:
- preffile = open(".easyfig.pref", "w")
- preffile.close()
- self.preflist.delete(0, END)
- self.preflist.insert("easyfig_standard")
-
- def removepref(self):
- nocompare = tkMessageBox.askquestion(
- "Delete?",
- "Are you sure you wish to delete this preference?",
- parent=self.frame8,
- )
- if nocompare == "no":
- return
- preffile = open(".easyfig.pref")
- preflist = []
- prefname = self.preflist.get(ACTIVE)
- self.preflist.delete(ACTIVE)
- for line in preffile:
- if not line.split("\t")[0] == prefname:
- preflist.append(line)
- preffile.close()
- preffile = open(".easyfig.pref", "w")
- for i in preflist:
- preffile.write(i)
- preffile.close()
-
- def setdefault(self):
- preffile = open(".easyfig.pref")
- preflist = []
- prefname = self.preflist.get(ACTIVE)
- if prefname.startswith(">"):
- return
- templist = []
- for line in preffile:
- if line.startswith(">"):
- line = line[1:]
- elif line.split("\t")[0] == prefname:
- line = ">" + line
- templist.append(line.split("\t")[0])
- preflist.append(line)
- preffile.close()
- preffile = open(".easyfig.pref", "w")
- for i in preflist:
- preffile.write(i)
- self.preflist.delete(0, END)
- templist.append("easyfig_standard")
- templist.sort(key=str.lower)
- for i in templist:
- self.preflist.insert(END, i)
- preffile.close()
-
- def closeprefwin(self):
- self.prefwin.destroy()
-
- def openref(self):
- webbrowser.open_new("http://www.ncbi.nlm.nih.gov/pubmed/21278367")
-
- def pickposcol(self):
- colour = tkColorChooser.askcolor(self.poscol, parent=self.graphoptionswindow)
- if colour != None:
- self.poscol = colour[0]
- self.poscolhex = colour[1]
- self.poscollabel.configure(bg=colour[1])
-
- def picknegcol(self):
- colour = tkColorChooser.askcolor(self.negcol, parent=self.graphoptionswindow)
- if colour != None:
- self.negcol = colour[0]
- self.negcolhex = colour[1]
- self.negcollabel.configure(bg=colour[1])
-
- def getGCcontent(self, filename, mincut, maxcut):
- try:
- gen = open(filename)
- getseq = False
- getembl = False
- seq = ""
- for line in gen:
- if line.startswith("ORIGIN"):
- getseq = True
- elif line.startswith("SQ Sequence"):
- getembl = True
- elif line.startswith("//"):
- getseq = False
- getembl = False
- elif getseq:
- seq += "".join(line.split()[1:])
- elif getembl:
- seq += "".join(line.split()[:-1])
- gen.close()
- seq = seq.upper()
- except:
- tkMessageBox.showerror(
- "Try again.",
- "feature file " + filename + " not valid, or does not exist.",
- )
- return None
- if len(seq) == 0:
- tkMessageBox.showerror(
- "Try again.", "Sequence not found in feature file " + filename + "."
- )
- return None
- if maxcut == "Max":
- seq = seq[int(mincut) - 1 :]
- elif int(maxcut) <= int(mincut):
- seq = seq[int(mincut) - 1 :] + seq[: int(maxcut) + 1]
- else:
- seq = seq[int(mincut) - 1 : int(maxcut) + 1]
- window1 = int(self.windsize.get()) / 2
- window2 = int(self.windsize.get()) - window1
- thearray = []
- for i in range(0, len(seq), int(self.step.get())):
- seqstring = seq[max([0, i - window1]) : i + window2]
- thearray.append(
- (seqstring.count("G") + seqstring.count("C")) * 1.0 / len(seqstring)
- - 0.5
- )
- return thearray
-
- def getGCskew(self, filename, mincut, maxcut):
- try:
- getseq = False
- getembl = False
- seq = ""
- gen = open(filename)
- for line in gen:
- if line.startswith("ORIGIN"):
- getseq = True
- elif line.startswith("SQ Sequence"):
- getembl = True
- elif line.startswith("//"):
- getseq = False
- getembl = False
- elif getseq:
- seq += "".join(line.split()[1:])
- elif getembl:
- seq += "".join(line.split()[:-1])
- gen.close()
- seq = seq.upper()
- except:
- tkMessageBox.showerror(
- "Try again.",
- "feature file " + filename + " not valid, or does not exist.",
- )
- return None
- if len(seq) == 0:
- tkMessageBox.showerror(
- "Try again.", "Sequence not found in feature file " + filename + "."
- )
- return None
- window1 = int(self.windsize.get()) / 2
- window2 = int(self.windsize.get()) - window1
- if maxcut == "Max":
- seq = seq[int(mincut) - 1 :]
- elif int(maxcut) <= int(mincut):
- seq = seq[int(mincut) - 1 :] + seq[: int(maxcut) + 1]
- else:
- seq = seq[int(mincut) - 1 : int(maxcut) + 1]
- thearray = []
- for i in range(0, len(seq), int(self.step.get())):
- seqstring = seq[max([0, i - window1]) : i + window2]
- gcount = seqstring.count("G")
- ccount = seqstring.count("C")
- try:
- thearray.append((gcount - ccount) * 1.0 / (gcount + ccount))
- except:
- thearray.append(0)
- return thearray
-
- def getCoverage(self):
- # DEFNIITION: takes a file and reads in all contigs, their start positions and the reads located within the contig
- # REQUIRES: a valid ace file
- # RETURNS: A list of objects of class contig
- seq = ""
- getseq = False
- getembl = False
- try:
- gen = open(self.gen1.get())
- for line in gen:
- if line.startswith("ORIGIN"):
- getseq = True
- elif line.startswith("SQ Sequence"):
- getembl = True
- elif line.startswith("//"):
- getseq = False
- getembl = False
- elif getseq:
- seq += "".join(line.split()[1:])
- elif getembl:
- seq += "".join(line.split()[:-1])
- gen.close()
- except:
- tkMessageBox.showerror(
- "Try again.", "feature file not valid, or does not exist."
- )
- return None
- if len(seq) == 0:
- tkMessageBox.showerror("Try again.", "Sequence not found in feature file.")
- return None
- seq = seq.lower()
- if self.gen1maxcut.get() == "Max":
- seq = seq[int(self.gen1mincut.get()) - 1 :]
- elif int(self.gen1maxcut) <= int(self.gen1mincut):
- seq = seq[int(self.gen1mincut) - 1 :] + seq[: int(self.gen1maxcut) + 1]
- else:
- seq = seq[int(self.gen1mincut.get()) - 1 : (self.gen1maxcut.get()) + 1]
- outlist = [0 for i in range(len(seq))]
- readlist = [] # list of reads to be added to the contig class
- index = 0 # switches to 1 once program has dealt with the initial contig
- # iterates through the file determines what information is contained in each line then reads it to the
- # right locationregular expressions python
- transtab = string.maketrans("atgc", "tacg")
- for line in file:
- # puts name in file and starts reading sequence below
- if line.startswith("CO "):
- if index != 0:
- freqDict = {}
- for j in readlist:
- for k in range(j.startpos, (j.startpos + j.readLength)):
- if k in freqDict:
- freqDict[k] += 1
- else:
- freqDict[k] = 1
- coverageList = []
- for j in range(1, len(contigSeq) + 1):
- if contigSeq[j - 1] != "*":
- coverageList.append(freqDict[j])
- contigSeq = contigSeq.lower()
- thepos = seq.find(contigSeq)
- if thepos != -1:
- outlist = (
- outlist[:thepos]
- + coverageList
- + outlist[thepos + len(coverageList) :]
- )
- else:
- contigSeq = contigSeq[::-1]
- contigSeq = contigSeq.translate(transtab)
- thepos = seq.find(contigSeq)
- if thepos != -1:
- coverageList.reverse()
- outlist = (
- outlist[:thepos]
- + coverageList
- + outlist[thepos + len(coverageList) :]
- )
- readlist = []
- index = 1
- contigSeq = ""
- contigName = line.split()[
- 1
- ] # splits the line into a list with elements seperated by whitespace characters
- # then returns the second element of that list (the name)
- readnumber = 0 # initiates the read number used to determine where the readsequence will be added
- # creates a object of class read with the name and location within the contig, leaves sequence as the
- # empty string to be read in later
- elif line.startswith("BQ"):
- index = 2
- elif line.startswith("AF "):
- readIt = (
- line.split()
- ) # splits the line into a list of strings seperated by whitespace characters
- readName = readIt[1] # the name of the read
- readPos = int(readIt[3]) # the position of the read within the contig
- readInstance = read(
- readName, readPos, None
- ) # creates an instance of class read
- readlist.append(readInstance) # appends to list
- elif index == 1:
- contigSeq += line[:-1]
- elif line.startswith("QA "):
- readlist[readnumber].startpos = (
- readlist[readnumber].startpos + int(line.split()[1]) - 1
- )
- readlist[readnumber].readLength = (
- int(line.split()[2]) - int(line.split()[1]) + 1
- )
- readnumber += 1
- freqDict = {}
- for j in readlist:
- for k in range(j.startpos, (j.startpos + j.readLength)):
- if k in freqDict:
- freqDict[k] += 1
- else:
- freqDict[k] = 1
- coverageList = []
- for j in range(1, len(contigSeq) + 1):
- if contigSeq[j - 1] != "*":
- coverageList.append(freqDict[j])
- contigSeq = contigSeq.lower()
- thepos = seq.find(contigSeq)
- if thepos != -1:
- outlist = (
- outlist[:thepos] + coverageList + outlist[thepos + len(coverageList) :]
- )
- else:
- contigSeq = contigSeq[::-1]
- contigSeq = contigSeq.translate(transtab)
- thepos = seq.find(contigSeq)
- if thepos != -1:
- coverageList.reverse()
- outlist = (
- outlist[:thepos]
- + coverageList
- + outlist[thepos + len(coverageList) :]
- )
- return outlist
-
- def getCustom(self):
- try:
- thearray = []
- gen = open(self.graphfile.get())
- templine = gen.readline().rstrip().split("\t")
- linelen = len(templine)
- for i in templine:
- thearray.append([float(i)])
- for line in gen:
- templine = line.rstrip().split("\t")
- for i in range(len(templine)):
- if templine[i] != "":
- thearray[i].append(float(templine[i]))
- return thearray
- except:
- tkMessageBox.showerror(
- "Try again.", "graph file not valid, or does not exist."
- )
- return None
-
- def graphtypechanges(self, something):
- if something == "None":
- self.alloroneentry.config(state=DISABLED)
- self.graphfileentry.config(state=DISABLED)
- self.graphfilebut.config(state=DISABLED)
- self.stepentry.config(state=DISABLED)
- self.windsizeentry.config(state=DISABLED)
- self.graphheightentry.config(state=DISABLED)
- self.maxyentry.config(state=DISABLED)
- self.histoentry.config(state=DISABLED)
- self.graphlinetentry.config(state=DISABLED)
- self.poscolbutton.config(state=DISABLED)
- self.negcolbutton.config(state=DISABLED)
- self.logitbut.config(state=DISABLED)
- self.ggapentry.config(state=DISABLED)
- elif something == "GC Content":
- self.alloroneentry.config(state=NORMAL)
- self.graphfileentry.config(state=DISABLED)
- self.graphfilebut.config(state=DISABLED)
- self.stepentry.config(state=NORMAL)
- self.windsizeentry.config(state=NORMAL)
- self.graphheightentry.config(state=NORMAL)
- self.maxyentry.config(state=NORMAL)
- self.histoentry.config(state=NORMAL)
- self.graphlinetentry.config(state=NORMAL)
- self.poscolbutton.config(state=NORMAL)
- self.negcolbutton.config(state=NORMAL)
- self.logitbut.config(state=DISABLED)
- self.ggapentry.config(state=NORMAL)
- elif something == "GC Skew":
- self.alloroneentry.config(state=NORMAL)
- self.graphfileentry.config(state=DISABLED)
- self.graphfilebut.config(state=DISABLED)
- self.stepentry.config(state=NORMAL)
- self.windsizeentry.config(state=NORMAL)
- self.graphheightentry.config(state=NORMAL)
- self.maxyentry.config(state=NORMAL)
- self.histoentry.config(state=NORMAL)
- self.graphlinetentry.config(state=NORMAL)
- self.poscolbutton.config(state=NORMAL)
- self.negcolbutton.config(state=NORMAL)
- self.logitbut.config(state=DISABLED)
- self.ggapentry.config(state=NORMAL)
- elif something == "Coverage":
- self.alloroneentry.config(state=DISABLED)
- self.graphfileentry.config(state=NORMAL)
- self.graphfilebut.config(state=NORMAL)
- self.stepentry.config(state=DISABLED)
- self.windsizeentry.config(state=NORMAL)
- self.graphheightentry.config(state=NORMAL)
- self.maxyentry.config(state=NORMAL)
- self.histoentry.config(state=NORMAL)
- self.graphlinetentry.config(state=NORMAL)
- self.poscolbutton.config(state=NORMAL)
- self.negcolbutton.config(state=DISABLED)
- self.logitbut.config(state=NORMAL)
- self.ggapentry.config(state=NORMAL)
- elif something == "Custom":
- self.alloroneentry.config(state=NORMAL)
- self.graphfileentry.config(state=NORMAL)
- self.graphfilebut.config(state=NORMAL)
- self.stepentry.config(state=DISABLED)
- self.windsizeentry.config(state=DISABLED)
- self.graphheightentry.config(state=NORMAL)
- self.maxyentry.config(state=NORMAL)
- self.histoentry.config(state=NORMAL)
- self.graphlinetentry.config(state=NORMAL)
- self.poscolbutton.config(state=NORMAL)
- self.negcolbutton.config(state=NORMAL)
- self.logitbut.config(state=NORMAL)
- self.ggapentry.config(state=NORMAL)
-
- def figureoptions(self):
- try:
- self.figureoptionswindow.destroy()
- except:
- pass
- self.figureoptionswindow = Toplevel()
- self.figureoptionswindow.title("Figure")
- self.frame2 = Frame(self.figureoptionswindow)
- self.mainoptionslab = Label(
- self.frame2, text="Figure Options", font="TkDefaultFont 13 bold underline"
- )
- self.mainoptionslab.grid(row=0, column=0)
- self.figwidthlabel = Label(self.frame2, text="Width of Figure (pixels):")
- self.figwidthlabel.grid(row=1, column=0)
- self.figwidthentry = Entry(self.frame2, textvariable=self.figwidthvar)
- self.figwidthentry.grid(row=1, column=1)
- self.gltlabel = Label(self.frame2, text="Thickness of genome line:")
- self.gltlabel.grid(row=2, column=0)
- self.gltentry = Entry(self.frame2, textvariable=self.gltvar)
- self.gltentry.grid(row=2, column=1)
- self.height1label = Label(self.frame2, text="Height of genes in figure:")
- self.height1label.grid(row=3, column=0)
- self.height1entry = Entry(self.frame2, textvariable=self.height1var)
- self.height1entry.grid(row=3, column=1)
- self.height2label = Label(self.frame2, text="Height of Blast hits in figure:")
- self.height2label.grid(row=4, column=0)
- self.height2entry = Entry(self.frame2, textvariable=self.height2var)
- self.height2entry.grid(row=4, column=1)
- self.alnlabel = Label(self.frame2, text="Alignment of genomes:")
- self.alnlabel.grid(row=5, column=0)
- self.alnentry = OptionMenu(
- self.frame2, self.aln, "left", "centre", "right", "best blast"
- )
- self.alnentry.config(width=5)
- self.alnentry.grid(row=5, column=1, sticky=EW)
- self.legendoptionslab = Label(
- self.frame2, text="Legend Options", font="TkDefaultFont 13 bold"
- )
- self.legendoptionslab.grid(row=6, column=0)
- self.drawfig1label = Label(self.frame2, text="Draw Blast identity legend?")
- self.drawfig1label.grid(row=7, column=0)
- self.drawfig1entry = Checkbutton(self.frame2, variable=self.drawfig1)
- self.drawfig1entry.grid(row=7, column=1)
- self.drawfig2label = Label(
- self.frame2, text="Length of scale legend (in base pairs):"
- )
- self.drawfig2label.grid(row=8, column=0)
- self.drawfig2entry = Entry(self.frame2, textvariable=self.drawfig2var)
- self.drawfig2entry.grid(row=8, column=1)
- self.leg2label = Label(self.frame2, text="Feature Legend:")
- self.leg2label.grid(row=9, column=0)
- self.leg2entry = OptionMenu(
- self.frame2, self.leg2, "None", "Single column", "Two columns"
- )
- self.leg2entry.grid(row=9, column=1, sticky=EW)
- self.legnamelabel = Label(self.frame2, text="Get feature name from")
- self.legnamelabel.grid(row=10, column=0)
- self.legnameentry = OptionMenu(
- self.frame2, self.legname, "gene", "product", "locus_tag", "note"
- )
- self.legnameentry.grid(row=10, column=1, sticky=EW)
- self.figureoptionsclosebutton = Button(
- self.frame2, text="close", command=self.figureoptionsclose
- )
- self.figureoptionsclosebutton.grid(row=11, column=1, sticky=E, pady=5)
- self.figureoptionswindow.geometry("+30+40")
- self.frame2.grid(padx=30, pady=10)
-
- def figureoptionsclose(self):
- self.figureoptionswindow.destroy()
-
- def blastoptions(self):
- try:
- self.blastoptionswindow.destroy()
- except:
- pass
- self.blastoptionswindow = Toplevel()
- self.blastoptionswindow.title("Blast")
- self.frame3 = Frame(self.blastoptionswindow)
- self.blastoptionslab = Label(
- self.frame3, text="Blast Options", font="TkDefaultFont 13 bold underline"
- )
- self.blastoptionslab.grid(row=0, column=0)
- self.minlengthlabel = Label(self.frame3, text="Min. length:")
- self.minlengthlabel.grid(row=1, column=0)
- self.minlengthentry = Entry(self.frame3, textvariable=self.minlengthvar)
- self.minlengthentry.grid(row=1, column=1, columnspan=4)
- self.minevallabel = Label(self.frame3, text="Max. e Value:")
- self.minevallabel.grid(row=2, column=0)
- self.minevalentry = Entry(self.frame3, textvariable=self.minevalvar)
- self.minevalentry.grid(row=2, column=1, columnspan=4)
- self.minIdentlabel = Label(self.frame3, text="Min. Identity value:")
- self.minIdentlabel.grid(row=3, column=0)
- self.minIdententry = Entry(self.frame3, textvariable=self.minIdentvar)
- self.minIdententry.grid(row=3, column=1, columnspan=4)
- self.blastlabel = Label(self.frame3, text="normal")
- self.blastlabel.grid(row=4, column=1, columnspan=2)
- self.blastilabel = Label(self.frame3, text="inverted")
- self.blastilabel.grid(row=4, column=3, columnspan=2)
- self.minblastctag = Label(self.frame3, text="Choose minimum blast colour:")
- self.minblastctag.grid(row=5, column=0)
- self.minblastcentry = Button(self.frame3, text="...", command=self.getminblastc)
- self.minblastcentry.grid(row=5, column=2)
- self.minblastclabel = Label(
- self.frame3, width=3, bg=self.minblastchex, relief=RIDGE
- )
- self.minblastclabel.grid(row=5, column=1)
- self.minblastcentryi = Button(
- self.frame3, text="...", command=self.getminblastci
- )
- self.minblastcentryi.grid(row=5, column=4)
- self.minblastclabeli = Label(
- self.frame3, width=3, bg=self.minblastcihex, relief=RIDGE
- )
- self.minblastclabeli.grid(row=5, column=3)
- self.maxblastctag = Label(self.frame3, text="Choose maximum blast colour:")
- self.maxblastctag.grid(row=6, column=0)
- self.maxblastcentry = Button(self.frame3, text="...", command=self.getmaxblastc)
- self.maxblastcentry.grid(row=6, column=2)
- self.maxblastclabel = Label(
- self.frame3, width=3, bg=self.maxblastchex, relief=RIDGE
- )
- self.maxblastclabel.grid(row=6, column=1)
- self.maxblastcentryi = Button(
- self.frame3, text="...", command=self.getmaxblastci
- )
- self.maxblastcentryi.grid(row=6, column=4)
- self.maxblastclabeli = Label(
- self.frame3, width=3, bg=self.maxblastcihex, relief=RIDGE
- )
- self.maxblastclabeli.grid(row=6, column=3)
- self.blastoutlinetag = Label(self.frame3, text="Outline blast hits in black:")
- self.blastoutlinetag.grid(row=7, column=0)
- self.blastoutlineentry = Checkbutton(self.frame3, variable=self.blastoutline)
- self.blastoutlineentry.grid(row=7, column=1, columnspan=4)
- self.autodetectlab = Label(
- self.frame3, text="Filter small blast hits/annotations:"
- )
- self.autodetectlab.grid(row=8, column=0)
- self.autodetectentry = Checkbutton(self.frame3, variable=self.autodetect)
- self.autodetectentry.grid(row=8, column=1, columnspan=4)
- self.blastoptionsclosebutton = Button(
- self.frame3, text="close", command=self.blastoptionsclose
- )
- self.blastoptionsclosebutton.grid(
- row=9, column=1, columnspan=4, sticky=E, pady=5
- )
- self.blastoptionswindow.geometry("+30+40")
- self.frame3.grid(padx=30, pady=10)
-
- def blastoptionsclose(self):
- self.blastoptionswindow.destroy()
-
- def annotateoptions(self):
- try:
- self.annotateoptionswindow.destroy()
- except:
- pass
- self.annotateoptionswindow = Toplevel()
- self.annotateoptionswindow.title("Annotation")
- self.frame4 = Frame(self.annotateoptionswindow)
- self.annotLab = Label(
- self.frame4,
- text="Annotation Options",
- font="TkDefaultFont 13 bold underline",
- )
- self.annotLab.grid(row=0, column=0)
- self.leglabel = Label(self.frame4, text="Feature Labels:")
- self.leglabel.grid(row=1, column=0)
- self.leg = StringVar(value="None")
- self.legentry = OptionMenu(
- self.frame4, self.leg, "None", "Top", "Bottom", "Top & Bottom"
- )
- self.legentry.config(width=5)
- self.legentry.grid(row=1, column=1, columnspan=4, sticky=EW)
- self.legnamelabel = Label(self.frame4, text="Get feature name from:")
- self.legnamelabel.grid(row=2, column=0)
- self.legnameentry = OptionMenu(
- self.frame4, self.legname, "gene", "product", "locus_tag", "note"
- )
- self.legnameentry.grid(row=2, column=1, columnspan=4, sticky=EW)
- self.exontlabel = Label(self.frame4, text="Thickness of exon lines:")
- self.exontlabel.grid(row=3, column=0)
- self.exontentry = Entry(self.frame4, textvariable=self.exontvar)
- self.exontentry.grid(row=3, column=1, columnspan=4)
- self.genetlabel = Label(self.frame4, text="Thickness of gene outlines:")
- self.genetlabel.grid(row=4, column=0)
- self.genetentry = Entry(self.frame4, textvariable=self.genetvar)
- self.genetentry.grid(row=4, column=1, columnspan=4)
-
- self.featlabel = Label(
- self.frame4, text="Include following features", font="TkDefaultFont 13 bold"
- )
- self.featlabel.grid(row=5, column=0)
- self.featcolour = Label(
- self.frame4, text="Colour", font="TkDefaultFont 13 bold"
- )
- self.featcolour.grid(row=5, column=1, columnspan=2)
- self.featshape = Label(self.frame4, text="type", font="TkDefaultFont 13 bold")
- self.featshape.grid(row=5, column=3, columnspan=2)
-
- self.geneflabel = Label(self.frame4, text="gene")
- self.geneflabel.grid(row=6, column=0)
- self.genefentry = Checkbutton(self.frame4, variable=self.genef)
- self.genefentry.grid(row=6, column=0, sticky=E)
- self.genefcolourBut = Button(
- self.frame4, width=1, height=1, text="...", command=self.pickcolourgene
- )
- self.genefcolourBut.grid(row=6, column=2)
- self.genefcolourlabel = Label(
- self.frame4, width=3, bg=self.genefcolourhex, relief=RIDGE
- )
- self.genefcolourlabel.grid(row=6, column=1)
- self.genefrectentry = OptionMenu(
- self.frame4, self.genefrect, "arrow", "rect", "frame", "pointer"
- )
- self.genefrectentry.config(width=10)
- self.genefrectentry.grid(row=6, column=3, columnspan=2, sticky=EW)
-
- self.cdsflabel = Label(self.frame4, text="CDS")
- self.cdsflabel.grid(row=7, column=0)
- self.cdsfentry = Checkbutton(self.frame4, variable=self.cdsf)
- self.cdsfentry.grid(row=7, column=0, sticky=E)
- self.cdsfcolourBut = Button(
- self.frame4, width=1, height=1, text="...", command=self.pickcolourcds
- )
- self.cdsfcolourBut.grid(row=7, column=2)
- self.cdsfcolourlabel = Label(
- self.frame4, width=3, bg=self.cdsfcolourhex, relief=RIDGE
- )
- self.cdsfcolourlabel.grid(row=7, column=1)
- self.cdsfrectentry = OptionMenu(
- self.frame4, self.cdsfrect, "arrow", "rect", "frame", "pointer"
- )
- self.cdsfrectentry.config(width=6)
- self.cdsfrectentry.grid(row=7, column=3, columnspan=2, sticky=EW)
-
- self.trnaflabel = Label(self.frame4, text="tRNA")
- self.trnaflabel.grid(row=8, column=0)
- self.trnafentry = Checkbutton(self.frame4, variable=self.trnaf)
- self.trnafentry.grid(row=8, column=0, sticky=E)
- self.trnafcolourBut = Button(
- self.frame4, width=1, height=1, text="...", command=self.pickcolourtrna
- )
- self.trnafcolourBut.grid(row=8, column=2)
- self.trnafcolourlabel = Label(
- self.frame4, width=3, bg=self.trnafcolourhex, relief=RIDGE
- )
- self.trnafcolourlabel.grid(row=8, column=1)
- self.trnafrectentry = OptionMenu(
- self.frame4, self.trnafrect, "arrow", "rect", "frame", "pointer"
- )
- self.trnafrectentry.config(width=6)
- self.trnafrectentry.grid(row=8, column=3, columnspan=2, sticky=EW)
-
- self.miscflabel = Label(self.frame4, text="misc_feature")
- self.miscflabel.grid(row=9, column=0)
- self.miscfentry = Checkbutton(self.frame4, variable=self.miscf)
- self.miscfentry.grid(row=9, column=0, sticky=E)
- self.miscfcolourBut = Button(
- self.frame4, width=1, height=1, text="...", command=self.pickcolourmisc
- )
- self.miscfcolourBut.grid(row=9, column=2)
- self.miscfcolourlabel = Label(
- self.frame4, width=3, bg=self.miscfcolourhex, relief=RIDGE
- )
- self.miscfcolourlabel.grid(row=9, column=1)
- self.miscfrectentry = OptionMenu(
- self.frame4, self.miscfrect, "arrow", "rect", "frame", "pointer"
- )
- self.miscfrectentry.config(width=6)
- self.miscfrectentry.grid(row=9, column=3, columnspan=2, sticky=EW)
-
- self.randflabel = Entry(self.frame4, textvariable=self.randfeat)
- self.randflabel.grid(row=10, column=0)
- self.randfentry = Checkbutton(self.frame4, variable=self.randf)
- self.randfentry.grid(row=10, column=0, sticky=E)
- self.randfcolourBut = Button(
- self.frame4, width=1, height=1, text="...", command=self.pickcolourrand
- )
- self.randfcolourBut.grid(row=10, column=2)
- self.randfcolourlabel = Label(
- self.frame4, width=3, bg=self.randfcolourhex, relief=RIDGE
- )
- self.randfcolourlabel.grid(row=10, column=1)
- self.randfrectentry = OptionMenu(
- self.frame4, self.randfrect, "arrow", "rect", "frame", "pointer"
- )
- self.randfrectentry.config(width=6)
- self.randfrectentry.grid(row=10, column=3, columnspan=2, sticky=EW)
- self.annotateoptionsclosebutton = Button(
- self.frame4, text="close", command=self.annotateoptionsclose
- )
- self.annotateoptionsclosebutton.grid(
- row=11, column=3, columnspan=2, sticky=E, pady=5
- )
- self.annotateoptionswindow.geometry("+30+40")
- self.frame4.grid(padx=30, pady=10)
-
- def annotateoptionsclose(self):
- self.annotateoptionswindow.destroy()
-
- def graphoptions(self):
- try:
- self.graphoptionswindow.destroy()
- except:
- pass
- self.graphoptionswindow = Toplevel()
- self.graphoptionswindow.title("Graph")
- self.frame5 = Frame(self.graphoptionswindow)
- self.graphlabel = Label(
- self.frame5, text="Graph options", font="TkDefaultFont 13 bold"
- )
- self.graphlabel.grid(row=0, column=0)
-
- self.graphtypelabel = Label(self.frame5, text="Graph:")
- self.graphtypelabel.grid(row=1, column=0)
- self.graphtypeentry = OptionMenu(
- self.frame5,
- self.graphtype,
- "None",
- "GC Content",
- "GC Skew",
- "Coverage",
- "Custom",
- command=self.graphtypechanges,
- )
- self.graphtypeentry.grid(row=1, column=1)
-
- self.alloronelabel = Label(self.frame5, text="Multiple graphs:")
- self.alloronelabel.grid(row=2, column=0)
- self.alloroneentry = Checkbutton(
- self.frame5, variable=self.allorone, state=DISABLED
- )
- self.alloroneentry.grid(row=2, column=1)
-
- self.graphfilelabel = Label(self.frame5, text="Input file:")
- self.graphfilelabel.grid(row=3, column=0)
- self.graphfileentry = Entry(
- self.frame5, textvariable=self.graphfile, state=DISABLED
- )
- self.graphfileentry.grid(row=3, column=1)
- self.graphfilebut = Button(
- self.frame5,
- width=1,
- height=1,
- text="...",
- command=self.opengraphfile,
- state=DISABLED,
- )
- self.graphfilebut.grid(row=3, column=2)
-
- self.steplabel = Label(self.frame5, text="Step size:")
- self.steplabel.grid(row=4, column=0)
- self.stepentry = Entry(self.frame5, textvariable=self.step, state=DISABLED)
- self.stepentry.grid(row=4, column=1)
-
- self.windsizelabel = Label(self.frame5, text="Window size:")
- self.windsizelabel.grid(row=5, column=0)
- self.windsizeentry = Entry(
- self.frame5, textvariable=self.windsize, state=DISABLED
- )
- self.windsizeentry.grid(row=5, column=1)
-
- self.graphheightlabel = Label(self.frame5, text="Graph Height:")
- self.graphheightlabel.grid(row=6, column=0)
- self.graphheightentry = Entry(
- self.frame5, textvariable=self.graphheight, state=DISABLED
- )
- self.graphheightentry.grid(row=6, column=1)
-
- self.maxylabel = Label(self.frame5, text="Maximum Y:")
- self.maxylabel.grid(row=7, column=0)
- self.maxyentry = Entry(self.frame5, textvariable=self.maxy, state=DISABLED)
- self.maxyentry.grid(row=7, column=1)
-
- self.logitlabel = Label(self.frame5, text="Log scale (log10):")
- self.logitlabel.grid(row=8, column=0)
- self.logitbut = Checkbutton(self.frame5, variable=self.logit, state=DISABLED)
- self.logitbut.grid(row=8, column=1)
-
- self.histolabel = Label(self.frame5, text="Graph Type:")
- self.histolabel.grid(row=9, column=0)
- self.histoentry = OptionMenu(self.frame5, self.histo, "Histogram", "Line")
- self.histoentry.config(state=DISABLED)
- self.histoentry.grid(row=9, column=1)
-
- self.graphlinetlabel = Label(self.frame5, text="Axis line thickness:")
- self.graphlinetlabel.grid(row=10, column=0)
- self.graphlinetentry = Entry(
- self.frame5, textvariable=self.graphlinet, state=DISABLED
- )
- self.graphlinetentry.grid(row=10, column=1)
-
- self.poslabel = Label(self.frame5, text="Positive value colour:")
- self.poslabel.grid(row=11, column=0)
- self.poscollabel = Label(self.frame5, width=3, bg=self.poscolhex, relief=RIDGE)
- self.poscollabel.grid(row=11, column=1, sticky=EW)
- self.poscolbutton = Button(
- self.frame5,
- width=1,
- height=1,
- text="...",
- command=self.pickposcol,
- state=DISABLED,
- )
- self.poscolbutton.grid(row=11, column=2)
-
- self.neglabel = Label(self.frame5, text="Negative value colour:")
- self.neglabel.grid(row=12, column=0)
- self.negcollabel = Label(self.frame5, width=3, bg=self.negcolhex, relief=RIDGE)
- self.negcollabel.grid(row=12, column=1, sticky=EW)
- self.negcolbutton = Button(
- self.frame5,
- width=1,
- height=1,
- text="...",
- command=self.picknegcol,
- state=DISABLED,
- )
- self.negcolbutton.grid(row=12, column=2)
-
- self.ggaplabel = Label(self.frame5, text="Gap between graph and figure:")
- self.ggaplabel.grid(row=13, column=0)
- self.ggapentry = Entry(self.frame5, textvariable=self.ggap, state=DISABLED)
- self.ggapentry.grid(row=13, column=1)
-
- self.graphoptionsclosebutton = Button(
- self.frame5, text="close", command=self.graphoptionsclose
- )
- self.graphoptionsclosebutton.grid(
- row=14, column=1, columnspan=2, sticky=E, pady=5
- )
- self.graphoptionswindow.geometry("+30+40")
- self.graphtypechanges(self.graphtype.get())
- self.frame5.grid(padx=30, pady=10)
-
- def graphoptionsclose(self):
- self.graphoptionswindow.destroy()
-
- def opengraphfile(self):
- filename = tkFileDialog.askopenfilename(parent=self.graphoptionswindow)
- self.graphfile.set(filename)
-
- def pickcolourgene(self):
- colour = tkColorChooser.askcolor(
- self.genefcolour, parent=self.annotateoptionswindow
- )
- if colour != None:
- self.genefcolour = colour[0]
- self.genefcolourhex = colour[1]
- self.genefcolourlabel.configure(bg=colour[1])
-
- def pickcolourcds(self):
- colour = tkColorChooser.askcolor(
- self.cdsfcolour, parent=self.annotateoptionswindow
- )
- if colour != None:
- self.cdsfcolour = colour[0]
- self.cdsfcolourhex = colour[1]
- self.cdsfcolourlabel.configure(bg=colour[1])
-
- def pickcolourtrna(self):
- colour = tkColorChooser.askcolor(
- self.trnafcolour, parent=self.annotateoptionswindow
- )
- if colour != None:
- self.trnafcolour = colour[0]
- self.trnafcolourhex = colour[1]
- self.trnafcolourlabel.configure(bg=colour[1])
-
- def pickcolourrand(self):
- colour = tkColorChooser.askcolor(
- self.randfcolour, parent=self.annotateoptionswindow
- )
- if colour != None:
- self.randfcolour = colour[0]
- self.randfcolourhex = colour[1]
- self.randfcolourlabel.configure(bg=colour[1])
-
- def pickcolourmisc(self):
- colour = tkColorChooser.askcolor(
- self.miscfcolour, parent=self.annotateoptionswindow
- )
- if colour != None:
- self.miscfcolour = colour[0]
- self.miscfcolourhex = colour[1]
- self.miscfcolourlabel.configure(bg=colour[1])
-
- def getminblastc(self):
- colour = tkColorChooser.askcolor(self.minblastc, parent=self.blastoptionswindow)
- if colour != None:
- self.minblastc = colour[0]
- self.minblastchex = colour[1]
- self.minblastclabel.configure(bg=colour[1])
-
- def getmaxblastc(self):
- colour = tkColorChooser.askcolor(self.maxblastc, parent=self.blastoptionswindow)
- if colour != None:
- self.maxblastc = colour[0]
- self.maxblastchex = colour[1]
- self.maxblastclabel.configure(bg=colour[1])
-
- def getminblastci(self):
- colour = tkColorChooser.askcolor(
- self.minblastci, parent=self.blastoptionswindow
- )
- if colour != None:
- self.minblastci = colour[0]
- self.minblastcihex = colour[1]
- self.minblastclabeli.configure(bg=colour[1])
-
- def getmaxblastci(self):
- colour = tkColorChooser.askcolor(
- self.maxblastci, parent=self.blastoptionswindow
- )
- if colour != None:
- self.maxblastci = colour[0]
- self.maxblastcihex = colour[1]
- self.maxblastclabeli.configure(bg=colour[1])
-
- def makeFigure(self):
- global abortCaptain
- if self.outfile.get() == "" and not self.filetype.get().startswith("Preview"):
- self.getoutfile()
- if self.outfile.get() == "" and not self.filetype.get().startswith("Preview"):
- return None
- try:
- if self.thegenblast.isAlive():
- tkMessageBox.showerror("Please wait", "BLAST already running.")
- return None
- except:
- pass
- if self.running:
- abortCaptain = True
- else:
- abortCaptain = False
- self.running = True
- self.createFigure.config(text="Cancel Figure")
- try:
- self.minlength = int(self.minlengthvar.get())
- except:
- tkMessageBox.showerror(
- "Try again.", "Please enter a valid integer for minimum length."
- )
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- try:
- self.mineval = float(self.minevalvar.get())
- except:
- tkMessageBox.showerror(
- "Try again.",
- "Please enter a valid floating point number for minimum e value.",
- )
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- try:
- self.minIdent = float(self.minIdentvar.get())
- except:
- tkMessageBox.showerror(
- "Try again.",
- "Please enter a valid floating point number for minimum identity.",
- )
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- try:
- self.figwidth = int(self.figwidthvar.get())
- except:
- tkMessageBox.showerror(
- "Try again.", "Please enter a valid integer for figure width."
- )
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- try:
- self.height1 = int(self.height1var.get())
- except:
- tkMessageBox.showerror(
- "Try again.", "Please enter a valid integer for height of genes."
- )
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- try:
- self.height2 = int(self.height2var.get())
- except:
- tkMessageBox.showerror(
- "Try again.",
- "Please enter a valid integer for height of blast matches.",
- )
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- try:
- self.glt = int(self.gltvar.get())
- except:
- tkMessageBox.showerror(
- "Try again.",
- "Please enter a valid integer for genome line thickness.",
- )
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- try:
- self.exont = int(self.exontvar.get())
- except:
- tkMessageBox.showerror(
- "Try again.",
- "Please enter a valid integer for exon line thickeness.",
- )
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- try:
- self.genet = int(self.genetvar.get())
- except:
- tkMessageBox.showerror(
- "Try again.",
- "Please enter a valid integer for exon line thickeness.",
- )
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- self.featDict = {}
- if self.genef.get() == 1:
- self.featDict["gene"] = (self.genefrect.get(), self.genefcolour)
- if self.cdsf.get() == 1:
- self.featDict["CDS"] = (self.cdsfrect.get(), self.cdsfcolour)
- if self.trnaf.get() == 1:
- self.featDict["tRNA"] = (self.trnafrect.get(), self.trnafcolour)
- if self.miscf.get() == 1:
- self.featDict["misc_feature"] = (self.miscfrect.get(), self.miscfcolour)
- if self.randf.get() == 1:
- self.featDict[self.randfeat.get()] = (
- self.randfrect.get(),
- self.randfcolour,
- )
- self.reverseList = []
- self.minmaxlist = []
- for i in self.genlist.get(0, END):
- self.reverseList.append(self.revlist[i[:2]])
- try:
- if self.maxcutlist[i[:2]] == "Max":
- self.minmaxlist.append((int(self.mincutlist[i[:2]]), "Max"))
- else:
- self.minmaxlist.append(
- (int(self.mincutlist[i[:2]]), int(self.maxcutlist[i[:2]]))
- )
- except:
- tkMessageBox.showerror(
- "Try again.",
- "Please enter a valid integer cut off points for annotation file "
- + i[:2]
- + ".",
- )
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- if self.graphtype.get() != "None" and (
- self.leg.get() == "Top" or self.leg.get() == "Top & Bottom"
- ):
- tkMessageBox.showerror(
- "Try again.",
- "Please Choose either the graph or the legend to be displayed above the figure.",
- )
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- if self.leg.get() != "None" and self.leg2.get() != "None":
- tkMessageBox.showerror(
- "Try again.",
- "Please Choose either feature labels or a feature legend.",
- )
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- else:
- if self.leg.get() == "None":
- self.theleg = self.leg2.get()
- else:
- self.theleg = self.leg.get()
- self.inputlist = []
- self.graphlist = []
- getit = True
- nocompare = False
- if self.genlist.size() > 1 and self.blastlist.size() == 0:
- nocompare = tkMessageBox.askquestion(
- "No blast files.",
- "Only gene figures will be drawn, continue?\n(To create a comparison figure please generate or manually input a blast file)",
- )
- if nocompare == "no":
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- else:
- nocompare = True
- if self.genlist.size() > 0:
- if self.graphtype.get() == "GC Content":
- self.graphlist.append(
- self.getGCcontent(
- self.genlist.get(0)[4:],
- self.mincutlist[self.genlist.get(0)[:2]],
- self.maxcutlist[self.genlist.get(0)[:2]],
- )
- )
- elif self.graphtype.get() == "GC Skew":
- self.graphlist.append(
- self.getGCskew(
- self.genlist.get(0)[4:],
- self.mincutlist[self.genlist.get(0)[:2]],
- self.maxcutlist[self.genlist.get(0)[:2]],
- )
- )
- self.inputlist.append(self.genlist.get(0)[4:])
- tempfile = open(self.genlist.get(0)[4:])
- getline = True
- line = tempfile.readline()
- while getline and line != "":
- if (
- line.startswith("FT source")
- or line.startswith(" source")
- or line.startswith("ORIGIN")
- or line.startswith("SQ Sequence")
- or line.startswith(">")
- ):
- getline = False
- line = tempfile.readline()
- if getline:
- self.genlengths = [
- tkSimpleDialog.askinteger(
- "Length not in file",
- "Please enter the length of genome in file 1",
- )
- ]
- else:
- self.genlengths = [None]
- tempfile.close()
- else:
- tkMessageBox.showerror(
- "Try again.", "Please enter at least one feature file."
- )
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- if self.genlist.size() - 1 == self.blastlist.size() or nocompare:
- for i in range(self.genlist.size() - 1):
- self.inputlist.append(self.blastlist.get(i))
- if (
- self.graphtype.get() == "GC Content"
- and self.allorone.get() == 1
- ):
- self.graphlist.append(
- self.getGCcontent(
- self.genlist.get(i + 1)[4:],
- self.mincutlist[self.genlist.get(i + 1)[:2]],
- self.maxcutlist[self.genlist.get(i + 1)[:2]],
- )
- )
- elif self.graphtype.get() == "GC Skew" and self.allorone.get() == 1:
- self.graphlist.append(
- self.getGCcontent(
- self.genlist.get(i + 1)[4:],
- self.mincutlist[self.genlist.get(i + 1)[:2]],
- self.maxcutlist[self.genlist.get(i + 1)[:2]],
- )
- )
- self.inputlist.append(self.genlist.get(i + 1)[4:])
- tempfile = open(self.genlist.get(i + 1)[4:])
- getline = True
- line = tempfile.readline()
- while getline and line != "":
- if (
- line.startswith("FT source")
- or line.startswith(" source")
- or line.startswith("ORIGIN")
- or line.startswith("SQ Sequence")
- or line.startswith(">")
- ):
- getline = False
- line = tempfile.readline()
- if getline:
- self.genlengths.append(
- tkSimpleDialog.askinteger(
- "Length not in file",
- "Please enter the length of genome in file "
- + str(i + 1)
- + ".",
- )
- )
- else:
- self.genlengths.append(None)
- tempfile.close()
- else:
- if self.blastlist.size() >= self.genlist.size():
- tkMessageBox.showerror("Try again.", "Too many blast files.")
- else:
- tkMessageBox.showerror("Try again.", "Too few blast files.")
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- try:
- self.drawfig2 = int(self.drawfig2var.get())
- if self.drawfig2 == 0:
- self.drawfig2 = False
- except:
- tkMessageBox.showerror(
- "Try again.", "Please enter a valid integer for length of figure 2."
- )
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- self.compress = False
- if self.drawfig1.get() == 1:
- self.vardrawfig1 = True
- else:
- self.vardrawfig1 = False
- if self.blastoutline.get() == 1:
- self.varblastoutline = True
- else:
- self.varblastoutline = False
-
- if self.graphtype.get() == "None":
- self.vargraphit = None
- elif self.graphtype.get() == "GC Content":
- self.vargraphit = [
- self.graphlist,
- self.poscol,
- self.negcol,
- int(self.graphheight.get()),
- int(self.graphlinet.get()),
- self.histo.get(),
- self.maxy.get(),
- int(self.ggap.get()),
- ]
- if None in self.vargraphit[0]:
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- elif self.graphtype.get() == "GC Skew":
- self.vargraphit = [
- self.graphlist,
- self.poscol,
- self.negcol,
- int(self.graphheight.get()),
- int(self.graphlinet.get()),
- self.histo.get(),
- self.maxy.get(),
- int(self.ggap.get()),
- ]
- if None in self.vargraphit[0] == None:
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- elif self.graphtype.get() == "Coverage":
- self.vargraphit = [
- [self.getCoverage()],
- self.poscol,
- self.negcol,
- int(self.graphheight.get()),
- int(self.graphlinet.get()),
- self.histo.get(),
- self.maxy.get(),
- int(self.ggap.get()),
- ]
- if None in self.vargraphit[0]:
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- elif self.graphtype.get() == "Custom":
- tempcustom = self.getCustom()
- if self.allorone.get() != 1:
- tempcustom = [tempcustom[0]]
- self.vargraphit = [
- tempcustom,
- self.poscol,
- self.negcol,
- int(self.graphheight.get()),
- int(self.graphlinet.get()),
- self.histo.get(),
- self.maxy.get(),
- int(self.ggap.get()),
- ]
- if None in self.vargraphit[0]:
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- if self.cutstate != None and self.cutstate != (
- str(self.mincutlist),
- str(self.maxcutlist),
- ):
- tkMessageBox.showerror(
- "Try again.",
- "Please generate blast files again, blast files do not match modified annotation files.",
- )
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- if self.orderstate != None and self.orderstate != self.genlist.get(0, END):
- tkMessageBox.showerror(
- "Try again.",
- "Please generate blast files again, order of annotation files has been changed.",
- )
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- getit = True
- for i in self.inputlist:
- if not os.path.exists(i):
- if not i == "" and not nocompare:
- getit = False
- if not getit:
- tkMessageBox.showerror("Try again.", "A selected file does not exist.")
- self.running = False
- self.createFigure.config(text="Create Figure")
- return None
- else:
- self.thethread = threading.Thread(target=self.makeFigure2)
- self.thethread.start()
- self.thethread2 = threading.Thread(target=self.dotdotdot)
- self.thethread2.start()
-
- def dotdotdot(self):
- while self.thethread.isAlive():
- time.sleep(0.5)
- self.processLab.config(text="Drawing figure..")
- time.sleep(0.5)
- self.processLab.config(text="Drawing figure...")
- time.sleep(0.5)
- self.processLab.config(text="Drawing figure.")
- if self.theminblast == 101:
- self.processLab.config(text="Drawing figure...\ncomplete.")
- elif self.theminblast == None:
- self.processLab.config(text="Drawing figure...\nfailed.")
- else:
- self.processLab.config(text="Drawing figure...\ncomplete.")
- self.running = False
- self.createFigure.config(text="Create Figure")
-
- def makeFigure2(self):
- if self.filetype.get() == "Bitmap (bmp)":
- if self.outfile.get()[-4:].lower() != ".bmp":
- theoutfile = self.outfile.get() + ".bmp"
- else:
- theoutfile = self.outfile.get()
- self.theminblast = draw(
- theoutfile,
- self.minlength,
- self.mineval,
- self.minIdent,
- self.inputlist,
- self.figwidth,
- self.height1,
- self.height2,
- self.minblastc,
- self.maxblastc,
- self.minblastci,
- self.maxblastci,
- self.vardrawfig1,
- self.drawfig2,
- False,
- self.compress,
- self.reverseList,
- self.featDict,
- self.glt,
- self.exont,
- self.genet,
- self.genlengths,
- self.aln.get(),
- self.vargraphit,
- self.varblastoutline,
- self.minmaxlist,
- self.autodetect.get() == 1,
- self.theleg,
- self.legname.get(),
- )
- elif self.filetype.get() == "Vector file (svg)":
- if self.outfile.get()[-4:].lower() != ".svg":
- theoutfile = self.outfile.get() + ".svg"
- else:
- theoutfile = self.outfile.get()
- self.theminblast = drawsvg(
- theoutfile,
- self.minlength,
- self.mineval,
- self.minIdent,
- self.inputlist,
- self.figwidth,
- self.height1,
- self.height2,
- self.minblastc,
- self.maxblastc,
- self.minblastci,
- self.maxblastci,
- self.vardrawfig1,
- self.drawfig2,
- False,
- self.compress,
- self.reverseList,
- self.featDict,
- self.glt,
- self.exont,
- self.genet,
- self.genlengths,
- self.aln.get(),
- self.vargraphit,
- self.varblastoutline,
- self.minmaxlist,
- self.autodetect.get() == 1,
- self.theleg,
- self.legname.get(),
- )
- else:
- self.theminblast = self.getPreview()
-
- def getPreview(self):
- try:
- self.prevwindow.destroy()
- except:
- pass
- theoutfile = None
- if self.filetype.get() == "Preview (1:1)":
- testit, self.theminblast, width, height = draw(
- theoutfile,
- self.minlength,
- self.mineval,
- self.minIdent,
- self.inputlist,
- self.figwidth,
- self.height1,
- self.height2,
- self.minblastc,
- self.maxblastc,
- self.minblastci,
- self.maxblastci,
- self.vardrawfig1,
- self.drawfig2,
- False,
- self.compress,
- self.reverseList,
- self.featDict,
- self.glt,
- self.exont,
- self.genet,
- self.genlengths,
- self.aln.get(),
- self.vargraphit,
- self.varblastoutline,
- self.minmaxlist,
- self.autodetect.get() == 1,
- self.theleg,
- self.legname.get(),
- 1,
- )
- else:
- testit, self.theminblast, width, height = draw(
- theoutfile,
- self.minlength,
- self.mineval,
- self.minIdent,
- self.inputlist,
- self.figwidth,
- self.height1,
- self.height2,
- self.minblastc,
- self.maxblastc,
- self.minblastci,
- self.maxblastci,
- self.vardrawfig1,
- self.drawfig2,
- False,
- self.compress,
- self.reverseList,
- self.featDict,
- self.glt,
- self.exont,
- self.genet,
- self.genlengths,
- self.aln.get(),
- self.vargraphit,
- self.varblastoutline,
- self.minmaxlist,
- self.autodetect.get() == 1,
- self.theleg,
- self.legname.get(),
- 2,
- )
- self.prevwindow = Toplevel()
- self.prevwindow.title("Preview")
- self.prevframe = Frame(self.prevwindow)
- self.prevwindow.grid_rowconfigure(0, weight=1)
- self.prevwindow.grid_columnconfigure(0, weight=1)
- self.prevwindow.geometry("+30+40")
- self.prevframe.grid(row=0, column=0, sticky=NSEW)
- self.prevframe.grid_rowconfigure(0, weight=1)
- self.prevframe.grid_columnconfigure(0, weight=1)
- xscrollbar = Scrollbar(self.prevframe, orient=HORIZONTAL)
- xscrollbar.grid(row=1, column=0, sticky=E + W)
- yscrollbar = Scrollbar(self.prevframe)
- yscrollbar.grid(row=0, column=1, sticky=N + S)
- self.canvas = Canvas(
- self.prevframe,
- bd=0,
- bg="#000000",
- scrollregion=(0, 0, width, height),
- xscrollcommand=xscrollbar.set,
- yscrollcommand=yscrollbar.set,
- )
- test = PhotoImage(data=testit)
- self.canvas.create_image(0, 0, image=test, anchor=NW)
- self.canvas.grid(row=0, column=0, sticky=NSEW)
- self.canvas.image = test
- xscrollbar.config(command=self.canvas.xview)
- yscrollbar.config(command=self.canvas.yview)
- # label = Label(self.prevframe, image=test)
- # label.image = test
- # label.grid()
- # self.canvas.image = test
- return self.theminblast
-
- def gbk2fasta(self, genbank, out, mincut, maxcut):
- getseq = False
- getembl = False
- getmultifa = False
- seq = ""
- try:
- mincut = int(mincut)
- if mincut < 1:
- mincut = 1
- if maxcut != "Max":
- maxcut = int(maxcut)
- if maxcut < 1:
- maxcut = 1
- except:
- tkMessageBox.showerror("Try again.", "Annotation slice values not valid.")
- try:
- gen = open(genbank)
- outfile = open(out, "w")
- for line in gen:
- if line.startswith("ORIGIN"):
- getseq = True
- elif line.startswith("SQ Sequence"):
- getembl = True
- elif line.startswith(">"):
- if getmultifa:
- seq += "qqq"
- else:
- getmultifa = True
- elif line.startswith("//"):
- getseq = False
- getembl = False
- elif getseq:
- seq += "".join(line.split()[1:])
- elif getembl:
- seq += "".join(line.split()[:-1])
- elif getmultifa:
- seq += line.rstrip()
- if getmultifa:
- getset = set(seq)
- rightchars = set("atgcATGCqnNuUyYkKmMsSwWbBdDhHvVxXrR-")
- isitgood = True
- for i in getset:
- if not i in rightchars:
- isitgood = False
- if not isitgood:
- tkMessageBox.showerror(
- "Try again.",
- "Annotation file contains invalid characters.\
- Check genbank/EMBL contains no lines starting with > or that\
- fasta file contains only valid nucleotides",
- )
- return 0
- if "/" in out:
- outfile.write(">" + out.split("/")[1] + "\n")
- else:
- outfile.write(">" + out + "\n")
- if maxcut == "Max":
- maxcut = len(seq)
- if mincut == 1 and maxcut == len(seq):
- if getmultifa:
- seq = seq.replace("qqq", "n" * int(len(seq) / 500))
- outfile.write(seq)
- elif mincut < maxcut:
- seq = seq[mincut - 1 : maxcut]
- if getmultifa:
- seq = seq.replace("qqq", "n" * int(len(seq) / 500))
- outfile.write(seq)
- else:
- seq = seq[mincut - 1 :] + seq[:maxcut]
- if getmultifa:
- seq = seq.replace("qqq", "n" * int(len(seq) / 500))
- outfile.write(seq)
- if len(seq) == 0:
- tkMessageBox.showerror(
- "Try again.", "There is no sequence in " + genbank + "."
- )
- return 0
- else:
- return 1
- except:
- tkMessageBox.showerror("Try again.", genbank + " does not exist.")
- return 0
-
- def genBlast(self):
- try:
- if self.thegenblast.isAlive():
- tkMessageBox.showerror("Please wait", "BLAST already running.")
- return None
- except:
- pass
- try:
- if self.thethread.isAlive():
- tkMessageBox.showerror("Please wait", "easyfig creating figure.")
- return None
- except:
- pass
- try:
- if self.thedlblast.isAlive():
- tkMessageBox.showerror("Please wait", "Blast is downloading.")
- return None
- except:
- pass
- self.processLab.config(text="Performing blastn...")
- self.workingDir = tkFileDialog.askdirectory(
- title="Please select a working directory."
- )
- if self.workingDir == ():
- self.processLab.config(text="Performing blastn...\nCancelled.")
- return None
- os.chdir(self.workingDir)
- index = 0
- if self.genlist.size() < 2:
- tkMessageBox.showerror(
- "Try again.",
- "easyfig needs at least 2 genbank files to create blast files.",
- )
- self.processLab.config(text="Performing blastn...\nCancelled.")
- return None
- else:
- thegenlist = self.genlist.get(0, END)
- for i in thegenlist:
- index += 1
- temp = self.gbk2fasta(
- i[4:],
- str(index) + ".easyfig.fa",
- self.mincutlist[i[:2]],
- self.maxcutlist[i[:2]],
- )
- if temp == 0:
- return None
- self.cutstate = (str(self.mincutlist), str(self.maxcutlist))
- self.orderstate = self.genlist.get(0, END)
- if self.blastnDir == None:
- pass
- elif self.blastnDir[-11:] == "tblastx.exe":
- if os.path.exists(self.blastnDir[:-11] + "blastn.exe"):
- self.blastnDir = self.blastnDir[:-11] + "blastn.exe"
- else:
- self.blastnDir = None
- elif self.blastnDir[-7:] == "tblastx":
- if os.path.exists(self.blastnDir[:-7] + "blastn"):
- self.blastnDir = self.blastnDir[:-7] + "blastn"
- else:
- self.blastnDir = None
- if self.dbnDir != None:
- if not os.path.exists(self.dbnDir):
- self.dbnDir = None
- if self.blastnDir != None:
- if not os.path.exists(self.blastnDir):
- self.blastnDir = None
- if self.dbnDir != None:
- pass
- elif isNewBlastDB():
- self.dbnDir = "makeblastdb"
- elif isLegBlastDB():
- self.dblDir = "formatdb"
- elif os.path.exists("~/bin/makeblastdb"):
- self.dbnDir = "~/bin/makeblastdb"
- elif os.path.exists("/usr/local/ncbi/bin/makeblastdb"):
- self.blastnDir = "/usr/local/ncbi/bin/makeblastdb"
- elif os.path.exists("/usr/local/bin/makeblastdb"):
- self.dbnDir = "/usr/local/bin/makeblastdb"
- elif os.path.exists(self.pwd + "/makeblastdb"):
- self.dbnDir = self.pwd + "/makeblastdb"
- elif os.path.exists("/usr/local/ncbi/blast/bin/makeblastdb"):
- self.dbnDir = "/usr/local/ncbi/blast/bin/makeblastdb"
- elif os.path.exists("/usr/local/bin/formatdb"):
- self.dblDir = "/usr/local/bin/formatdb"
- elif os.path.exists("~/bin/formatdb"):
- self.dblDir = "~/bin/formatdb"
- elif os.path.exists(self.pwd + "/formatdb"):
- self.dblDir = self.pwd + "/formatdb"
- elif os.path.exists(self.pwd + "/makeblastdb.exe"):
- self.dbnDir = self.pwd + "/makeblastdb.exe"
- elif os.path.exists(self.pwd + "/formatdb.exe"):
- self.dblDir = self.pwd + "/formatdb.exe"
- else:
- folderlist = []
- for letter in string.uppercase:
- if os.path.exists(letter + ":/program files/ncbi/"):
- folders = os.listdir(letter + ":/program files/ncbi/")
- for f in folders:
- if f.upper().startswith("BLAST"):
- folderlist.append(letter + ":/program files/ncbi/" + f)
- folderlist.sort(reverse=True)
- blastgot = False
- if len(folderlist) > 0:
- for f in folderlist:
- if not blastgot and os.path.exists(f + "/bin/makeblastdb.exe"):
- blastgot = True
- self.dblDir = '"' + f + '/bin/makeblastdb"'
- if self.blastnDir != None:
- pass
- elif isNewBlastn():
- self.blastnDir = "blastn"
- elif isLegBlastall():
- self.blastlDir = "blastall"
- elif os.path.exists("~/bin/blastn"):
- self.blastnDir = "~/bin/blastn"
- elif os.path.exists("/usr/local/ncbi/bin/blastn"):
- self.blastnDir = "/usr/local/ncbi/bin/blastn"
- elif os.path.exists("/usr/local/bin/blastn"):
- self.blastnDir = "/usr/local/bin/blastn"
- elif os.path.exists(self.pwd + "/blastn"):
- self.blastnDir = self.pwd + "/blastn"
- elif os.path.exists("/usr/local/ncbi/blast/bin/blastn"):
- self.blastnDir = "/usr/local/ncbi/blast/bin/blastn"
- elif os.path.exists("/usr/local/bin/blastall"):
- self.blastlDir = "/usr/local/bin/blastall"
- elif os.path.exists("~/bin/blastall"):
- self.blastlDir = "~/bin/blastall"
- elif os.path.exists(self.pwd + "/blastall"):
- self.blastlDir = self.pwd + "/blastall"
- elif os.path.exists(self.pwd + "/blastall.exe"):
- self.blastlDir = self.pwd + "/blastall.exe"
- elif os.path.exists(self.pwd + "/blastn.exe"):
- self.blastnDir = self.pwd + "/blastn.exe"
- else:
- folderlist = []
- for letter in string.uppercase:
- if os.path.exists(letter + ":/program files/ncbi/"):
- folders = os.listdir(letter + ":/program files/ncbi/")
- for f in folders:
- if f.upper().startswith("BLAST"):
- folderlist.append(letter + ":/program files/ncbi/" + f)
- folderlist.sort(reverse=True)
- blastgot = False
- if len(folderlist) > 0:
- for f in folderlist:
- if not blastgot and os.path.exists(f + "/bin/blastn.exe"):
- blastgot = True
- self.blastnDir = '"' + f + '/bin/blastn"'
- if (
- self.blastnDir == None
- and self.blastlDir == None
- or self.dbnDir == None
- and self.dblDir == None
- ):
- dlblast = tkMessageBox.askquestion(
- "Blast not found", "Do you wish to download Blast?"
- )
- if dlblast != "no":
- self.thedlblast = threading.Thread(target=self.downloadBlast)
- self.thedlblast.start()
- return None
- tempdir = tkFileDialog.askdirectory(
- title="Please select a directory with blastn and makeblastdb."
- )
- if tempdir == ():
- tempdir = ""
- if os.path.exists(tempdir + "/blastn.exe") and os.path.exists(
- tempdir + "/makeblastdb.exe"
- ):
- self.blastnDir = tempdir + "/blastn.exe"
- self.dbnDir = tempdir + "/makeblastdb.exe"
- elif os.path.exists(tempdir + "/blastn") and os.path.exists(
- tempdir + "/makeblastdb"
- ):
- self.blastnDir = tempdir + "/blastn"
- self.dbnDir = tempdir + "/makeblastdb"
- else:
- self.processLab.config(
- text="Performing blastn...\nInvadild directory.\nBlast not found."
- )
- self.blastnDir = None
- self.dbnDir = None
- return None
- if self.workingDir == "":
- self.processLab.config(text="Performing blastn...\nCancelled.")
- return None
- self.thegenblast = threading.Thread(target=self.genBlast2)
- self.thegenblast.start()
- self.thegenblast2 = threading.Thread(target=self.genBlastDot)
- self.thegenblast2.start()
-
- def genBlastDot(self):
- while self.thegenblast.isAlive():
- time.sleep(0.5)
- self.processLab.config(text="Performing blastn.")
- time.sleep(0.5)
- self.processLab.config(text="Performing blastn..")
- time.sleep(0.5)
- self.processLab.config(text="Performing blastn...")
- if self.blastlist.size() == self.genlist.size() - 1:
- self.processLab.config(text="Performing blastn...\ncomplete.")
- else:
- self.processLab.config(
- text="Blast has failed, please check genbank files and rerun."
- )
-
- def genBlast2(self):
- self.blastlist.delete(0, END)
- the_tempdb_dir = os.path.abspath(".") + "/tempdb"
- for i in range(self.genlist.size() - 1):
- if self.dbnDir != None:
- subprocess.Popen(
- self.dbnDir
- + " -dbtype nucl -out "
- + the_tempdb_dir
- + " -in "
- + str(i + 2)
- + ".easyfig.fa",
- shell=True,
- ).wait()
- elif self.dblDir != None:
- subprocess.Popen(
- self.dblDir
- + " -p F -t tempdb -n tempdb -i "
- + str(i + 2)
- + ".easyfig.fa",
- shell=True,
- ).wait()
- if self.blastnDir:
- subprocess.Popen(
- self.blastnDir
- + " -task blastn -db "
- + the_tempdb_dir
- + " -outfmt 6 -query "
- + str(i + 1)
- + ".easyfig.fa -out "
- + str(i + 1)
- + str(i + 2)
- + ".easyfig.out",
- shell=True,
- ).wait()
- elif self.blastlDir:
- subprocess.Popen(
- self.blastlDir
- + " -p blastn -d "
- + the_tempdb_dir
- + " -F F -m 8 -a 8 -i "
- + str(i + 1)
- + ".easyfig.fa -o "
- + str(i + 1)
- + str(i + 2)
- + ".easyfig.out",
- shell=True,
- ).wait()
- self.blastlist.insert(
- END, self.workingDir + "/" + str(i + 1) + str(i + 2) + ".easyfig.out"
- )
- self.blastlist.xview_moveto(1)
- if os.path.exists("tempdb.nhr"):
- os.remove("tempdb.nhr")
- if os.path.exists("tempdb.nin"):
- os.remove("tempdb.nin")
- if os.path.exists("error.log"):
- os.remove("error.log")
- if os.path.exists("tempdb.nsq"):
- os.remove("tempdb.nsq")
- if os.path.exists("formatdb.log"):
- os.remove("formatdb.log")
- os.chdir(self.pwd)
-
- def genBlastX(self):
- try:
- if self.thegenblast.isAlive():
- tkMessageBox.showerror("Please wait", "BLAST already running.")
- return None
- except:
- pass
- try:
- if self.thethread.isAlive():
- tkMessageBox.showerror("Please wait", "easyfig creating figure.")
- return None
- except:
- pass
- try:
- if self.thedlblast.isAlive():
- tkMessageBox.showerror("Please wait", "Blast is downloading.")
- return None
- except:
- pass
- self.workingDir = tkFileDialog.askdirectory(
- title="Please select a working directory."
- )
- if self.workingDir == ():
- self.processLab.config(text="Performing tblastx...\nCancelled.")
- return
- os.chdir(self.workingDir)
- index = 0
- if self.genlist.size() < 2:
- tkMessageBox.showerror(
- "Try again.",
- "easyfig needs at least 2 genbank files to create blast files.",
- )
- else:
- thegenlist = self.genlist.get(0, END)
- for i in thegenlist:
- index += 1
- temp = self.gbk2fasta(
- i[4:],
- str(index) + ".easyfig.fa",
- self.mincutlist[i[:2]],
- self.maxcutlist[i[:2]],
- )
- if temp == 0:
- return None
- self.cutstate = (str(self.mincutlist), str(self.maxcutlist))
- self.orderstate = self.genlist.get(0, END)
- if self.blastnDir == None:
- pass
- elif self.blastnDir[-10:] == "blastn.exe":
- if os.path.exists(self.blastnDir[:-10] + "tblastx.exe"):
- self.blastnDir = self.blastnDir[:-10] + "tblastx.exe"
- else:
- self.blastnDir = None
- elif self.blastnDir[-6:] == "blastn":
- if os.path.exists(self.blastnDir[:-6] + "tblastx"):
- self.blastnDir = self.blastnDir[:-6] + "tblastx"
- else:
- self.blastnDir = None
- if self.dbnDir != None:
- if not os.path.exists(self.dbnDir):
- self.dbnDir = None
- if self.blastnDir != None:
- if not os.path.exists(self.blastnDir):
- self.blastnDir = None
- if self.dbnDir != None:
- pass
- elif isNewBlastDB():
- self.dbnDir = "makeblastdb"
- elif isLegBlastDB():
- self.dblDir = "formatdb"
- elif os.path.exists("~/bin/makeblastdb"):
- self.dbnDir = "~/bin/makeblastdb"
- elif os.path.exists("/usr/local/bin/makeblastdb"):
- self.dbnDir = "/usr/local/bin/makeblastdb"
- elif os.path.exists("./makeblastdb"):
- self.dbnDir = "./makeblastdb"
- elif os.path.exists("/usr/local/ncbi/bin/makeblastdb"):
- self.blastnDir = "/usr/local/ncbi/bin/makeblastdb"
- elif os.path.exists("/usr/local/ncbi/blast/bin/makeblastdb"):
- self.dbnDir = "/usr/local/ncbi/blast/bin/makeblastdb"
- elif os.path.exists("/usr/local/bin/formatdb"):
- self.dblDir = "/usr/local/bin/formatdb"
- elif os.path.exists("~/bin/formatdb"):
- self.dblDir = "~/bin/formatdb"
- elif os.path.exists("./formatdb"):
- self.dblDir = "./formatdb"
- elif os.path.exists("./makeblastdb.exe"):
- self.dbnDir = "./makeblastdb.exe"
- elif os.path.exists("./formatdb.exe"):
- self.dblDir = "./formatdb.exe"
- else:
- folderlist = []
- for letter in string.uppercase:
- if os.path.exists(letter + ":/program files/ncbi/"):
- folders = os.listdir(letter + ":/program files/ncbi/")
- for f in folders:
- if f.upper().startswith("BLAST"):
- folderlist.append(letter + ":/program files/ncbi/" + f)
- folderlist.sort(reverse=True)
- blastgot = False
- if len(folderlist) > 0:
- for f in folderlist:
- if not blastgot and os.path.exists(f + "/bin/makeblastdb.exe"):
- blastgot = True
- self.dblDir = '"' + f + '/bin/makeblastdb"'
- if self.blastnDir != None:
- pass
- elif isNewTblastx():
- self.blastnDir = "tblastx"
- elif isLegBlastall():
- self.blastlDir = "blastall"
- elif os.path.exists("~/bin/tblastx"):
- self.blastnDir = "~/bin/tblastx"
- elif os.path.exists("/usr/local/ncbi/bin/tblastx"):
- self.blastnDir = "/usr/local/ncbi/bin/tblastx"
- elif os.path.exists("/usr/local/bin/tblastx"):
- self.blastnDir = "/usr/local/bin/tblastx"
- elif os.path.exists("./tblastx"):
- self.blastnDir = "./tblastx"
- elif os.path.exists("/usr/local/ncbi/blast/bin/tblastx"):
- self.blastnDir = "/usr/local/ncbi/blast/bin/tblastx"
- elif os.path.exists("/usr/local/bin/blastall"):
- self.blastlDir = "/usr/local/bin/blastall"
- elif os.path.exists("~/bin/blastall"):
- self.blastlDir = "~/bin/blastall"
- elif os.path.exists("./blastall"):
- self.blastlDir = "./blastall"
- elif os.path.exists("./tblastx.exe"):
- self.blastnDir = "./tblastx.exe"
- else:
- folderlist = []
- for letter in string.uppercase:
- if os.path.exists(letter + ":/program files/ncbi/"):
- folders = os.listdir(letter + ":/program files/ncbi/")
- for f in folders:
- if f.upper().startswith("BLAST"):
- folderlist.append(letter + ":/program files/ncbi/" + f)
- folderlist.sort(reverse=True)
- blastgot = False
- if len(folderlist) > 0:
- for f in folderlist:
- if not blastgot and os.path.exists(f + "/bin/tblastx.exe"):
- blastgot = True
- self.blastnDir = '"' + f + '/bin/tblastx.exe"'
- if (
- self.blastnDir == None
- and self.blastlDir == None
- or self.dbnDir == None
- and self.dbl == None
- ):
- dlblast = tkMessageBox.askquestion(
- "Blast not found", "Do you wish to download Blast?"
- )
- if dlblast:
- self.thedlblast = threading.Thread(target=self.downloadBlast)
- self.thedlblast.start()
- return None
- tempdir = tkFileDialog.askdirectory(
- title="Please select a directory with tblastx and makeblastdb."
- )
- if os.path.exists(tempdir + "/tblastx.exe") and os.path.exists(
- tempdir + "/makeblastdb.exe"
- ):
- self.blastnDir = tempdir + "/tblastx.exe"
- self.dbnDir = tempdir + "/makeblastdb.exe"
- elif os.path.exists(tempdir + "/tblastx") and os.path.exists(
- tempdir + "/makeblastdb"
- ):
- self.blastnDir = tempdir + "/tblastx"
- self.dbnDir = tempdir + "/makeblastdb"
- else:
- self.processLab.config(
- text="Performing blastn...\nInvadild directory.\nBlast not found."
- )
- return None
- if self.workingDir == "":
- self.processLab.config(text="Performing blastn...\nCancelled.")
- return None
- self.thegenblast = threading.Thread(target=self.genBlastX2)
- self.thegenblast.start()
- self.thegenblast2 = threading.Thread(target=self.genBlastXdot)
- self.thegenblast2.start()
-
- def genBlastXdot(self):
- while self.thegenblast.isAlive():
- time.sleep(0.5)
- self.processLab.config(text="Performing tblastx.")
- time.sleep(0.5)
- self.processLab.config(text="Performing tblastx..")
- time.sleep(0.5)
- self.processLab.config(text="Performing tblastx...")
- self.processLab.config(text="Performing tblastx...\ncomplete.")
-
- def genBlastX2(self):
- self.blastlist.delete(0, END)
- for i in range(self.genlist.size() - 1):
- if self.dbnDir != None:
- subprocess.Popen(
- self.dbnDir
- + " -dbtype nucl -out tempdb -in "
- + str(i + 2)
- + ".easyfig.fa",
- shell=True,
- ).wait()
- elif self.dblDir != None:
- subprocess.Popen(
- self.dblDir
- + " -p F -t tempdb -n tempdb -i "
- + str(i + 2)
- + ".easyfig.fa",
- shell=True,
- ).wait()
- if self.blastnDir:
- subprocess.Popen(
- self.blastnDir
- + " -db tempdb -outfmt 6 -query "
- + str(i + 1)
- + ".easyfig.fa -out "
- + str(i + 1)
- + str(i + 2)
- + ".easyfig.out",
- shell=True,
- ).wait()
- elif self.blastlDir:
- subprocess.Popen(
- self.blastlDir
- + " -p tblastx -d tempdb -F F -m 8 -a 8 -i "
- + str(i + 1)
- + ".easyfig.fa -o "
- + str(i + 1)
- + str(i + 2)
- + ".easyfig.out",
- shell=True,
- ).wait()
- self.blastlist.insert(
- END, self.workingDir + "/" + str(i + 1) + str(i + 2) + ".easyfig.out"
- )
- self.blastlist.xview_moveto(1)
- if os.path.exists("tempdb.nhr"):
- os.remove("tempdb.nhr")
- if os.path.exists("tempdb.nin"):
- os.remove("tempdb.nin")
- if os.path.exists("error.log"):
- os.remove("error.log")
- if os.path.exists("tempdb.nsq"):
- os.remove("tempdb.nsq")
- if os.path.exists("formatdb.log"):
- os.remove("formatdb.log")
- os.chdir(self.pwd)
-
- def annmod(self, event=None):
- try:
- self.annwindow.destroy()
- except:
- pass
- self.annwindow = Toplevel()
- self.frame6 = Frame(self.annwindow)
- self.annwindow.title("Subregions")
- self.frangelab = Label(self.frame6, text="Range", font="TkDefaultFont 13 bold")
- self.frangelab.grid(row=0, column=2, columnspan=3)
- self.ffilelab = Label(
- self.frame6, text="Ann. file", font="TkDefaultFont 13 bold"
- )
- self.ffilelab.grid(row=1, column=1, pady=10)
- self.fminlab = Label(self.frame6, text="Min", font="TkDefaultFont 13 bold")
- self.fminlab.grid(row=1, column=2, pady=10)
- self.fdotdot = Label(self.frame6, text=" .. ")
- self.fdotdot.grid(row=1, column=3)
- self.fmaxlab = Label(self.frame6, text="Max", font="TkDefaultFont 13 bold")
- self.fmaxlab.grid(row=1, column=4, pady=10)
- self.frevlab = Label(self.frame6, text="Reverse", font="TkDefaultFont 13 bold")
- self.frevlab.grid(row=1, column=5, pady=10)
- self.scrollbar2 = Scrollbar(self.frame6, orient=VERTICAL)
- self.fgenlist = Listbox(
- self.frame6, yscrollcommand=self.scrollbar2.set, exportselection=0
- )
- self.fgenlist.bind("", self.setselectedcuts)
- self.fgenlist.bind("", self.doublecuts)
- self.fgenlist.bind("", self.onmousewheel)
- self.fgenlist.bind("", self.onmousewheel)
- self.fgenlist.bind("", self.onmousewheel)
- self.fgenlist.grid(row=2, column=1)
- self.fgenminlist = Listbox(
- self.frame6, yscrollcommand=self.scrollbar2.set, exportselection=0
- )
- self.fgenminlist.config(width=7)
- self.fgenminlist.bind("", self.setselectedcuts)
- self.fgenminlist.bind("", self.doublecuts)
- self.fgenminlist.bind("", self.onmousewheel)
- self.fgenminlist.bind("", self.onmousewheel)
- self.fgenminlist.bind("", self.onmousewheel)
- self.fgenminlist.grid(row=2, column=2)
- self.fgenmaxlist = Listbox(
- self.frame6, yscrollcommand=self.scrollbar2.set, exportselection=0
- )
- self.fgenmaxlist.config(width=7)
- self.fgenmaxlist.bind("", self.setselectedcuts)
- self.fgenmaxlist.bind("", self.doublecuts)
- self.fgenmaxlist.bind("", self.onmousewheel)
- self.fgenmaxlist.bind("", self.onmousewheel)
- self.fgenmaxlist.bind("", self.onmousewheel)
- self.fgenmaxlist.grid(row=2, column=4)
- self.fgenrevlist = Listbox(
- self.frame6, yscrollcommand=self.scrollbar2.set, exportselection=0
- )
- self.fgenrevlist.config(width=5)
- self.fgenrevlist.bind("", self.setselectedcuts)
- self.fgenrevlist.bind("", self.doublecuts)
- self.fgenrevlist.bind("", self.onmousewheel)
- self.fgenrevlist.bind("", self.onmousewheel)
- self.fgenrevlist.bind("", self.onmousewheel)
- self.fgenrevlist.grid(row=2, column=5)
- self.scrollbar2.config(command=self.yview2)
- self.scrollbar2.grid(row=2, column=0, sticky=NS)
- annlist = self.genlist.get(0, END)
- annlistpostemp = self.genlist.curselection()
- for i in annlist:
- self.fgenlist.insert(END, i)
- self.fgenminlist.insert(END, self.mincutlist[i[:2]])
- self.fgenmaxlist.insert(END, self.maxcutlist[i[:2]])
- if self.revlist[i[:2]]:
- self.fgenrevlist.insert(END, "yes")
- else:
- self.fgenrevlist.insert(END, "no")
- self.fgenlist.xview_moveto(1)
- self.genmincut = StringVar()
- self.genmaxcut = StringVar()
- self.genrev = IntVar()
- self.mincutentry = Entry(self.frame6, textvariable=self.genmincut)
- self.mincutentry.config(width=7)
- self.mincutentry.grid(row=3, column=2)
- self.maxcutentry = Entry(self.frame6, textvariable=self.genmaxcut)
- self.maxcutentry.config(width=7)
- self.maxcutentry.grid(row=3, column=4)
- self.genrentry = Checkbutton(self.frame6, variable=self.genrev)
- self.genrentry.grid(row=3, column=5)
- if len(annlist) > 0 and annlistpostemp != ():
- self.fgenlist.selection_set(annlistpostemp)
- self.fgenminlist.selection_set(annlistpostemp)
- self.fgenmaxlist.selection_set(annlistpostemp)
- self.fgenrevlist.selection_set(annlistpostemp)
- self.fgenlist.see(annlistpostemp)
- self.fgenminlist.see(annlistpostemp)
- self.fgenmaxlist.see(annlistpostemp)
- self.fgenrevlist.see(annlistpostemp)
- self.genmincut.set(self.fgenminlist.get(annlistpostemp))
- self.genmaxcut.set(self.fgenmaxlist.get(annlistpostemp))
- if self.fgenrevlist.get(annlistpostemp) == "yes":
- self.genrev.set(1)
- else:
- self.genrev.set(0)
- self.changecutsbutton = Button(
- self.frame6, text=" change cutoffs ", command=self.changecuts
- )
- self.changecutsbutton.grid(row=3, column=1, pady=10)
- self.annwindowclosebutton = Button(
- self.frame6, text="close", command=self.annwindowclose
- )
- self.annwindowclosebutton.grid(
- row=12, column=4, columnspan=2, sticky=E, pady=10
- )
- self.annwindow.geometry("+30+40")
- self.frame6.grid(padx=30, pady=10)
-
- def changecuts(self):
- thepost = self.fgenlist.curselection()
- if thepost == ():
- tkMessageBox.showerror("Try again.", "Please select genome to change.")
- return
- else:
- thepost = int(thepost[0])
- self.fgenminlist.delete(thepost)
- self.fgenminlist.insert(thepost, self.genmincut.get())
- self.mincutlist[self.fgenlist.get(thepost)[:2]] = self.genmincut.get()
- self.fgenmaxlist.delete(thepost)
- self.fgenmaxlist.insert(thepost, self.genmaxcut.get())
- self.maxcutlist[self.fgenlist.get(thepost)[:2]] = self.genmaxcut.get()
- self.fgenrevlist.delete(thepost)
- if self.genrev.get() == 1:
- self.fgenrevlist.insert(thepost, "yes")
- self.revlist[self.fgenlist.get(thepost)[:2]] = True
- else:
- self.fgenrevlist.insert(thepost, "no")
- self.revlist[self.fgenlist.get(thepost)[:2]] = False
- if not thepost == self.fgenlist.size() - 1:
- self.fgenlist.selection_clear(0, END)
- self.fgenlist.selection_set(thepost + 1, thepost + 1)
- self.fgenlist.see(thepost + 1)
- self.fgenminlist.selection_clear(0, END)
- self.fgenminlist.selection_set(thepost + 1, thepost + 1)
- self.fgenminlist.see(thepost + 1)
- self.fgenmaxlist.selection_clear(0, END)
- self.fgenmaxlist.selection_set(thepost + 1, thepost + 1)
- self.fgenmaxlist.see(thepost + 1)
- self.fgenrevlist.selection_clear(0, END)
- self.fgenrevlist.selection_set(thepost + 1, thepost + 1)
- self.fgenrevlist.see(thepost + 1)
-
- def yview2(self, *args):
- apply(self.fgenlist.yview, args)
- apply(self.fgenminlist.yview, args)
- apply(self.fgenmaxlist.yview, args)
- apply(self.fgenrevlist.yview, args)
-
- def onmousewheel(self, event):
- return "break"
-
- def setselectedcuts(self, event):
- selected = self.fgenlist.nearest(event.y)
- tempypos = self.fgenlist.yview()[0]
- self.fgenminlist.yview_moveto(tempypos)
- self.fgenmaxlist.yview_moveto(tempypos)
- self.fgenrevlist.yview_moveto(tempypos)
- self.fgenlist.selection_clear(0, END)
- self.fgenlist.selection_set(selected, selected)
- self.fgenminlist.selection_clear(0, END)
- self.fgenminlist.selection_set(selected, selected)
- self.fgenmaxlist.selection_clear(0, END)
- self.fgenmaxlist.selection_set(selected, selected)
- self.fgenrevlist.selection_clear(0, END)
- self.fgenrevlist.selection_set(selected, selected)
- self.genmincut.set(self.fgenminlist.get(selected))
- self.genmaxcut.set(self.fgenmaxlist.get(selected))
- if self.fgenrevlist.get(selected) == "yes":
- self.genrev.set(1)
- else:
- self.genrev.set(0)
-
- def doublecuts(self, event):
- try:
- self.doublecutswin.destroy()
- except:
- pass
- self.doublecutsel = self.fgenlist.nearest(event.y)
- self.doublecutswin = Toplevel(self.frame6)
- self.doublecutswin.title("Change subregion")
- self.frame10 = Frame(self.doublecutswin)
- self.dublabel1 = Label(
- self.frame10,
- text="Modify file " + self.fgenlist.get(self.doublecutsel)[:3],
- font="TkDefaultFont 13 bold",
- )
- self.dublabel1.grid(row=0, column=0, pady=5)
- self.dublabel2 = Label(self.frame10, text="Min Cutoff:")
- self.dublabel2.grid(row=1, column=0)
- self.dublabel3 = Label(self.frame10, text="Max Cutoff:")
- self.dublabel3.grid(row=2, column=0)
- self.dublabel4 = Label(self.frame10, text="Reverse:")
- self.dublabel4.grid(row=3, column=0)
- self.dublabel2str = StringVar(value=self.fgenminlist.get(self.doublecutsel))
- self.dublabel3str = StringVar(value=self.fgenmaxlist.get(self.doublecutsel))
- if self.fgenrevlist.get(self.doublecutsel) == "yes":
- self.dublabel4int = IntVar(value=1)
- else:
- self.dublabel4int = IntVar(value=0)
- self.dublabel2ent = Entry(self.frame10, textvariable=self.dublabel2str)
- self.dublabel2ent.grid(row=1, column=1)
- self.dublabel3ent = Entry(self.frame10, textvariable=self.dublabel3str)
- self.dublabel3ent.grid(row=2, column=1)
- self.dublabel4ent = Checkbutton(self.frame10, variable=self.dublabel4int)
- self.dublabel4ent.grid(row=3, column=1)
- self.doublecutsclosebut = Button(
- self.frame10, text="Save & Close", command=self.doublecutsclose
- )
- self.doublecutsclosebut.grid(row=4, column=1, sticky=E)
- self.doublecutswin.geometry("+40+50")
- self.frame10.grid(padx=20, pady=20)
-
- def doublecutsclose(self):
- self.fgenminlist.delete(self.doublecutsel)
- self.fgenminlist.insert(self.doublecutsel, self.dublabel2str.get())
- self.mincutlist[
- self.fgenlist.get(self.doublecutsel)[:2]
- ] = self.dublabel2str.get()
- self.fgenmaxlist.delete(self.doublecutsel)
- self.fgenmaxlist.insert(self.doublecutsel, self.dublabel3str.get())
- self.maxcutlist[
- self.fgenlist.get(self.doublecutsel)[:2]
- ] = self.dublabel3str.get()
- self.fgenrevlist.delete(self.doublecutsel)
- if self.dublabel4int.get() == 1:
- self.fgenrevlist.insert(self.doublecutsel, "yes")
- self.revlist[self.fgenlist.get(self.doublecutsel)[:2]] = True
- else:
- self.fgenrevlist.insert(self.doublecutsel, "no")
- self.revlist[self.fgenlist.get(self.doublecutsel)[:2]] = False
- self.doublecutswin.destroy()
-
- def annwindowclose(self):
- self.annwindow.destroy()
-
- def openFile1(self):
- filename = tkFileDialog.askopenfilename(
- filetypes=[
- (
- "genbank/embl/fasta",
- (
- "*.gbk",
- "*.embl",
- "*.gb",
- "*.fa",
- "*.fna",
- "*.dna",
- "*.fas",
- "*.fasta",
- ),
- ),
- ("All files", "*"),
- ]
- )
- self.gen1.set(filename)
-
- def openFile2(self):
- filename = tkFileDialog.askopenfilename(
- filetypes=[
- (
- "genbank/embl/fasta",
- (
- "*.gbk",
- "*.embl",
- "*.gb",
- "*.fa",
- "*.fna",
- "*.dna",
- "*.fas",
- "*.fasta",
- ),
- ),
- ("All files", "*"),
- ]
- )
- self.gen2.set(filename)
-
- def openFile3(self):
- filename = tkFileDialog.askopenfilename(
- filetypes=[
- (
- "genbank/embl/fasta",
- (
- "*.gbk",
- "*.embl",
- "*.gb",
- "*.fa",
- "*.fna",
- "*.dna",
- "*.fas",
- "*.fasta",
- ),
- ),
- ("All files", "*"),
- ]
- )
- self.gen3.set(filename)
-
- def openFile4(self):
- filename = tkFileDialog.askopenfilename(
- filetypes=[
- (
- "genbank/embl/fasta",
- (
- "*.gbk",
- "*.embl",
- "*.gb",
- "*.fa",
- "*.fna",
- "*.dna",
- "*.fas",
- "*.fasta",
- ),
- ),
- ("All files", "*"),
- ]
- )
- self.gen4.set(filename)
-
- def openFile5(self):
- filename = tkFileDialog.askopenfilename(
- filetypes=[
- (
- "genbank/embl/fasta",
- (
- "*.gbk",
- "*.embl",
- "*.gb",
- "*.fa",
- "*.fna",
- "*.dna",
- "*.fas",
- "*.fasta",
- ),
- ),
- ("All files", "*"),
- ]
- )
- self.gen5.set(filename)
-
- def openFile6(self):
- filename = tkFileDialog.askopenfilename(
- filetypes=[
- (
- "genbank/embl/fasta",
- (
- "*.gbk",
- "*.embl",
- "*.gb",
- "*.fa",
- "*.fna",
- "*.dna",
- "*.fas",
- "*.fasta",
- ),
- ),
- ("All files", "*"),
- ]
- )
- self.gen6.set(filename)
-
- def openFile7(self):
- filename = tkFileDialog.askopenfilename(
- filetypes=[
- (
- "genbank/embl/fasta",
- (
- "*.gbk",
- "*.embl",
- "*.gb",
- "*.fa",
- "*.fna",
- "*.dna",
- "*.fas",
- "*.fasta",
- ),
- ),
- ("All files", "*"),
- ]
- )
- self.gen7.set(filename)
-
- def openFile8(self):
- filename = tkFileDialog.askopenfilename(
- filetypes=[
- (
- "genbank/embl/fasta",
- (
- "*.gbk",
- "*.embl",
- "*.gb",
- "*.fa",
- "*.fna",
- "*.dna",
- "*.fas",
- "*.fasta",
- ),
- ),
- ("All files", "*"),
- ]
- )
- self.gen8.set(filename)
-
- def openFile9(self):
- filename = tkFileDialog.askopenfilename(
- filetypes=[
- (
- "genbank/embl/fasta",
- (
- "*.gbk",
- "*.embl",
- "*.gb",
- "*.fa",
- "*.fna",
- "*.dna",
- "*.fas",
- "*.fasta",
- ),
- ),
- ("All files", "*"),
- ]
- )
- self.gen9.set(filename)
-
- def openFile0(self):
- filename = tkFileDialog.askopenfilename(
- filetypes=[
- (
- "genbank/embl/fasta",
- (
- "*.gbk",
- "*.embl",
- "*.gb",
- "*.fa",
- "*.fna",
- "*.dna",
- "*.fas",
- "*.fasta",
- ),
- ),
- ("All files", "*"),
- ]
- )
- self.gen0.set(filename)
-
- def openBlast1(self):
- filename = tkFileDialog.askopenfilename()
- self.blast1.set(filename)
-
- def openBlast2(self):
- filename = tkFileDialog.askopenfilename()
- self.blast2.set(filename)
-
- def openBlast3(self):
- filename = tkFileDialog.askopenfilename()
- self.blast3.set(filename)
-
- def openBlast4(self):
- filename = tkFileDialog.askopenfilename()
- self.blast4.set(filename)
-
- def openBlast5(self):
- filename = tkFileDialog.askopenfilename()
- self.blast5.set(filename)
-
- def openBlast6(self):
- filename = tkFileDialog.askopenfilename()
- self.blast6.set(filename)
-
- def openBlast7(self):
- filename = tkFileDialog.askopenfilename()
- self.blast7.set(filename)
-
- def openBlast8(self):
- filename = tkFileDialog.askopenfilename()
- self.blast8.set(filename)
-
- def openBlast9(self):
- filename = tkFileDialog.askopenfilename()
- self.blast9.set(filename)
-
- def getoutfile(self):
- if self.filetype.get() == "Bitmap (bmp)":
- filename = tkFileDialog.asksaveasfilename(
- filetypes=[("bmp", "*.bmp"), ("All files", "*")]
- )
- else:
- filename = tkFileDialog.asksaveasfilename(
- filetypes=[("svg", "*.svg"), ("All files", "*")]
- )
- self.outfile.set(filename)
-
- def handleDownload(self, block):
- self.downloadFile.write(block)
- if (
- self.thecount * 100 / self.totalBytes
- != (self.thecount + len(block)) * 100 / self.totalBytes
- ):
- try:
- self.processLab.config(
- text="Finding Blast... Done\nDownloading... "
- + str((self.thecount + len(block)) * 100 / self.totalBytes)
- + "%"
- )
- except:
- pass
- self.thecount += len(block)
-
- def downloadBlastAuto(self):
- self.thedlblast = threading.Thread(target=self.downloadBlast)
- self.thedlblast.start()
-
- def downloadBlastMan(self):
- theplatform = platform.system()
- architecture = platform.architecture()[0]
- if theplatform == "Linux" and architecture == "32bit":
- ok = tkMessageBox.askokcancel(
- "Downloading Blast Manually",
- "Easyfig suggests downloading\nand extracting\nncbi-blast-x.x.x+-ia32-linux.tar.gz\n\
-clicking ok will bring up\nthe download location\nin your browser.",
- )
- if ok:
- webbrowser.open_new(
- "ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/"
- )
- elif theplatform == "Linux" and architecture == "64bit":
- ok = tkMessageBox.askokcancel(
- "Downloading Blast Manually",
- "Easyfig suggests downloading\nand extracting\nncbi-blast-x.x.x+-x64-linux.tar.gz\n\
-clicking ok will bring up\nthe download location\nin your browser.",
- )
- if ok:
- webbrowser.open_new(
- "ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/"
- )
- elif theplatform == "Windows" and architecture == "32bit":
- ok = tkMessageBox.askokcancel(
- "Downloading Blast Manually",
- "Easyfig suggests downloading\nand running\nncbi-blast-x.x.x+-win32.exe\n\
-clicking ok will bring up\nthe download location\nin your browser.",
- )
- if ok:
- webbrowser.open_new(
- "ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/"
- )
- elif theplatform == "Windows" and architecture == "64bit":
- ok = tkMessageBox.askokcancel(
- "Downloading Blast Manually",
- "Easyfig suggests downloading\nand running\nncbi-blast-x.x.x+-win64.exe\n\
-clicking ok will bring up\nthe download location\nin your browser.",
- )
- if ok:
- webbrowser.open_new(
- "ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/"
- )
- elif theplatform == "Darwin":
- ok = tkMessageBox.askokcancel(
- "Downloading Blast Manually",
- "Easyfig suggests downloading\nand running\nncbi-blast-x.x.x+.dmg\n\
-clicking ok will bring up\nthe download location\nin your browser.",
- )
- if ok:
- webbrowser.open_new(
- "ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/"
- )
- else:
- ok = tkMessageBox.askokcancel(
- "Downloading Blast Manually",
- "Easyfig suggests downloading\nand compiling\nncbi-blast-x.x.x+.src.tar.gz\n\
-clicking ok will bring up\nthe download location\nin your browser.",
- )
- if ok:
- webbrowser.open_new(
- "ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/"
- )
-
- def chooseBlastDir(self):
- tempdir = tkFileDialog.askdirectory(
- title="Please select a directory with blastn and makeblastdb."
- )
- if tempdir == () or tempdir == "":
- return
- if os.path.exists(tempdir + "/blastn.exe") and os.path.exists(
- tempdir + "/makeblastdb.exe"
- ):
- self.blastnDir = tempdir + "/blastn.exe"
- self.dbnDir = tempdir + "/makeblastdb.exe"
- elif os.path.exists(tempdir + "/blastn") and os.path.exists(
- tempdir + "/makeblastdb"
- ):
- self.blastnDir = tempdir + "/blastn"
- self.dbnDir = tempdir + "/makeblastdb"
- else:
- tkMessageBox.showerror("Try again.", "Blast not found in Directory.")
- self.blastnDir = None
- self.dbnDir = None
-
- def downloadBlast(self):
- theplatform = platform.system()
- architecture = platform.architecture()[0]
- self.processLab.config(text="Finding Blast...")
- try:
- ftp = FTP("ftp.ncbi.nlm.nih.gov")
- ftp.login()
- ftp.cwd("blast/executables/blast+/LATEST/")
- files = []
- ftp.dir(files.append)
- except:
- self.processLab.config(
- text="Unable to Create FTP \nconnection.\nPlease dowload manually."
- )
- return
- filename = None
- try:
- true_platform = os.environ["PROCESSOR_ARCHITEW6432"]
- if true_platform == "AMD64":
- architecture = "64bit"
- except KeyError:
- pass
- for line in files:
- if (
- theplatform == "Linux"
- and architecture == "32bit"
- and line.split()[8][-17:] == "ia32-linux.tar.gz"
- ):
- filename = line.split()[8]
- self.totalBytes = int(line.split()[4])
- elif (
- theplatform == "Linux"
- and architecture == "64bit"
- and line.split()[8][-16:] == "x64-linux.tar.gz"
- ):
- filename = line.split()[8]
- self.totalBytes = int(line.split()[4])
- elif (
- theplatform == "Windows"
- and architecture == "32bit"
- and line.split()[8][-17:] == "ia32-win32.tar.gz"
- ):
- filename = line.split()[8]
- self.totalBytes = int(line.split()[4])
- elif (
- theplatform == "Windows"
- and architecture == "64bit"
- and line.split()[8][-16:] == "x64-win64.tar.gz"
- ):
- filename = line.split()[8]
- self.totalBytes = int(line.split()[4])
- elif (
- theplatform == "Darwin"
- and line.split()[8][-23:] == "universal-macosx.tar.gz"
- ):
- filename = line.split()[8]
- self.totalBytes = int(line.split()[4])
- if filename == None:
- self.processLab.config(
- text="Unable to download blast.\nPlease dowload manually."
- )
- return
- self.thecount = 0
- try:
- self.downloadFile = open(filename, "wb")
- except:
- self.processLab.config(
- text="Unable to download blast.\nPlease dowload manually."
- )
- return
- ftp.retrbinary("RETR " + filename, self.handleDownload)
- self.downloadFile.close()
- self.processLab.config(text="Downloading... Complete\nExtracting file...")
- try:
- tfile = tarfile.open(filename, "r:gz")
- tfile.extractall()
- except:
- self.processLab.config(
- text="Unable to download blast.\nPlease dowload manually."
- )
- return
- filenamedir = filename.split("+")[0] + "+"
- if theplatform == "Windows":
- try:
- shutil.move(filenamedir + "/bin/makeblastdb.exe", self.pwd)
- except:
- pass
- try:
- shutil.move(filenamedir + "/bin/blastn.exe", self.pwd)
- except:
- pass
- try:
- shutil.move(filenamedir + "/bin/tblastx.exe", self.pwd)
- except:
- pass
- else:
- try:
- shutil.move(filenamedir + "/bin/makeblastdb", self.pwd)
- except:
- pass
- try:
- shutil.move(filenamedir + "/bin/blastn", self.pwd)
- except:
- pass
- try:
- shutil.move(filenamedir + "/bin/tblastx", self.pwd)
- except:
- pass
- tfile.close()
- shutil.rmtree(filenamedir)
- os.remove(filename)
- if os.path.exists(self.pwd + "/blastn") or os.path.exists(
- self.pwd + "/blastn.exe"
- ):
- self.processLab.config(text="Extracting file... Done\nBLAST+ installed.")
- else:
- self.processLab.config(
- text="Unable to download blast.\nPlease dowload manually."
- )
-
-
-def gbk2fasta(genbank, out, mincut, maxcut):
- getseq = False
- getembl = False
- getmultifa = False
- seq = ""
- try:
- mincut = int(mincut)
- if mincut < 1:
- mincut = 1
- if maxcut != "Max":
- maxcut = int(maxcut)
- if maxcut < 1:
- maxcut = 1
- except:
- print ("Annotation slice values not valid.")
- try:
- gen = open(genbank)
- outfile = open(out, "w")
- for line in gen:
- if line.startswith("ORIGIN"):
- getseq = True
- elif line.startswith("SQ Sequence"):
- getembl = True
- elif line.startswith(">"):
- if getmultifa:
- seq += "qqq"
- else:
- getmultifa = True
- elif line.startswith("//"):
- getseq = False
- getembl = False
- elif getseq:
- seq += "".join(line.split()[1:])
- elif getembl:
- seq += "".join(line.split()[:-1])
- elif getmultifa:
- seq += line.rstrip()
- if getmultifa:
- getset = set(seq)
- rightchars = set("atgcATGCqnNuUyYkKmMsSwWbBdDhHvVxXrR-")
- isitgood = True
- for i in getset:
- if not i in rightchars:
- isitgood = False
- if not isitgood:
- print ("Annotation file contains invalid characters. Check genbank/EMBL contains no lines starting with > or that fasta file contains only valid nucleotides")
- return 0
- if "/" in out:
- outfile.write(">" + out.split("/")[1] + "\n")
- else:
- outfile.write(">" + out + "\n")
- if maxcut == "Max":
- maxcut = len(seq)
- if mincut == 1 and maxcut == len(seq):
- if getmultifa:
- seq = seq.replace("qqq", "n" * int(len(seq) / 500))
- outfile.write(seq)
- elif mincut < maxcut:
- seq = seq[mincut - 1 : maxcut]
- if getmultifa:
- seq = seq.replace("qqq", "n" * int(len(seq) / 500))
- outfile.write(seq)
- else:
- seq = seq[mincut - 1 :] + seq[:maxcut]
- if getmultifa:
- seq = seq.replace("qqq", "n" * int(len(seq) / 500))
- outfile.write(seq)
- if len(seq) == 0:
- print ("There is no sequence in " + genbank + ".")
- return 0
- else:
- return 1
- except:
- print (genbank + " does not exist.")
- return 0
-
-
-def getGCcontent(filename, windsize, step, mincut, maxcut):
- try:
- gen = open(filename)
- getseq = False
- getembl = False
- seq = ""
- for line in gen:
- if line.startswith("ORIGIN"):
- getseq = True
- elif line.startswith("SQ Sequence"):
- getembl = True
- elif line.startswith("//"):
- getseq = False
- getembl = False
- elif getseq:
- seq += "".join(line.split()[1:])
- elif getembl:
- seq += "".join(line.split()[:-1])
- gen.close()
- seq = seq.upper()
- except:
- print ("Annotation file " + filename + " not valid.")
- return None
- if len(seq) == 0:
- print ("Annotation file " + filename + " not valid.")
- return None
- if maxcut == "Max":
- seq = seq[int(mincut) - 1 :]
- elif int(maxcut) <= int(mincut):
- seq = seq[int(mincut) - 1 :] + seq[: int(maxcut) + 1]
- else:
- seq = seq[int(mincut) - 1 : int(maxcut) + 1]
- window1 = int(windsize) / 2
- window2 = int(windsize) - window1
- thearray = []
- for i in range(0, len(seq), int(step)):
- seqstring = seq[max([0, i - window1]) : i + window2]
- thearray.append(
- (seqstring.count("G") + seqstring.count("C")) * 1.0 / len(seqstring) - 0.5
- )
- return thearray
-
-
-def getGCskew(filename, windsize, step, mincut, maxcut):
- try:
- getseq = False
- getembl = False
- seq = ""
- gen = open(filename)
- for line in gen:
- if line.startswith("ORIGIN"):
- getseq = True
- elif line.startswith("SQ Sequence"):
- getembl = True
- elif line.startswith("//"):
- getseq = False
- getembl = False
- elif getseq:
- seq += "".join(line.split()[1:])
- elif getembl:
- seq += "".join(line.split()[:-1])
- gen.close()
- seq = seq.upper()
- except:
- print ("Annotation file " + filename + " not valid.")
- return None
- if len(seq) == 0:
- print ("Annotation file " + filename + " not valid.")
- return None
- if maxcut == "Max":
- seq = seq[int(mincut) - 1 :]
- elif int(maxcut) <= int(mincut):
- seq = seq[int(mincut) - 1 :] + seq[: int(maxcut) + 1]
- else:
- seq = seq[int(mincut) - 1 : int(maxcut) + 1]
- window1 = int(windsize) / 2
- window2 = int(windsize) - window1
- thearray = []
- for i in range(0, len(seq), int(step)):
- seqstring = seq[max([0, i - window1]) : i + window2]
- gcount = seqstring.count("G")
- ccount = seqstring.count("C")
- try:
- thearray.append((gcount - ccount) * 1.0 / (gcount + ccount))
- except:
- thearray.append(0)
- return thearray
-
-
-def getCoverage(filename, filename2, mincut, maxcut):
- # DEFNIITION: takes a file and reads in all contigs, their start positions and the reads located within the contig
- # REQUIRES: a valid ace file
- # RETURNS: A list of objects of class contig
- seq = ""
- getseq = False
- getembl = False
- try:
- gen = open(filename)
- for line in gen:
- if line.startswith("ORIGIN"):
- getseq = True
- elif line.startswith("SQ Sequence"):
- getembl = True
- elif line.startswith("//"):
- getseq = False
- getembl = False
- elif getseq:
- seq += "".join(line.split()[1:])
- elif getembl:
- seq += "".join(line.split()[:-1])
- gen.close()
- except:
- print ("Annotation file " + filename + " not valid.")
- return None
- if len(seq) == 0:
- print ("Annotation file " + filename + " not valid.")
- return None
- seq = seq.lower()
- if maxcut == "Max":
- seq = seq[int(mincut) - 1 :]
- elif int(maxcut) <= int(mincut):
- seq = seq[int(mincut) - 1 :] + seq[: int(maxcut) + 1]
- else:
- seq = seq[int(mincut) - 1 : int(maxcut) + 1]
- outlist = [0 for i in range(len(seq))]
- readlist = [] # list of reads to be added to the contig class
- index = 0 # switches to 1 once program has dealt with the initial contig
- # iterates through the file determines what information is contained in each line then reads it to the
- # right locationregular expressions python
- transtab = string.maketrans("atgc", "tacg")
- acefile = open(filename2)
- for line in acefile:
- # puts name in file and starts reading sequence below
- if line.startswith("CO "):
- if index != 0:
- freqDict = {}
- for j in readlist:
- for k in range(j.startpos, (j.startpos + j.readLength)):
- if k in freqDict:
- freqDict[k] += 1
- else:
- freqDict[k] = 1
- coverageList = []
- for j in range(1, len(contigSeq) + 1):
- if contigSeq[j - 1] != "*":
- coverageList.append(freqDict[j])
- contigSeq = contigSeq.lower()
- thepos = seq.find(contigSeq)
- if thepos != -1:
- outlist = (
- outlist[:thepos]
- + coverageList
- + outlist[thepos + len(coverageList) :]
- )
- else:
- contigSeq = contigSeq[::-1]
- contigSeq = contigSeq.translate(transtab)
- thepos = seq.find(contigSeq)
- if thepos != -1:
- coverageList.reverse()
- outlist = (
- outlist[:thepos]
- + coverageList
- + outlist[thepos + len(coverageList) :]
- )
- readlist = []
- index = 1
- contigSeq = ""
- contigName = line.split()[
- 1
- ] # splits the line into a list with elements seperated by whitespace characters
- # then returns the second element of that list (the name)
- readnumber = 0 # initiates the read number used to determine where the readsequence will be added
- # creates a object of class read with the name and location within the contig, leaves sequence as the
- # empty string to be read in later
- elif line.startswith("BQ"):
- index = 2
- elif line.startswith("AF "):
- readIt = (
- line.split()
- ) # splits the line into a list of strings seperated by whitespace characters
- readName = readIt[1] # the name of the read
- readPos = int(readIt[3]) # the position of the read within the contig
- readInstance = read(
- readName, readPos, None
- ) # creates an instance of class read
- readlist.append(readInstance) # appends to list
- elif index == 1:
- contigSeq += line[:-1]
- elif line.startswith("QA "):
- readlist[readnumber].startpos = (
- readlist[readnumber].startpos + int(line.split()[1]) - 1
- )
- readlist[readnumber].readLength = (
- int(line.split()[2]) - int(line.split()[1]) + 1
- )
- readnumber += 1
- freqDict = {}
- for j in readlist:
- for k in range(j.startpos, (j.startpos + j.readLength)):
- if k in freqDict:
- freqDict[k] += 1
- else:
- freqDict[k] = 1
- coverageList = []
- for j in range(1, len(contigSeq) + 1):
- if contigSeq[j - 1] != "*":
- coverageList.append(freqDict[j])
- contigSeq = contigSeq.lower()
- thepos = seq.find(contigSeq)
- if thepos != -1:
- outlist = (
- outlist[:thepos] + coverageList + outlist[thepos + len(coverageList) :]
- )
- else:
- contigSeq = contigSeq[::-1]
- contigSeq = contigSeq.translate(transtab)
- thepos = seq.find(contigSeq)
- if thepos != -1:
- coverageList.reverse()
- outlist = (
- outlist[:thepos] + coverageList + outlist[thepos + len(coverageList) :]
- )
- return outlist
-
-
-def getCustom(filename):
- try:
- thearray = []
- gen = open(filename)
- templine = gen.readline().rstrip().split("\t")
- linelen = len(templine)
- for i in templine:
- thearray.append([float(i)])
- for line in gen:
- templine = line.rstrip().split("\t")
- for i in range(len(templine)):
- if templine[i] != "":
- thearray[i].append(float(templine[i]))
- return thearray
- except:
- print (filename + " not valid graph file.")
- return None
-
-
-def genBlast(inlist, cutlist):
- try:
- os.mkdir("temp_easyfig")
- except:
- pass
- num = 1
- outlist = []
- for i in inlist:
- gbk2fasta(
- i,
- "temp_easyfig/" + str(num) + ".easyfig.fa",
- cutlist[num - 1][0],
- cutlist[num - 1][1],
- )
- num += 1
- for i in range(len(inlist) - 1):
- if isNewBlastDB():
- subprocess.Popen(
- "makeblastdb -dbtype nucl -out temp_easyfig/tempdb -in temp_easyfig/"
- + str(i + 2)
- + ".easyfig.fa",
- shell=True,
- ).wait()
- print ("makeblastdb -dbtype nucl -out temp_easyfig/tempdb -in temp_easyfig/" + str(
- i + 2
- ) + ".easyfig.fa")
- elif isLegBlastDB():
- subprocess.Popen(
- "formatdb -p F -t tempdb -n temp_easyfig/tempdb -i temp_easyfig/"
- + str(i + 2)
- + ".easyfig.fa",
- shell=True,
- ).wait()
- else:
- print ("Could not find BLAST.")
- sys.exit()
- if isNewBlastn():
- subprocess.Popen(
- "blastn -task blastn -db temp_easyfig/tempdb -outfmt 6 -query temp_easyfig/"
- + str(i + 1)
- + ".easyfig.fa -out temp_easyfig/"
- + str(i + 1)
- + str(i + 2)
- + ".easyfig.out",
- shell=True,
- ).wait()
- elif isLegBlastall():
- subprocess.Popen(
- "blastall -p blastn -d temp_easyfig/tempdb -F F -m 8 -a 8 -i temp_easyfig/"
- + str(i + 1)
- + ".easyfig.fa -o temp_easyfig/"
- + str(i + 1)
- + str(i + 2)
- + ".easyfig.out",
- shell=True,
- ).wait()
- else:
- print ("Could not find BLAST.")
- sys.exit()
- outlist.append(inlist[i])
- outlist.append("temp_easyfig/" + str(i + 1) + str(i + 2) + ".easyfig.out")
- outlist.append(inlist[-1])
- return outlist
-
-
-def genTBlastX(inlist, cutlist):
- pwd = os.getcwd()
- if os.path.exists("temp_easyfig"):
- print ("please run from a directory without the folder temp_easyfig")
- sys.exit()
- os.mkdir("temp_easyfig")
- os.chdir("temp_easyfig")
- num = 1
- outlist = []
- for i in inlist:
- if i[0] in ["/", "\\", "~"]:
- thepath = i
- else:
- thepath = "../" + i
- gbk2fasta(
- thepath, str(num) + ".easyfig.fa", cutlist[num - 1][0], cutlist[num - 1][1]
- )
- num += 1
- for i in range(len(inlist) - 1):
- if isNewBlastDB():
- subprocess.Popen(
- "makeblastdb -dbtype nucl -out tempdb -in "
- + str(i + 2)
- + ".easyfig.fa",
- shell=True,
- ).wait()
- elif isLegBlastDB():
- subprocess.Popen(
- "formatdb -p F -t tempdb -n tempdb -i " + str(i + 2) + ".easyfig.fa",
- shell=True,
- ).wait()
- else:
- print ("Could not find BLAST.")
- sys.exit()
- if isNewTblastx():
- subprocess.Popen(
- "tblastx -db tempdb -outfmt 6 -query "
- + str(i + 1)
- + ".easyfig.fa -out "
- + str(i + 1)
- + str(i + 2)
- + ".easyfig.out",
- shell=True,
- ).wait()
- elif isLegBlastall():
- subprocess.Popen(
- "blastall -p tblastx -d tempdb -F F -m 8 -a 8 -i "
- + str(i + 1)
- + ".easyfig.fa -o "
- + str(i + 1)
- + str(i + 2)
- + ".easyfig.out",
- shell=True,
- ).wait()
- else:
- print ("Could not find BLAST.")
- sys.exit()
- outlist.append(inlist[i])
- outlist.append(os.getcwd() + "/" + str(i + 1) + str(i + 2) + ".easyfig.out")
- os.chdir(pwd)
- outlist.append(inlist[-1])
- return outlist
-
-
-global abortCaptain
-
-
-minlength = 0
-mineval = 0.001
-minIdent = 0
-inputlist = []
-width = 5000
-height1 = 50
-height2 = 100
-minblastc = (200, 200, 200)
-maxblastc = (100, 100, 100)
-minblastci = (200, 200, 200)
-maxblastci = (100, 100, 100)
-drawfig1 = False
-drawfig2 = False
-drawfig3 = False
-compress = True
-reverseList = []
-featDict = {}
-glt = 5
-exont = 2
-genet = 1
-featlengths = []
-aln = "centre"
-graphit = None
-blastoutline = True
-minmaxlist = []
-getgc = False
-getgcskew = False
-getcoverage = False
-getcustom = False
-windsize = 1000
-step = 1000
-graphit = None
-multigraph = True
-loggraph = False
-gtype = "Histogram"
-axisthick = 1
-pvc = (255, 0, 0)
-nvc = (0, 0, 255)
-ggap = 10
-gheight = 50
-blastit = True
-tblastit = False
-blastfiles = None
-lastflag = 1
-filename = None
-svg = False
-filter = False
-keep_blast = False
-nofeat = False
-gmaxy = "Auto"
-legend = "None"
-legname = "gene"
-abortCaptain = False
-
-if (
- len(sys.argv) >= 2
- and sys.argv[1] != "--help"
- and sys.argv[1] != "-h"
- and sys.argv[1] != "-help"
-):
- for i in range(1, len(sys.argv)):
- if sys.argv[i][:1] == "-":
- lastflag = i + 2
- if sys.argv[i] == "-o":
- filename = sys.argv[i + 1]
- elif sys.argv[i] == "-e":
- mineval = float(sys.argv[i + 1])
- elif sys.argv[i] == "-min_length":
- minlength = int(sys.argv[i + 1])
- elif sys.argv[i] == "-i":
- minIdent = float(sys.argv[i + 1])
- elif sys.argv[i] == "-width":
- width = int(sys.argv[i + 1])
- elif sys.argv[i] == "-ann_height":
- height1 = int((sys.argv[i + 1]))
- elif sys.argv[i] == "-blast_height":
- height2 = int((sys.argv[i + 1]))
- elif sys.argv[i] == "-f1":
- if (
- sys.argv[i + 1] == "T"
- or sys.argv[i + 1] == "t"
- or sys.argv[i + 1] == "True"
- or sys.argv[i + 1] == "true"
- ):
- drawfig1 = True
- elif (
- sys.argv[i + 1] == "F"
- or sys.argv[i + 1] == "f"
- or sys.argv[i + 1] == "False"
- or sys.argv[i + 1] == "false"
- ):
- drawfig1 = False
- elif sys.argv[i] == "-f2":
- drawfig2 = int(sys.argv[i + 1])
- elif sys.argv[i] == "-f3":
- drawfig3 = sys.argv[i + 1]
- elif sys.argv[i] == "-uncomp":
- if (
- sys.argv[i + 1] == "T"
- or sys.argv[i + 1] == "t"
- or sys.argv[i + 1] == "True"
- or sys.argv[i + 1] == "true"
- ):
- compress = False
- elif sys.argv[i] == "-blastn":
- blastit = True
- lastflag -= 1
- elif sys.argv[i] == "-tblastx":
- tblastit = True
- blastit = False
- lastflag -= 1
- elif sys.argv[i] == "-blast_files":
- blastit = False
- blastfiles = i
- elif sys.argv[i] == "-blast_col":
- if sys.argv[i + 1].isdigit():
- lastflag = i + 7
- t1 = int(sys.argv[i + 1])
- t2 = int(sys.argv[i + 2])
- t3 = int(sys.argv[i + 3])
- t4 = int(sys.argv[i + 4])
- t5 = int(sys.argv[i + 5])
- t6 = int(sys.argv[i + 6])
- else:
- if sys.argv[i + 1] == "blue":
- t1, t2, t3, t4, t5, t6 = 30, 144, 255, 25, 25, 112
- elif sys.argv[i + 1] == "red":
- t1, t2, t3, t4, t5, t6 = 200, 100, 0, 255, 0, 0
- elif sys.argv[i + 1] == "gray":
- t1, t2, t3, t4, t5, t6 = 20, 20, 20, 175, 175, 175
- minblastc = (t1, t2, t3)
- maxblastc = (t4, t5, t6)
- elif sys.argv[i] == "-blast_col_inv":
- if sys.argv[i + 1].isdigit():
- lastflag = i + 7
- t1 = int(sys.argv[i + 1])
- t2 = int(sys.argv[i + 2])
- t3 = int(sys.argv[i + 3])
- t4 = int(sys.argv[i + 4])
- t5 = int(sys.argv[i + 5])
- t6 = int(sys.argv[i + 6])
- else:
- if sys.argv[i + 1] == "blue":
- t1, t2, t3, t4, t5, t6 = 30, 144, 255, 25, 25, 112
- elif sys.argv[i + 1] == "red":
- t1, t2, t3, t4, t5, t6 = 200, 100, 0, 255, 0, 0
- minblastci = (t1, t2, t3)
- maxblastci = (t4, t5, t6)
- elif sys.argv[i] == "-f":
- r, g, b = 64, 224, 208
- arrow = "arrow"
- feat = sys.argv[i + 1]
- if feat == "F":
- nofeat = True
- if len(sys.argv) > i + 2 and sys.argv[i + 2].isdigit():
- r = int(sys.argv[i + 2])
- g = int(sys.argv[i + 3])
- b = int(sys.argv[i + 4])
- if len(sys.argv) > i + 5 and (
- sys.argv[i + 5] == "arrow"
- or sys.argv[i + 5] == "rect"
- or sys.argv[i + 5] == "frame"
- or sys.argv[i + 5] == "pointer"
- ):
- arrow = sys.argv[i + 5]
- lastflag = i + 6
- else:
- lastflag = i + 5
- if len(sys.argv) > i + 2 and (
- sys.argv[i + 2] == "arrow"
- or sys.argv[i + 2] == "rect"
- or sys.argv[i + 2] == "frame"
- or sys.argv[i + 2] == "pointer"
- ):
- arrow = sys.argv[i + 2]
- lastflag = i + 3
- featDict[feat] = (arrow, (r, g, b))
- elif sys.argv[i] == "-glt":
- glt = int(sys.argv[i + 1])
- elif sys.argv[i] == "-exont":
- exont = int(sys.argv[i + 1])
- elif sys.argv[i] == genet:
- genet = int(sys.argv[i + 1])
- elif sys.argv[i] == "-aln":
- aln = sys.argv[i + 1]
- if aln == "best":
- aln = "best blast"
- elif sys.argv[i] == "-bo":
- if (
- sys.argv[i + 1] == "T"
- or sys.argv[i + 1] == "t"
- or sys.argv[i + 1] == "True"
- or sys.argv[i + 1] == "true"
- ):
- blastoutline = True
- else:
- blastoutline = False
- elif sys.argv[i] == "-G":
- if sys.argv[i + 1] == "GCContent":
- getgc = True
- elif sys.argv[i + 1] == "GCSkew":
- getgcskew = True
- elif sys.argv[i + 1] == "Coverage":
- getcoverage = True
- gfilename = sys.arv[i + 2]
- lastflag += 1
- elif sys.argv[i + 1] == "Custom":
- getcustom = True
- gfilename = sys.argv[i + 2]
- lastflag += 1
- else:
- print (sys.argv[i + 1] + " not a valid graph type")
- elif sys.argv[i] == "-wind_size":
- windsize = int(sys.argv[i + 1])
- elif sys.argv[i] == "-step":
- step = int(sys.argv[i + 1])
- elif sys.argv[i] == "-line":
- if (
- sys.argv[i + 1] == "T"
- or sys.argv[i + 1] == "t"
- or sys.argv[i + 1] == "True"
- or sys.argv[i + 1] == "true"
- ):
- gtype = "Line"
- elif sys.argv[i] == "-axis_t":
- axisthick = sys.argv[i + 1]
- elif sys.argv[i] == "-pos_col":
- lastflag = i + 4
- r = int(sys.argv[i + 1])
- g = int(sys.argv[i + 2])
- b = int(sys.argv[i + 3])
- pvc = (r, g, b)
- elif sys.argv[i] == "-neg_col":
- lastflag = i + 4
- r = int(sys.argv[i + 1])
- g = int(sys.argv[i + 2])
- b = int(sys.argv[i + 3])
- nvc = (r, g, b)
- elif sys.argv[i] == "-g_height":
- gheight = int(sys.argv[i + 1])
- elif sys.argv[i] == "-gap":
- ggap = int(sys.argv[i + 1])
- elif sys.argv[i] == "-y_max":
- gmaxy = int(sys.argv[i + 1])
- elif sys.argv[i] == "-A":
- if (
- sys.argv[i + 1] == "T"
- or sys.argv[i + 1] == "t"
- or sys.argv[i + 1] == "True"
- or sys.argv[i + 1] == "true"
- ):
- auto = True
- else:
- auto = False
- elif sys.argv[i] == "-svg":
- svg = True
- lastflag -= 1
- elif sys.argv[i] == "-keep":
- keep_blast = True
- lastflag -= 1
- elif sys.argv[i] == "-filter":
- filter = True
- lastflag -= 1
- elif sys.argv[i] == "-legend":
- if sys.argv[i + 1] == "single":
- legend = "Single column"
- elif sys.argv[i + 1] == "double":
- legend = "Two columns"
- elif sys.argv[i + 1] == "top":
- legend = "Top"
- elif sys.argv[i + 1] == "bottom":
- legend = "Bottom"
- elif sys.argv[i + 1] == "both":
- legend = "Top & Bottom"
- else:
- print ("Legend options are (case sensitive), using None.")
- elif sys.argv[i] == "-leg_name":
- legname = sys.argv[i + 1]
- inlist = sys.argv[lastflag + 1 :]
- if blastfiles != None and lastflag == blastfiles + 2:
- allthestuff = sys.argv[blastfiles + 1 :]
- allthestuff2 = []
- for i in allthestuff:
- if i != "R" and i != "Max" and not i.isdigit():
- allthestuff2.append(i)
- inlist = allthestuff[len(allthestuff2) / 2 :]
- last = inlist[0]
- inlist = inlist[1:]
- else:
- last = sys.argv[lastflag]
- templist = []
- revlist = []
- cutlist = []
- rev = False
- cuts = [None, None]
- for i in inlist:
- if i == "R" or i == "Max" or i.isdigit():
- if os.path.exists(i):
- sys.stderr.write(
- 'Cannot tell if "'
- + i
- + '" is an file or argument (the file exists and this is also the argument to trim or reverse genome).\
- \nPlease rename file (if file) or remove file from directory (if argument).\n'
- )
- sys.exit()
- if i == "R":
- rev = True
- getit = True
- elif i.isdigit():
- if cuts[0] == None:
- cuts[0] = int(i)
- else:
- cuts[1] = int(i)
- elif i == "Max":
- cuts[1] = i
- else:
- revlist.append(rev)
- if cuts == [None, None]:
- cuts = [1, "Max"]
- cutlist.append(tuple(cuts))
- templist.append(last)
- rev = False
- cuts = [None, None]
- last = i
- revlist.append(rev)
- if cuts == [None, None]:
- cuts = [1, "Max"]
- cutlist.append(tuple(cuts))
- for i in cutlist:
- if None in i:
- sys.stderr.write(
- "Please provide a start coordinate and end coordinate for genome cuts. (Only a single coordinate was provided)\n"
- )
- sys.exit()
- templist.append(last)
- if getgc:
- thearray = []
- for j in range(len(templist)):
- mincut, maxcut = cutlist[j]
- thearray.append(getGCcontent(templist[j], windsize, step, mincut, maxcut))
- graphit = [thearray, pvc, nvc, gheight, axisthick, gtype, gmaxy, ggap]
- elif getgcskew:
- thearray = []
- for j in range(len(templist)):
- mincut, maxcut = cutlist[j]
- thearray.append(getGCskew(templist[j], windsize, step, mincut, maxcut))
- graphit = [thearray, pvc, nvc, gheight, axisthick, gtype, gmaxy, ggap]
- elif getcustom:
- thearray = getcustom(gfilename)
- graphit = [thearray, pvc, nvc, gheight, axisthick, gtype, gmaxy, ggap]
- elif getcoverage:
- thearray = [getCoverage(templist[0], gfilename, cutlist[0][0], cutlist[0][1])]
- graphit = [thearray, pvc, nvc, gheight, axisthick, gtype, gmaxy, ggap]
- if blastit:
- inlist = genBlast(templist, cutlist)
- elif tblastit:
- inlist = genTBlastX(templist, cutlist)
- elif blastfiles != None:
- inlist = []
- tempfiles = sys.argv[blastfiles + 1 :]
- for i in templist[:-1]:
- inlist.append(i)
- inlist.append(tempfiles.pop(0))
- inlist.append(templist[-1])
- else:
- "Please choolse -blastn or -tblastx flags to generate blast files, or use -blast_files to use previously generated files."
- if filename == None:
- print ("Please choose a file to write to (-o tag) and try agian.")
- sys.exit()
- if featDict == {} and not nofeat:
- featDict = {"CDS": ("arrow", (64, 224, 208))}
- if svg:
- x = drawsvg(
- filename,
- minlength,
- mineval,
- minIdent,
- inlist,
- width,
- height1,
- height2,
- minblastc,
- maxblastc,
- minblastci,
- maxblastci,
- drawfig1,
- drawfig2,
- drawfig3,
- compress,
- revlist,
- featDict,
- glt,
- exont,
- genet,
- featlengths,
- aln,
- graphit,
- blastoutline,
- cutlist,
- filter,
- legend,
- legname,
- )
- else:
- x = draw(
- filename,
- minlength,
- mineval,
- minIdent,
- inlist,
- width,
- height1,
- height2,
- minblastc,
- maxblastc,
- minblastci,
- maxblastci,
- drawfig1,
- drawfig2,
- drawfig3,
- compress,
- revlist,
- featDict,
- glt,
- exont,
- genet,
- featlengths,
- aln,
- graphit,
- blastoutline,
- cutlist,
- filter,
- legend,
- legname,
- )
- if (blastit or tblastit) and not keep_blast:
- shutil.rmtree("temp_easyfig")
- print ("Minimum blast hit reported: " + str(x) + "%")
-
-elif len(sys.argv) == 1:
- from Tkinter import *
- import tkFileDialog
- import tkMessageBox
- import tkSimpleDialog
- import tkColorChooser
-
- class DDlistbox(Listbox):
- def __init__(self, master, **kw):
- kw["selectmode"] = SINGLE
- Listbox.__init__(self, master, kw)
- self.bind("", self.setCurrent)
- self.bind("", self.shiftSelection)
- self.curIndex = None
-
- def setCurrent(self, event):
- self.curIndex = self.nearest(event.y)
-
- def shiftSelection(self, event):
- i = self.nearest(event.y)
- if i < self.curIndex:
- x = self.get(i)
- self.delete(i)
- self.insert(i + 1, x)
- self.curIndex = i
- elif i > self.curIndex:
- x = self.get(i)
- self.delete(i)
- self.insert(i - 1, x)
- self.curIndex = i
-
- abortCaptain = False
- root = Tk()
- root.title("Easyfig.py")
- root.option_add("*Font", "TkDefaultFont 12")
- app = App(root)
- root.mainloop()
-else:
- print (
- """
-Easyfig.py Written by: Mitchell Sullivan mjsull@gmail.com
-Supervisor: Dr. Scott Beatson University of Queensland 03.12.2010
-
-License: GPLv3
-
-Version 2.2.3
-
-Usage: Easyfig.py [options] GenBank/EMBL/fasta GenBank/EMBL/fasta GenBank/EMBL/fasta ...
-
-This script should work on 1 to an infinite amount of GenBank/EMBL files (given enough memory)
-
-Adding 2 integers after the annotation file will crop the annotation file.
-Adding a R after the annotation file will reverse compliment it.
-
-WARNING: Will overwrite output file without warning.
-WARNING: Will delete temp_easyfig folder if -keep flag not given.
-
-***************************************************************
-GenBank or EMBL file must have source line, or Sequence.
-' source 1..' or 'FT source 1..'
-
-for GenBank / EMBL
-
-***************************************************************
-
-The GenBank file preceding the blast file should always be the query
-the GenBank file after the blast file should always be the reference
-In it's present state only 'CDS' features will be recorded
-
-Options:
--o Specify output file.
--blastn Generate blastn files automatically. Requires blastall or blast+
- in the path, Annotation file must have nucleotide sequence. [Default]
--tblastx Generate tblastx files automatically. Requires blastall or blast+
- in the path, Annotation file must have nucleotide sequence.
--blast_files List of previously generated blast files, ordered. Query must be
- annotation file on top, reference annotation file on bottom.
--svg Create Scalable Vector Graphics (svg) file instead of bmp.
--filter Filter small blast hits or annotations (< 4 pixels wide). [F]
-
-
-GENERAL OPTIONS:
--width width of figure in pixels. [5000]
--ann_height height of annotations in figure (pixels). [50]
--blast_height height of blast hits in figure (pixels). [100]
--f1 draw colour gradient figure for blast hits. [F]
--f2 draw scale figure base pairs long. [0]
--uncomp Do not compress figure. [F]
--f [r g b] [arrow/rect/pointer/frame]
- Draw features of type (case sensitive) in the
- color r g b with illustration type arrow, rectangle,
- pointer or frame. Default light blue arrows.
- EXAMPLE: -f CDS 255 0 0 rect will draw all CDS features as
- a red rectangle.
- if none specified easyFig automatically draws CDS features.
- If you want a figure with no features drawn use -f F
--glt Genome line is pixels thick [5]
--exont exon lines joining introns are pixels thick. [1]
--genet outline of features is pixels thick. [1]
--aln [centre]
- Alignment of genomes
- best aligns feature file perpendicular to best blast hit.
--legend
- Single: Gene names in single column
- Double: Gene names in two columns
- Top: Top feature file genes labelled above figure
- Bottom: Bottom feature file genes labelled below figure
- Both: Top and bottom feature files genes labelled above
- and below genome.
- None: No legend or gene labelling
--leg_name Where to get feature name from [gene]
-
-BLAST OPTIONS:
--e maxmimum e value of blast hits to be drawn. [0.001]
--i minimum identity value of blast hits to be drawn. [0]
--min_length minimum length of blast hits to be drawn. [0]
--blast_col changes blast hits to gradient of red or blue
- alternitively
- defines color gradient for blast hits
- worst blast hit reported will be color int1 int2 int3
- where int 1 2 3 is the RGB of color range[0-255]
- 100% identity blast hits will be color int4 int5 int6
- [default 20 20 20 175 175 175]
-
--blast_col_inv Colour for inverted blast hits.
--bo Black outline of blast hits. [T]
--keep Don't delete blast output (temp_easyfig/)
-
-GRAPH OPTIONS:
--G
- Plot GC Content, GC Skew, Coverage or Custom graph.
- if Coverage or Custom filename for ace or custom file needs
- to be provided. Details on how to make custom graph files
- in manual.
--wind_size Window size for calculating GC content/GC skew. [1000]
--step Step size for calculating GC content/GC skew. [1000]
--line Draw graph as a line graph. [T]
--axis_t Thickness of X axis. [1]
--pos_col RGB colour of positive values in graph. [Red]
--neg_col RGB colour of negative values in graph. [Blue]
--g_height height of graph in pixels. [50]
--gap gap between graph and annotations. [10]
--y_max Maximum y value [Default: max Y calculated.]
-
-
-EXAMPLES:
-
-Easyfig.py -filter -o outfile.bmp genbank1.gbk genbank2.gbk genbank3.gbk
-
-Easiest way to generate a simple comparison file between three (or more) annotation
-files. Shows CDS features as red arrows.
-
-Easyfig.py -o outfile.bmp -e 0.00001 -f gene frame 0 0 255 -G GCContent ann1.embl ann2.gbk ann3.gbk ann4.embl
-
-Generate a blastn comparison between 4 annotation files, Display genes as blue
-arrows in frame. Only report blast hits under 0.00001 expect value.
-Display the GC content of each file as a graph.
-
-Easyfig.py -tblastx -o outfile.svg -svg ann1.embl 1 10000 ann2.embl 1 10000 R
-
-Show a tblastx comparison of the first 10000 base pairs of ann1.embl and ann2.embl
-Reverse compliment ann2.embl. Writes as a SVG file.
-
-
-this script uses a modified version of Paul McGuire's (http://www.geocities.com/ptmcg/ RIP (geocities, not paul))
-bmp.py - module for constructing simple BMP graphics files
-"""
- )
diff -r 2139c39b727e -r afce956686a1 cpt_easyfig/cpt-macros.xml
--- a/cpt_easyfig/cpt-macros.xml Fri Jun 17 12:35:15 2022 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-
-
-
-
- python
- biopython
- requests
-
-
-
-
-
-
-
- 10.1371/journal.pcbi.1008214
- @unpublished{galaxyTools,
- author = {E. Mijalis, H. Rasche},
- title = {CPT Galaxy Tools},
- year = {2013-2017},
- note = {https://github.com/tamu-cpt/galaxy-tools/}
- }
-
-
-
-
- 10.1371/journal.pcbi.1008214
-
- @unpublished{galaxyTools,
- author = {E. Mijalis, H. Rasche},
- title = {CPT Galaxy Tools},
- year = {2013-2017},
- note = {https://github.com/tamu-cpt/galaxy-tools/}
- }
-
-
-
-
-
-
- 10.1371/journal.pcbi.1008214
-
- @unpublished{galaxyTools,
- author = {C. Ross},
- title = {CPT Galaxy Tools},
- year = {2020-},
- note = {https://github.com/tamu-cpt/galaxy-tools/}
- }
-
-
-
-
-
-
- 10.1371/journal.pcbi.1008214
-
- @unpublished{galaxyTools,
- author = {E. Mijalis, H. Rasche},
- title = {CPT Galaxy Tools},
- year = {2013-2017},
- note = {https://github.com/tamu-cpt/galaxy-tools/}
- }
-
-
- @unpublished{galaxyTools,
- author = {A. Criscione},
- title = {CPT Galaxy Tools},
- year = {2019-2021},
- note = {https://github.com/tamu-cpt/galaxy-tools/}
- }
-
-
-
-
-
-
- 10.1371/journal.pcbi.1008214
-
- @unpublished{galaxyTools,
- author = {A. Criscione},
- title = {CPT Galaxy Tools},
- year = {2019-2021},
- note = {https://github.com/tamu-cpt/galaxy-tools/}
- }
-
-
-
-
-
-
- 10.1371/journal.pcbi.1008214
-
- @unpublished{galaxyTools,
- author = {C. Maughmer},
- title = {CPT Galaxy Tools},
- year = {2017-2020},
- note = {https://github.com/tamu-cpt/galaxy-tools/}
- }
-
-
-
-
-
-
- @unpublished{galaxyTools,
- author = {C. Maughmer},
- title = {CPT Galaxy Tools},
- year = {2017-2020},
- note = {https://github.com/tamu-cpt/galaxy-tools/}
- }
-
-
-
-
diff -r 2139c39b727e -r afce956686a1 cpt_easyfig/easyfig_cpt.xml
--- a/cpt_easyfig/easyfig_cpt.xml Fri Jun 17 12:35:15 2022 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,183 +0,0 @@
-
-
- Galaxy wrapper for genbank visualization
-
- macros.xml
- cpt-macros.xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- blast['input_type'] != 'files'
- blast['keepBlast']
-
-
- ' or 'FT source 1..'
-Only 'CDS' features will be recorded.
-
-
-**Reverse Option**
-Easyfig can plot a genbank file in reverse, effectively inverting the sequence and its annotations. Specify which genbanks to reverse
-by providing their list index position in the Reverse Items field. The list is in order from the bottom-up, so if three genbanks are selected,
-the bottom-most one is 1, the middle is 2, and the top-most 3.
-The numbers must be separated by a space. Entering "2 3" will reverse the middle and top items, and the bottom "1" will be read in the forward orientation.
-
-
-**Nucleotide BLAST**
- - run BLASTn, run tBLASTx, or provide 12-column BLAST results for each input.
-
-
-**General options**
-- E-value: Select the minimum e-value of blast hits to be drawn. Default is 0.001
-
-- Percent identity: Enter the minimum hit percent identity to be drawn. Default is 0.
-
-- Hit length: Enter the minimum length of similarity (in nucleotides) for the output to be included on the drawing.
-
-- BLAST scale: Toggle the BLAST similarity scale key for display.
-
-- Genome scale bar: Enter a value in base pairs for the length of scale bar. Default is zero, which does not draw a scale bar.
-
-- Position for feature labels : single (single column), double (two columns), top (feature labels of top genome drawn above figure), bottom (feature labels from bottom genome drawn below figure), both (top and bottom genome features drawn above and below figure), none (no legend or gene labelling, default)
-
-- Source of feature label: default is gene. Other options include the product tag.
-
-- Alignment: align the graphic according to best/left/right/center. Alignment of genomes best aligns feature file perpendicular to best blast hit. Default is center.
-
-- BLAST similarity gradient color: options are gray, red, and blue.
-
-- GCContent plot: select to display GC content or GCSkew graphs with the output.
-
-
-**Output**
-A Scalable Vector Graphics (svg) file or static html display are returned.
-
-
-Blast Wrapper written by Criscione, Anthony, Center for Phage Technology, Texas A&M University, 2020
- ]]>
-
- 10.1093/bioinformatics/btr039
-
-
diff -r 2139c39b727e -r afce956686a1 cpt_easyfig/macros.xml
--- a/cpt_easyfig/macros.xml Fri Jun 17 12:35:15 2022 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,105 +0,0 @@
-
-
-
-
- python
- biopython
- cpt_gffparser
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff -r 2139c39b727e -r afce956686a1 easyfig_cpt.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/easyfig_cpt.xml Mon Jun 05 02:41:13 2023 +0000
@@ -0,0 +1,178 @@
+
+ Galaxy wrapper for genbank visualization
+
+ macros.xml
+ cpt-macros.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ blast['input_type'] != 'files'
+ blast['keepBlast']
+
+
+ ' or 'FT source 1..'
+Only 'CDS' features will be recorded.
+
+
+**Reverse Option**
+Easyfig can plot a genbank file in reverse, effectively inverting the sequence and its annotations. Specify which genbanks to reverse
+by providing their list index position in the Reverse Items field. The list is in order from the bottom-up, so if three genbanks are selected,
+the bottom-most one is 1, the middle is 2, and the top-most 3.
+The numbers must be separated by a space. Entering "2 3" will reverse the middle and top items, and the bottom "1" will be read in the forward orientation.
+
+
+**Nucleotide BLAST**
+ - run BLASTn, run tBLASTx, or provide 12-column BLAST results for each input.
+
+
+**General options**
+- E-value: Select the minimum e-value of blast hits to be drawn. Default is 0.001
+
+- Percent identity: Enter the minimum hit percent identity to be drawn. Default is 0.
+
+- Hit length: Enter the minimum length of similarity (in nucleotides) for the output to be included on the drawing.
+
+- BLAST scale: Toggle the BLAST similarity scale key for display.
+
+- Genome scale bar: Enter a value in base pairs for the length of scale bar. Default is zero, which does not draw a scale bar.
+
+- Position for feature labels : single (single column), double (two columns), top (feature labels of top genome drawn above figure), bottom (feature labels from bottom genome drawn below figure), both (top and bottom genome features drawn above and below figure), none (no legend or gene labelling, default)
+
+- Source of feature label: default is gene. Other options include the product tag.
+
+- Alignment: align the graphic according to best/left/right/center. Alignment of genomes best aligns feature file perpendicular to best blast hit. Default is center.
+
+- BLAST similarity gradient color: options are gray, red, and blue.
+
+- GCContent plot: select to display GC content or GCSkew graphs with the output.
+
+
+**Output**
+A Scalable Vector Graphics (svg) file or static html display are returned.
+
+
+Blast Wrapper written by Criscione, Anthony, Center for Phage Technology, Texas A&M University, 2020
+ ]]>
+
+ 10.1093/bioinformatics/btr039
+
+
diff -r 2139c39b727e -r afce956686a1 macros.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/macros.xml Mon Jun 05 02:41:13 2023 +0000
@@ -0,0 +1,74 @@
+
+
+
+ progressivemauve
+
+ bcbiogff
+
+
+
+ 2.4.0
+
+ 10.1371/journal.pone.0011147
+
+
+ 10.1093/bioinformatics/btm039
+
+
+ '$xmfa'
+
+
+
+
+
+ '$sequences'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ '$gff3_data'
+
+
+ #if str($reference_genome.reference_genome_source) == 'cached':
+ '${reference_genome.fasta_indexes.fields.path}'
+ #else if str($reference_genome.reference_genome_source) == 'history':
+ genomeref.fa
+ #end if
+
+
+ #if $reference_genome.reference_genome_source == 'history':
+ ln -s '$reference_genome.genome_fasta' genomeref.fa;
+ #end if
+
+
+ #if str($reference_genome.reference_genome_source) == 'cached':
+ '${reference_genome.fasta_indexes.fields.path}'
+ #else if str($reference_genome.reference_genome_source) == 'history':
+ genomeref.fa
+ #end if
+
+