예제 #1
0
def pulse(sheet, stage=0):

    try:

        total_stages = 20

        f = 1.0 * stage / total_stages

        lightFontColour = shadeN([cs.background, cs.lightText], [0, 1],
                                 cs.fontOpacity)
        darkFontColour = shadeN([(1, 1, 1), cs.darkText], [0, 1],
                                cs.fontOpacity)

        if stage <= total_stages:
            sheetColour = shadeN([(1, 1, 1), cs.background], [0, 1], f)

            textColour = shadeN([darkFontColour, lightFontColour], [0, 1], f)

            sheet.configure(bg=toHex(sheetColour), fg=toHex(textColour))

        if stage < total_stages:
            t = threading.Timer(0.01, pulse, [sheet, stage + 1])
            t.daemon = True
            t.start()
    except:
        pass
예제 #2
0
    def linkAdd(self, importance=1):

        # see which link end is free to assign

        if importance == 0:
            #print "double click!"
            self.parentSheet.resetLinkData()
        #else:
        #	print "single click"

        if self.parentSheet.linkA == -1:
            self.parentSheet.linkA = self.index
            self.parentSheet.linkImportance = importance  #random.randint(1,2)

            # hold circle colour
            holdColour = shadeN([(1, 1, 1), self.cs.highlight2], [0, 3],
                                importance + 2)
            if importance == 1:
                self.canvas.itemconfig(self.smallCircleIndex,
                                       fill=toHex(holdColour))
            else:
                self.canvas.itemconfig(self.smallCircleIndex,
                                       fill=toHex(holdColour))
        elif self.parentSheet.linkB == -1:
            self.parentSheet.linkB = self.index

            self.parentSheet.addLink()
예제 #3
0
    def translateEthernet(self):
        self.ethernet_header = self.packet[0:14]
        self.eth = unpack('!6s6sH' , self.ethernet_header)
         
        
        self.dst_mac = toHex(self.ethernet_header[0:6].decode("latin1"))
        self.src_mac = toHex(self.ethernet_header[6:12].decode("latin1"))

        #print stringToHex(self.src_mac)
        #print self.dst_mac
        string_print =  'Source MAC-Address : ' + str(self.src_mac)\
        + ' Destination MAC-Address : ' + str(self.dst_mac)
        debug_print(string_print) 
예제 #4
0
def init_pages():
    global tk_sheets

    # destroy any sheets in list so that we can update it (ex. after deletion)
    for s in tk_sheets:
        s.destroy()

    font_colour = toHex(
        shadeN([cs.background, cs.lightText], [0, 1], cs.fontOpacity))

    tk_sheets = []

    sheets_info = get_sheet_list()

    for s in sheets_info:
        s_box = tk.Label(tk_root,
                         text=s['name'],
                         font=settings.FONT,
                         bg=toHex(cs.background),
                         fg=font_colour,
                         cursor='hand1',
                         anchor=tk.CENTER)
        s_box.bind(
            '<Button-1>',
            lambda event, filename=s['filename']: sheetClick(filename, event))
        s_box.bind('<Button-3>',
                   lambda event, sheet=s: sheetRightClick(sheet, event))

        s_box.bind('<Enter>',
                   lambda event, sheet=s_box: labelEnter(sheet, event))
        s_box.bind('<Leave>',
                   lambda event, sheet=s_box: labelLeave(sheet, event))

        tk_sheets.append(s_box)

    s_box_plus = tk.Label(tk_root,
                          text='+',
                          font=settings.FONT,
                          bg=toHex(cs.background),
                          fg=font_colour,
                          cursor='hand1',
                          anchor=tk.CENTER)
    s_box_plus.bind('<Button-1>', addFile)
    s_box_plus.bind('<Enter>',
                    lambda event, sheet=s_box_plus: labelEnter(sheet, event))
    s_box_plus.bind('<Leave>',
                    lambda event, sheet=s_box_plus: labelLeave(sheet, event))

    tk_sheets.append(s_box_plus)

    resize_layout()
예제 #5
0
 def printMem(self, title: str, start: int, stop: int, step: int) -> None:
     print(title)
     for addr in range(start, stop, step):
         print(f'\t{toHex(addr, length=4)}', end='    ')
         for offset in range(step):
             print(toHex(self.read(addr + offset)), end=' ')
         print()
예제 #6
0
    def addLink(self):
        tA = self.linkA
        tB = self.linkB

        if tA == -1 or tB == -1:
            print("ERROR: a link end not assigned")

        if tA != tB and not self.hasLink(tA, tB):
            self.links.append(
                Link(self,
                     self.getThought(tA),
                     self.getThought(tB),
                     importance=self.linkImportance))

            #print "Creating a link!"

        # set circle colour back to white
        TA = self.getThought(tA)
        TA.canvas.itemconfig(TA.smallCircleIndex,
                             fill=toHex(self.cs.smallCircle))

        # reset link assignments
        self.resetLinkData()

        self.lowerLinks()
예제 #7
0
    def __init__(self, root, canvas, filename):
        self.root = root
        self.canvas = canvas

        self.cs = cs.ColourScheme()

        self.thoughts = []
        self.links = []

        self.canvas.bind("<Double-Button-1>", self.addAtCoord)
        self.canvas.bind('<Button-1>', self.startDrag)
        self.canvas.bind('<B1-Motion>', self.onDrag)
        self.canvas.bind('<ButtonRelease-1>', self.endThoughtDrag)
        self.root.bind('<Control-Key-s>', self.saveData)

        self.canvas.bind('<4>', lambda event: self.zoom('in', event))
        self.canvas.bind('<5>', lambda event: self.zoom('out', event))

        self.canvas.configure(bg=toHex(self.cs.background))

        self.curIndex = 0  #keep track of index most recently assigned (first thought=1)

        self.filename = filename

        self.imageList = []

        self.initDrawing()

        self.root.update()

        self.resize()

        self.loadFile()
예제 #8
0
def addFile(event=[]):
    global sheets, addLabelGeom, tk_text

    pixelX = tk_root.winfo_width()
    pixelY = tk_root.winfo_height()

    num = len(tk_sheets)
    gridSide = int(math.ceil(math.sqrt(num)))

    tk_text.focus()

    fontSize = addLabelGeom[4]

    tk_text.place(x=addLabelGeom[0],
                  y=addLabelGeom[1],
                  width=addLabelGeom[2],
                  height=addLabelGeom[3])

    fontColour = toHex(shadeN([(1, 1, 1), cs.darkText], [0, 1],
                              cs.fontOpacity))

    tk_text.configure(font=(settings.MAIN_FONT, fontSize, "normal"),
                      fg=fontColour,
                      bg="white")

    tk_root.update()
예제 #9
0
def graphics_init(colour_scheme):

    tk_root.title("MindMap Wrapper")
    tk_root.geometry("{}x{}+{}+{}".format(settings.SCREEN_SIZE[0] // 2,
                                          settings.SCREEN_SIZE[1] // 2,
                                          settings.SCREEN_SIZE[0] // 4,
                                          settings.SCREEN_SIZE[1] // 2))

    tk_root.config(bg=toHex(colour_scheme.background))
예제 #10
0
    def initDrawing(self):
        # draw the save button

        self.saveIcon, self.imageList = utils.loadImage(
            filename=settings.SRC_DIR + "/icons/save.png",
            size=(20, 20),
            imageList=self.imageList,
            root=self.root,
            background=toHex(self.cs.background))
        self.saveIcon.bind("<Button-1>", self.handleSavePress)

        return
예제 #11
0
    def initDrawing(self):
        #self.canvasIndex = self.canvas.create_line(self.tA.pixLoc[0], self.tA.pixLoc[1],
        #			self.tB.pixLoc[0], self.tB.pixLoc[1],
        #			fill="white", width=5)

        x0, y0, x1, y1 = self.getCoords()

        #xb0,yb0,xb1,yb1 = self.getHeadCoords()

        self.canvasIndex = self.add_to_layer(
            self.importance,
            self.canvas.create_line, (x0, y0, x1, y1),
            fill=utils.toHex(self.colour),
            activefill=utils.toHex(self.cs.highlight2),
            width=int(self.z_width),
            activewidth=5)

        self.canvas.tag_bind(self.canvasIndex, '<Button-3>', self.remove)
        #self.canvas.tag_bind(self.canvasIndex2, '<ButtonRelease-3>', self.endDrag)

        self.grow()
예제 #12
0
def createTrainingsData():
    inputs = []
    targets = []
    idx = 0
    while idx < 10000:
        redOfFirst = math.floor(random.random() * 255)
        greenOfFirst = math.floor(random.random() * 255)
        blueOfFirst = math.floor(random.random() * 255)
        hex1 = ut.toHex(redOfFirst) + "" + ut.toHex(greenOfFirst) + "" + ut.toHex(blueOfFirst)

        lum = 1
        redOfSec = None
        greenOfSec = None
        blueOfSec = None
        while lum < 4.5:
            redOfSec = math.floor(random.random() * 255)
            greenOfSec = math.floor(random.random() * 255)
            blueOfSec = math.floor(random.random() * 255)

            hex2 = ut.toHex(redOfSec) + "" + ut.toHex(greenOfSec) + "" + ut.toHex(blueOfSec)
            lum = ut.calcLumin('#' + hex1, '#' + hex2)
        inputs.append([redOfFirst / 255, greenOfFirst / 255, blueOfFirst / 255])
        targets.append([redOfSec / 255, greenOfSec / 255, blueOfSec / 255])
        idx += 1
    return inputs, targets
예제 #13
0
def addLeave(event=[], stage=0):

    #try:

    total_stages = 20

    f = 1.0 * stage / total_stages

    if stage <= total_stages:
        bgColour = shadeN([(1.0, 1.0, 1.0), cs.background], [0, 1], f)
        textColour = shadeN([cs.darkText, cs.lightText], [0, 1], f)

        fontColour = shadeN([bgColour, textColour], [0, 1], cs.fontOpacity)

        tk_text.configure(fg=toHex(fontColour),
                          bg=toHex(bgColour))  #toHex(textColour))

    if stage < total_stages:
        t = threading.Timer(0.01, addLeave, [[], stage + 1])
        t.daemon = True
        t.start()
    else:
        tk_text.place(x=-1, y=-1, width=0, height=0)
        tk_root.focus()
예제 #14
0
    def pulse(self, stage=0):

        #try:

        total_stages = 20

        f = 1.0 * stage / total_stages

        if stage <= total_stages:
            bkgColour = shadeN([
                self.cs.background, self.cs.backgroundPulse, self.cs.background
            ], [0, 0.5, 1], f)

            self.canvas.configure(bg=toHex(bkgColour))

        if stage < total_stages:
            t = threading.Timer(0.01, self.pulse, [stage + 1])
            t.daemon = True
            t.start()
        #except:
        #	pass
예제 #15
0
def tcpSend(data):
	s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	s.connect((config.DTN_Address, config.DTN_TCPPort))
	#s.setblocking(0)

	connectData = "dtn!" #magic part
	connectData += chr(03) #version
	connectData += chr(0) #flags
	connectData += chr(0)+chr(10) #keepalive
	connectData += sdnv.sdnv_encode(len(proxy_eid))
	connectData += proxy_eid

	s.send(connectData)
	s.recv(1024)

	s.send(data)

	response = s.recv(1024)
	if len(response)>0:
		print "Response: "+toHex(response)

	s.close()
	pplpl()
예제 #16
0
    def takeLog(self) -> None:
        self.LOG['frames'] = self.frames
        self.LOG['opcode'] = toHex(self.z80.opcode)
        self.LOG['opname'] = self.z80.opname

        self.LOG['arg0'] = toHex(self.z80.args[0])
        self.LOG['arg1'] = toHex(self.z80.args[1])

        self.LOG['PC'] = toHex(self.z80.PC, 4)
        self.LOG['SP'] = toHex(self.z80.SP, 4)

        self.LOG['A'] = toHex(self.z80.A)
        self.LOG['B'] = toHex(self.z80.B)
        self.LOG['C'] = toHex(self.z80.C)
        self.LOG['D'] = toHex(self.z80.D)
        self.LOG['E'] = toHex(self.z80.E)
        self.LOG['F'] = toHex(self.z80.F)
        self.LOG['H'] = toHex(self.z80.H)
        self.LOG['L'] = toHex(self.z80.L)
예제 #17
0
if __name__ == "__main__":

    cs = ColourScheme()

    tk_root = tk.Tk()

    graphics_init(cs)

    tk_root.bind("<Configure>", resize_layout)

    # create list of files on canvas
    sheets = get_sheet_list()

    tk_sheets = []
    font_colour = toHex(
        shadeN([cs.background, cs.lightText], [0, 1], cs.fontOpacity))
    for s in sheets:
        s_box = tk.Label(tk_root,
                         text=s['name'],
                         font=settings.FONT,
                         bg=toHex(cs.background),
                         fg=font_colour,
                         cursor='hand1',
                         anchor=tk.CENTER)
        s_box.bind(
            '<Button-1>',
            lambda event, filename=s['filename']: sheetClick(filename, event))
        s_box.bind('<Button-3>',
                   lambda event, sheet=s: sheetRightClick(sheet, event))

        s_box.bind('<Enter>',
예제 #18
0
def labelEnter(sheet, event=[]):

    sheet.configure(bg="white",
                    fg=toHex(
                        shadeN([(1, 1, 1), cs.darkText], [0, 1],
                               cs.fontOpacity)))
예제 #19
0
    def pulse2(self, event=[], stage=0):
        if self.pulsePause and stage == 0: return

        if stage == 0:

            if time.time() - self.prevPulseTime <= 1:
                return

        if self.colour == self.cs.def_thought: return

        #if self.parentSheet.fastGraphics: return
        canvasW = self.root.winfo_width()
        canvasH = self.root.winfo_height()

        if stage == 0:
            self.canvas.tag_lower(self.pulseCircleIndex, "all")
            #for i in range(self.numShadow):
            #	self.canvas.tag_raise(self.pulseCircleIndex, self.shadowCircleIndex[i])

        total_stages = 10

        f = 1.0 * stage / total_stages

        r = self.z_r

        # center of circle
        x = 1.0 * canvasW * self.loc[0]
        y = 1.0 * canvasH * self.loc[1]

        #print "here"

        if stage <= total_stages:
            self.pulsePause = True

            pRad = 40 * self.curZoom

            curRad = r + f * pRad

            x0p, y0p = x - curRad, y - curRad
            x1p, y1p = x + curRad, y + curRad

            fill = util.shadeN([self.colour, self.cs.def_thought], [0, 1], f)

            self.canvas.coords(self.pulseCircleIndex, x0p, y0p, x1p, y1p)
            self.canvas.itemconfig(self.pulseCircleIndex, fill=toHex(fill))

            t = threading.Timer(0.04, self.pulse, [[], stage + 1])
            t.daemon = True
            t.start()
        else:
            offset = 0  #10*self.curZoom
            rFrac = 0.5  #1.1
            x0p, y0p = (x + offset) - r * rFrac, (
                y + offset) - r * rFrac  #x-r/2, y-r/2
            x1p, y1p = (x + offset) + r * rFrac, (
                y + offset) + r * rFrac  #x+r/2, y+r/2
            self.canvas.coords(self.pulseCircleIndex, x0p, y0p, x1p, y1p)
            #self.canvas.itemconfig(self.pulseCircleIndex, fill = toHex(self.cs.lightGrey))

            self.pulsePause = False

            self.prevPulseTime = time.time()
예제 #20
0
    def recolour(self, event=[]):

        self.canvas.itemconfig(self.mainCircleIndex,
                               fill=toHex(self.colour),
                               outline=toHex(self.colour))
        self.tk_text.configure(bg=toHex(self.colour))
예제 #21
0
    def updateFont(self, fromZoom=False):

        # dynamically optimize text colour
        textColour = self.textColour
        lum = utils.luminance(self.colour)
        if lum >= 0.5:
            #print "light background"

            # 87% opacity for important black text on coloured background
            textColour = shadeN([self.colour, self.cs.darkText], [0, 1],
                                self.cs.fontOpacity)
        else:
            #print "dark background"
            #textColour=self.cs.lightText

            textColour = shadeN([self.colour, self.cs.lightText], [0, 1],
                                self.cs.fontOpacity)

        #if textColour != self.textColour:
        self.textColour = textColour

        insertbg = [
            v * 0.5 + w * 0.5
            for v, w in zip(self.textColour, self.cs.def_thought)
        ]

        if not fromZoom:
            self.tk_text.configure(fg=toHex(textColour),
                                   insertbackground=toHex(insertbg))

        if not fromZoom:
            tags = list(self.tk_text.tag_names(index=None))
            tags.remove("sel")
            tags.remove("center")
            for t in tags:
                self.tk_text.tag_delete(t)

        text = self.getText()

        # check for bolding
        fontThickness = "normal"
        if '#B' in text:
            fontThickness = "bold"
        elif '#I' in text:
            fontThickness = "italic"

        self.tk_text.configure(font=(settings.MAIN_FONT,
                                     int(self.z_fontSize // 1), fontThickness))
        self.canvas.itemconfig(self.labelIndex,
                               font=(settings.MAIN_FONT,
                                     max(1, int(self.z_labelFontSize // 1)),
                                     "normal"))

        if '#' not in text and '*' not in text:
            return

        pos = 1

        LINES = text.splitlines()

        for l in range(len(LINES)):

            line = LINES[l]

            #print "line: ", line

            if line.strip() == "" or ('#' not in line and '*' not in line):
                pos += 1
                continue

            fontSize = self.z_fontSize
            if len(line) >= 2:
                #if line[0:2] == '##':
                if '##' in line:
                    fontSize = fontSize / 2

            locLS = 0
            locRS = len(line) - 1

            # also colour each word by its importance
            words = split2(line)
            for W in words:

                word = W[0]
                wStart = W[1]
                wEnd = W[2]

                if W[0][0] == '#':
                    tagName = '%s.%s' % (pos, wStart) + 'WF'
                    self.tk_text.tag_add(tagName, '%s.%s' % (pos, wStart),
                                         '%s.%s' % (pos, wStart + len(word)))

                    self.tk_text.tag_config(tagName,
                                            font=(settings.MAIN_FONT,
                                                  int(self.z_fontSize // 2),
                                                  fontThickness))
                elif W[0][0] == '*' and W[0][len(W[0]) - 1] == '*':
                    tagName = '%s.%s' % (pos, wStart) + 'BF'
                    self.tk_text.tag_add(tagName, '%s.%s' % (pos, wStart),
                                         '%s.%s' % (pos, wStart + len(word)))

                    self.tk_text.tag_config(tagName,
                                            font=(settings.MAIN_FONT,
                                                  int(fontSize // 1), "bold"))
                else:
                    tagName = '%s.%s' % (pos, wStart) + 'norm'
                    self.tk_text.tag_add(tagName, '%s.%s' % (pos, wStart),
                                         '%s.%s' % (pos, wStart + len(word)))

                    self.tk_text.tag_config(tagName,
                                            font=(settings.MAIN_FONT,
                                                  int(fontSize // 1),
                                                  fontThickness))

            pos += 1
예제 #22
0
    def reDraw(self, init=False, r=-1, pixChange=False, fromZoom=False):
        canvasW = self.root.winfo_width()
        canvasH = self.root.winfo_height()

        # r : radius of main circle
        if init:
            r = self.z_r
        else:
            if r == -1:
                r = self.z_r

            # prevent bubbles from moving when screen resized
            if pixChange:
                self.loc = (1.0 * self.pixLoc[0] / canvasW,
                            1.0 * self.pixLoc[1] / canvasH)
        r = int(r)

        # center of circle
        x = 1.0 * canvasW * self.loc[0]
        y = 1.0 * canvasH * self.loc[1]
        self.pixLoc = (x, y)
        '''
		curTime = time.time()
		draw = (curTime - self.prevDrawTime)>1./60
		if draw or init:
			self.prevDrawTime = curTime
		else:
			return
		'''
        ''' 
		draw filled circle for pulse animation
		'''

        offset = 0  #10*self.curZoom
        rFrac = 0.5  #1.1
        x0p, y0p = (x + offset) - r * rFrac, (
            y + offset) - r * rFrac  #x-r/2, y-r/2
        x1p, y1p = (x + offset) + r * rFrac, (
            y + offset) + r * rFrac  #x+r/2, y+r/2

        if init:
            fill = toHex(self.cs.lightGrey)
            self.pulseCircleIndex = self.canvas.create_oval(x0p,
                                                            y0p,
                                                            x1p,
                                                            y1p,
                                                            fill=fill,
                                                            width=0,
                                                            activewidth=0,
                                                            tags="pulseCircle")

            #self.canvas.tag_lower(self.pulseCircleIndex, "all")
        else:
            self.canvas.coords(self.pulseCircleIndex, x0p, y0p, x1p, y1p)
        ''' 
		draw main filled circle
		'''
        x0p, y0p = x - r, y - r
        x1p, y1p = x + r, y + r

        if init:
            fill, outline = toHex(self.colour), toHex(self.cs.highlight2)
            self.mainCircleIndex = self.canvas.create_oval(
                x0p,
                y0p,
                x1p,
                y1p,
                fill=fill,
                outline=fill,
                activeoutline=outline,
                width=2,
                activewidth=2,
                tags="mainCircle")

            #self.canvas.itemconfigure("mainCircle", cursor="hand1")
        else:
            self.canvas.coords(self.mainCircleIndex, x0p, y0p, x1p, y1p)
        '''
		now create and draw text box
		'''
        if init:
            self.tk_text = tk.Text(self.root,
                                   bd=0,
                                   highlightthickness=0,
                                   wrap="word",
                                   font=(settings.MAIN_FONT,
                                         int(self.z_labelFontSize), "normal"),
                                   bg=toHex(self.colour),
                                   fg=toHex(self.cs.lightText))

            self.tk_text.insert(tk.END, self.text)  # set initial text
            self.tk_text.tag_configure("center", justify='center')
            self.tk_text.tag_add("center", 1.0, "end")

        tr = (r * 0.7)
        tx = x
        ty = y
        tx0p, ty0p = tx - tr, ty - tr
        self.tk_text.place(x=tx0p, y=ty0p, width=2 * tr, height=2 * tr)
        if fromZoom:
            self.updateFont(fromZoom=True)
        '''
		draw ring around main filled circle
		'''
        ring1_r = r + int(self.z_ringSpacing[0])
        x0p, y0p = x - ring1_r, y - ring1_r
        x1p, y1p = x + ring1_r, y + ring1_r
        if init:
            outline = toHex(self.cs.ring1)
            self.mainRingIndex = self.canvas.create_oval(
                x0p,
                y0p,
                x1p,
                y1p,
                fill='',
                outline=outline,
                activeoutline=toHex(self.cs.highlight2),
                width=self.z_ringWidths[0],
                activewidth=self.z_ringWidths[0] * 2)
        else:
            self.canvas.coords(self.mainRingIndex, x0p, y0p, x1p, y1p)
            if fromZoom:
                self.canvas.itemconfig(self.mainRingIndex,
                                       width=self.z_ringWidths[0],
                                       activewidth=self.z_ringWidths[0] * 2)
        ''' draw text for times above ring '''
        tx = x
        ty = y - r - int(self.z_ringSpacing[0]) - 10 * self.curZoom
        if init:
            self.labelIndex = self.canvas.create_text(
                tx,
                ty,
                text="",
                font=(settings.MAIN_FONT, int(self.z_fontSize), "normal"),
                fill=toHex(
                    shadeN([self.cs.background, self.cs.lightText], [0, 1],
                           0.54)))

        self.canvas.coords(self.labelIndex, tx, ty)
        #if fromZoom:
        #	self.updateFont(fromZoom=True)
        '''
		draw small circle on outer ring
		'''
        pRad = r + int(self.z_ringSpacing[0])
        pa = pRad  #*1.0/math.sqrt(2.0)
        pb = math.sqrt(pRad * pRad - pa * pa)
        s_x, s_y = x - pa, y + pb
        s_r = int(self.z_smallRad)
        x0p, y0p = s_x - s_r, s_y - s_r
        x1p, y1p = s_x + s_r, s_y + s_r
        if init:
            outline, fill = toHex(self.cs.ring1), toHex(self.cs.smallCircle)
            self.smallCircleIndex = self.canvas.create_oval(
                x0p,
                y0p,
                x1p,
                y1p,
                fill=fill,
                outline=outline,
                width=0,
                activefill=toHex(self.cs.highlight2))
        else:
            self.canvas.coords(self.smallCircleIndex, x0p, y0p, x1p, y1p)
        ''' draw circles under main circle for shadow '''

        if init:
            self.shadowCircleIndex = []

            self.numShadow = 10

        ns = 1.0 * self.numShadow

        #reDraw = (time.time() - self.prevDrawTime)>0.1
        for i in range(0, self.numShadow):

            x_offset = 0
            y_offset = self.z_height

            rFrac = 1.0 + (1.0 + 0.01 * self.z_height) * (0.02 * i) * (
                self.std_r / self.r)
            x0p, y0p = (x + x_offset) - r * rFrac, (y + y_offset) - r * rFrac
            x1p, y1p = (x + x_offset) + r * rFrac, (y + y_offset) + r * rFrac
            if init:
                fill = shadeN([self.cs.shadow, self.cs.background], [0, 1.0],
                              1.0 * math.sqrt(i / ns))
                shadowIndex = self.canvas.create_oval(x0p,
                                                      y0p,
                                                      x1p,
                                                      y1p,
                                                      fill=toHex(fill),
                                                      width=0)
                self.shadowCircleIndex.append(shadowIndex)
                self.canvas.tag_lower(shadowIndex, "all")
            else:
                #if reDraw:
                self.canvas.coords(self.shadowCircleIndex[i], x0p, y0p, x1p,
                                   y1p)