def __call__(self, time, delta): #Resolve every color in the 4D array with the current time. r=[] #cubes r.append([]) for i in range(len(self.frame[0])): r[0].append([]) for j in range(len(self.frame[0][i])): r[0][i].append([]) for k in range(len(self.frame[0][i][j])): r[0][i][j].append([]) r[0][i][j][k]=color.get(self.frame[0][i][j][k],time,delta) #leaves r.append([]) for i in range(len(self.frame[1])): r[1].append([]) for j in range(len(self.frame[1][i])): r[1][i].append([]) r[1][i][j]=color.get(self.frame[1][i][j],time,delta) #fissures r.append([]) for i in range(len(self.frame[2])): r[2].append([]) r[2][i]=color.get(self.frame[2][i],time,delta) return r
def render(self, node): tags = { 'drawCentredString': self._drawCenteredString, 'drawRightString': self._drawRightString, 'drawString': self._drawString, 'rect': self._rect, 'ellipse': self._ellipse, 'lines': self._lines, 'grid': self._grid, 'curves': self._curves, 'fill': lambda node: self.canvas.setFillColor(color.get(node.get('color'))), 'stroke': lambda node: self.canvas.setStrokeColor(color.get(node.get('color'))), 'setFont': self.setFont , 'place': self._place, 'circle': self._circle, 'lineMode': self._line_mode, 'path': self._path, 'rotate': lambda node: self.canvas.rotate(float(node.get('degrees'))), 'translate': self._translate, 'image': self._image } for n in utils._child_get(node, self): self.doc.tick() if n.tag in tags: tags[n.tag](n)
def render(self, node): tags = { 'drawCentredString': self._drawCenteredString, 'drawCenteredString': self._drawCenteredString, 'drawRightString': self._drawRightString, 'drawString': self._drawString, 'rect': self._rect, 'ellipse': self._ellipse, 'lines': self._lines, 'grid': self._grid, 'curves': self._curves, 'fill': lambda node: self.canvas.setFillColor(color.get(node.getAttribute('color'))), 'stroke': lambda node: self.canvas.setStrokeColor(color.get(node.getAttribute('color'))), 'setFont': lambda node: self.canvas.setFont(node.getAttribute('name'), utils.unit_get(node.getAttribute('size'))), 'place': self._place, 'circle': self._circle, 'lineMode': self._line_mode, 'path': self._path, 'rotate': lambda node: self.canvas.rotate(float(node.getAttribute('degrees'))), 'translate': self._translate, 'transform': self._transform, 'image': self._image, 'textBox': self._textBox, 'letterBoxes': self._letterBoxes, } for nd in node.childNodes: notfound = True if nd.nodeType==nd.ELEMENT_NODE: # FIXME: speedup for tag in tags: if nd.localName==tag: tags[tag](nd) notfound = False break if (notfound): sys.stderr.write('Graphics %s not implemented yet\n' % nd.localName)
def __call__(self, time, delta): leg = color.get(self.leg, time, delta) #remember leg for use by parent class. self.mostRecentLeg=leg riseTime = color.get(self.riseSecs, time, delta) * 1000 rows=len(constants.dmxChannels[leg]) maxVal=(6*rows)-.001 val=color.Intify(color.Lineartooth(0,maxVal,riseTime,0)) yVal=color.Intify(DivideEffect(val,6)) if color.get(yVal,time,delta)<3: zVal=SubtractEffect(5,ModEffect(val,6)) #small squares first else: zVal=ModEffect(val,6) #big squares first #keep track of the number of loops this bubble has done currentVal=val(time,delta) if currentVal<self.prevVal: self.tickCount+=1 self.isDone=True self.prevVal=currentVal bubbleColor = color.get(self.bubbleColor, time, delta) return color.get(OneSquareByLoc(0, leg, yVal,zVal, bubbleColor, color.Black),time,delta)
def _table_style_get(self, style_node): styles = [] for node in style_node.childNodes: if node.nodeType == node.ELEMENT_NODE: start = utils.tuple_int_get(node, 'start', (0, 0)) stop = utils.tuple_int_get(node, 'stop', (-1, -1)) if node.localName == 'blockValign': styles.append(('VALIGN', start, stop, str(node.getAttribute('value')))) elif node.localName == 'blockFont': styles.append( ('FONT', start, stop, str(node.getAttribute('name')))) elif node.localName == 'blockSpan': styles.append(('SPAN', start, stop)) elif node.localName == 'blockTextColor': styles.append( ('TEXTCOLOR', start, stop, color.get(str(node.getAttribute('colorName'))))) elif node.localName == 'blockLeading': styles.append( ('LEADING', start, stop, utils.unit_get(node.getAttribute('length')))) elif node.localName == 'blockAlignment': styles.append(('ALIGNMENT', start, stop, str(node.getAttribute('value')))) elif node.localName == 'blockLeftPadding': styles.append( ('LEFTPADDING', start, stop, utils.unit_get(node.getAttribute('length')))) elif node.localName == 'blockRightPadding': styles.append( ('RIGHTPADDING', start, stop, utils.unit_get(node.getAttribute('length')))) elif node.localName == 'blockTopPadding': styles.append( ('TOPPADDING', start, stop, utils.unit_get(node.getAttribute('length')))) elif node.localName == 'blockBottomPadding': styles.append( ('BOTTOMPADDING', start, stop, utils.unit_get(node.getAttribute('length')))) elif node.localName == 'blockBackground': styles.append(('BACKGROUND', start, stop, color.get(node.getAttribute('colorName')))) if node.hasAttribute('size'): styles.append(('FONTSIZE', start, stop, utils.unit_get(node.getAttribute('size')))) elif node.localName == 'lineStyle': kind = node.getAttribute('kind') kind_list = [ 'GRID', 'BOX', 'OUTLINE', 'INNERGRID', 'LINEBELOW', 'LINEABOVE', 'LINEBEFORE', 'LINEAFTER' ] assert kind in kind_list thick = 1 if node.hasAttribute('thickness'): thick = float(node.getAttribute('thickness')) styles.append((kind, start, stop, thick, color.get(node.getAttribute('colorName')))) return platypus.tables.TableStyle(styles)
def render(self, node): tags = { 'drawCentredString': self._drawCenteredString, 'drawRightString': self._drawRightString, 'drawString': self._drawString, 'rect': self._rect, 'ellipse': self._ellipse, 'lines': self._lines, 'grid': self._grid, 'curves': self._curves, 'fill': lambda node: self.canvas.setFillColor(color.get(node.getAttribute('color'))), 'stroke': lambda node: self.canvas.setStrokeColor(color.get(node.getAttribute('color'))), 'setFont': lambda node: self.canvas.setFont(node.getAttribute('name'), utils.unit_get(node.getAttribute('size'))), 'place': self._place, 'circle': self._circle, 'lineMode': self._line_mode, 'path': self._path, 'rotate': lambda node: self.canvas.rotate(float(node.getAttribute('degrees'))), 'translate': self._translate, 'image': self._image } for nd in node.childNodes: if nd.nodeType==nd.ELEMENT_NODE: for tag in tags: if nd.localName==tag: tags[tag](nd) break
def render(self, node): tags = { "drawCentredString": self._drawCenteredString, "drawRightString": self._drawRightString, "drawString": self._drawString, "rect": self._rect, "ellipse": self._ellipse, "lines": self._lines, "grid": self._grid, "curves": self._curves, "fill": lambda node: self.canvas.setFillColor(color.get(node.getAttribute("color"))), "stroke": lambda node: self.canvas.setStrokeColor(color.get(node.getAttribute("color"))), "setFont": lambda node: self.canvas.setFont( node.getAttribute("name"), utils.unit_get(node.getAttribute("size")) ), "place": self._place, "circle": self._circle, "lineMode": self._line_mode, "path": self._path, "rotate": lambda node: self.canvas.rotate(float(node.getAttribute("degrees"))), "translate": self._translate, "image": self._image, } for nd in node.childNodes: if nd.nodeType == nd.ELEMENT_NODE: for tag in tags: if nd.localName == tag: tags[tag](nd) break
def __call__(self, time, delta): z = color.get(self.z, time, delta) c = color.get(self.color, time, delta) r=[color.Black,color.Black,color.Black,color.Black,color.Black,color.Black] r[z] = c return r
def __call__(self, time, delta): frame=self.background(time, delta) currentSix=self.sixPattern(time, delta) x=color.get(self.x,time,delta) y=color.get(self.y,time,delta) frame[0][x][y]=currentSix return frame
def __call__(self, time, delta): period = color.get(self.period, time, delta) percRot = delta / period degRot = percRot * 360 self.rotation += degRot self.rotation %= 360 #Calculate tilt degrees by layer curTiltDegree = color.get(self.tiltDegree, time, delta) tiltArr = [] for i in range(constants.HEIGHT_OUTER): tiltVal=curTiltDegree*i/constants.HEIGHT_OUTER tiltArr.append(tiltVal) #Calculate degrees delay by Z layer curZDegree = color.get(self.zDegree, time, delta) zArr = [] for i in range(constants.CUBE_DEPTH): zVal=curZDegree*i/constants.CUBE_DEPTH zArr.append(zVal) fissureZDelay=0-zArr[2] #cubes c=[] for i in range(len(constants.dmxChannels)): c.append([]) for j in range(len(constants.dmxChannels[i])): c[i].append([]) for k in range(len(constants.dmxChannels[i][j])): c[i][j].append([]) c[i][j][k]=color.rainbowValue(((float(constants.degreeOnCircle[i][j][k])+self.rotation-tiltArr[j]+zArr[k])%360)/360) #c[i][j][k]=color.Rainbow(rotPercent) #r[i][j][k]=color.Rainbow(float(constants.degreeOnCircle[i][j][k])/360) #leaves l=[] for i in range(len(constants.dmxLeafChannels)): l.append([]) for j in range(len(constants.dmxLeafChannels[i])): l[i].append([]) zLayer=0 if j==2: zLayer=3 l[i][j]=color.rainbowValue(((float(constants.dmxLeafDegrees[i][j])+self.rotation-tiltArr[4]+zArr[zLayer])%360)/360) #l[i][j]=color.Rainbow(float(constants.dmxLeafDegrees[i][j])/360) #fissures f=[] for i in range(len(constants.dmxFissureChannels)): f.append([]) f[i]=color.rainbowValue(((float(constants.dmxFissureDegrees[i])+self.rotation-fissureZDelay)%360)/360) #f[i]=color.Rainbow(float(constants.dmxFissureDegrees[i])/360) self.frame = [c,l,f] return self.frame
def render(self, node): tags = { 'drawCentredString': self._drawCenteredString, 'drawRightString': self._drawRightString, 'drawString': self._drawString, 'rect': self._rect, 'ellipse': self._ellipse, 'lines': self._lines, 'grid': self._grid, 'curves': self._curves, 'fill': lambda node: self.canvas.setFillColor( color.get(node.getAttribute('color'))), 'stroke': lambda node: self.canvas.setStrokeColor( color.get(node.getAttribute('color'))), 'setFont': lambda node: self.canvas.setFont( node.getAttribute('name'), utils.unit_get(node.getAttribute('size'))), 'place': self._place, 'circle': self._circle, 'lineMode': self._line_mode, 'path': self._path, 'rotate': lambda node: self.canvas.rotate(float(node.getAttribute('degrees')) ), 'translate': self._translate, 'image': self._image } for nd in node.childNodes: if nd.nodeType == nd.ELEMENT_NODE: for tag in tags: if nd.localName == tag: tags[tag](nd) break
def __call__(self, time, delta): layer = color.get(self.layer, time, delta) currentSix = self.sixPattern(time, delta) #current background frame frame = self.backgroundEffect(time, delta) #foreach leg for x in range(6): if x%2==1: #inner leg if layer<4: frame[0][x][layer]=currentSix elif layer==4: #convert to leaf iLeaf=int((x-1)/2) frame[1][iLeaf]=SixToLeaf(currentSix) else: #outer leg frame[0][x][layer]=currentSix #fissures if layer==0: for i in range(len(frame[2])): frame[2][i]=SixToFissure(currentSix) self.frame = frame return Frame.__call__(self, time, delta)
def __call__(self, time, delta): z = color.get(self.zPos,time,delta) #Move to next color if needed if z==0 and self.lastZ==1: if type(self.squareColor)==RandomColorSource: self.squareColor.NextColor() #works if is RandomColorSource. self.lastZ=z #Determine inner or outer legs if z>5: legOffset=0 else: legOffset=1 #Convert to correct z-dimension z%=6 z=5-z #Render 6-pattern sixPatternBottom=SixSingle(z,self.squareColor) sixPatternTop=SixSingle(5-z,self.squareColor) #Amplify to correct legs effect=AdditionEffect([SixToLegDiff(0+legOffset,sixPatternBottom,sixPatternTop,MonoFrame(color.Black)) ,SixToLegDiff(2+legOffset,sixPatternBottom,sixPatternTop,MonoFrame(color.Black)) ,SixToLegDiff(4+legOffset,sixPatternBottom,sixPatternTop,MonoFrame(color.Black))]) self.frame=effect(time,delta) return Frame.__call__(self, time, delta)
def _para_style_update(self, node): data = {} for attr in ['textColor', 'backColor', 'bulletColor', 'borderColor']: if node.get(attr): data[attr] = color.get(node.get(attr)) for attr in ['bulletFontName', 'fontName']: if node.get(attr): fontname= select_fontname(node.get(attr), None) if fontname is not None: data['fontName'] = fontname for attr in ['bulletText']: if node.get(attr): data[attr] = node.get(attr) for attr in ['fontSize', 'leftIndent', 'rightIndent', 'spaceBefore', 'spaceAfter', 'firstLineIndent', 'bulletIndent', 'bulletFontSize', 'leading', 'borderWidth','borderPadding','borderRadius']: if node.get(attr): data[attr] = utils.unit_get(node.get(attr)) if node.get('alignment'): align = { 'right':reportlab.lib.enums.TA_RIGHT, 'center':reportlab.lib.enums.TA_CENTER, 'justify':reportlab.lib.enums.TA_JUSTIFY } data['alignment'] = align.get(node.get('alignment').lower(), reportlab.lib.enums.TA_LEFT) return data
def _para_style_update(self, style, node): for attr in ["textColor", "backColor", "bulletColor"]: if node.hasAttribute(attr): style.__dict__[attr] = color.get(node.getAttribute(attr)) for attr in ["fontName", "bulletFontName", "bulletText"]: if node.hasAttribute(attr): style.__dict__[attr] = node.getAttribute(attr) for attr in [ "fontSize", "leftIndent", "rightIndent", "spaceBefore", "spaceAfter", "firstLineIndent", "bulletIndent", "bulletFontSize", "leading", ]: if node.hasAttribute(attr): style.__dict__[attr] = utils.unit_get(node.getAttribute(attr)) if node.hasAttribute("alignment"): align = { "right": reportlab.lib.enums.TA_RIGHT, "center": reportlab.lib.enums.TA_CENTER, "justify": reportlab.lib.enums.TA_JUSTIFY, } style.alignment = align.get(node.getAttribute("alignment").lower(), reportlab.lib.enums.TA_LEFT) return style
def __call__(self, time, delta): leg = color.get(self.leg, time, delta) currentSixBottom = self.sixPatternBottom(time, delta) currentSixTop = self.sixPatternTop(time, delta) #current background frame frame = self.backgroundEffect(time, delta) #foreach layer for y in range(len(frame[0][leg])): if y<3: #bottom frame[0][leg][y]=currentSixBottom else: #top frame[0][leg][y]=currentSixTop if leg%2==1: #Is inner leg. Apply to leaf as well. iLeaf=int((leg-1)/2) frame[1][iLeaf]=SixToLeaf(currentSixTop) else: #Is outer leg. Apply to fissure. iFissure=int(leg/2) frame[2][iFissure]=SixToFissure(currentSixBottom) self.frame = frame return Frame.__call__(self, time, delta)
def _table_style_get(self, style_node): styles = [] for node in style_node.childNodes: if node.nodeType == node.ELEMENT_NODE: start = utils.tuple_int_get(node, "start", (0, 0)) stop = utils.tuple_int_get(node, "stop", (-1, -1)) if node.localName == "blockValign": styles.append(("VALIGN", start, stop, str(node.getAttribute("value")))) elif node.localName == "blockFont": styles.append(("FONT", start, stop, str(node.getAttribute("name")))) elif node.localName == "blockTextColor": styles.append(("TEXTCOLOR", start, stop, color.get(str(node.getAttribute("colorName"))))) elif node.localName == "blockLeading": styles.append(("LEADING", start, stop, utils.unit_get(node.getAttribute("length")))) elif node.localName == "blockAlignment": styles.append(("ALIGNMENT", start, stop, str(node.getAttribute("value")))) elif node.localName == "blockLeftPadding": styles.append(("LEFTPADDING", start, stop, utils.unit_get(node.getAttribute("length")))) elif node.localName == "blockRightPadding": styles.append(("RIGHTPADDING", start, stop, utils.unit_get(node.getAttribute("length")))) elif node.localName == "blockTopPadding": styles.append(("TOPPADDING", start, stop, utils.unit_get(node.getAttribute("length")))) elif node.localName == "blockBottomPadding": styles.append(("BOTTOMPADDING", start, stop, utils.unit_get(node.getAttribute("length")))) elif node.localName == "blockBackground": styles.append(("BACKGROUND", start, stop, color.get(node.getAttribute("colorName")))) if node.hasAttribute("size"): styles.append(("FONTSIZE", start, stop, utils.unit_get(node.getAttribute("size")))) elif node.localName == "lineStyle": kind = node.getAttribute("kind") kind_list = [ "GRID", "BOX", "OUTLINE", "INNERGRID", "LINEBELOW", "LINEABOVE", "LINEBEFORE", "LINEAFTER", ] assert kind in kind_list thick = 1 if node.hasAttribute("thickness"): thick = float(node.getAttribute("thickness")) styles.append((kind, start, stop, thick, color.get(node.getAttribute("colorName")))) return platypus.tables.TableStyle(styles)
def __call__(self, time, delta): #determine the current number of seconds we will delay delaySec=color.get(self.delaySec, time, delta) effectiveTime=time-(delaySec*1000) effectiveDelta=effectiveTime-self.lastEffectiveTime self.lastEffectiveTime=effectiveTime return self.baseFrame(effectiveTime,effectiveDelta)
def printc(self, col, *args): self.printLine('|') row = '|' for i in range(len(self.lengths)): if (self.lengths[i] < 0): fmt = ' {:<' + str(abs(self.lengths[i])) + '}|' else: fmt = ' {:' + str(abs(self.lengths[i])) + '}|' row += fmt.format(args[i]) self.printFunc(color.get(col, row)) self.pause()
def _table_style_get(self, style_node): styles = [] for node in style_node.childNodes: if node.nodeType==node.ELEMENT_NODE: start = utils.tuple_int_get(node, 'start', (0,0) ) stop = utils.tuple_int_get(node, 'stop', (-1,-1) ) if node.localName=='blockValign': styles.append(('VALIGN', start, stop, str(node.getAttribute('value')))) elif node.localName=='blockFont': styles.append(('FONT', start, stop, str(node.getAttribute('name')))) elif node.localName=='blockSpan': styles.append(('SPAN', start, stop)) elif node.localName=='blockTextColor': styles.append(('TEXTCOLOR', start, stop, color.get(str(node.getAttribute('colorName'))))) elif node.localName=='blockLeading': styles.append(('LEADING', start, stop, utils.unit_get(node.getAttribute('length')))) elif node.localName=='blockAlignment': styles.append(('ALIGNMENT', start, stop, str(node.getAttribute('value')))) elif node.localName=='blockLeftPadding': styles.append(('LEFTPADDING', start, stop, utils.unit_get(node.getAttribute('length')))) elif node.localName=='blockRightPadding': styles.append(('RIGHTPADDING', start, stop, utils.unit_get(node.getAttribute('length')))) elif node.localName=='blockTopPadding': styles.append(('TOPPADDING', start, stop, utils.unit_get(node.getAttribute('length')))) elif node.localName=='blockBottomPadding': styles.append(('BOTTOMPADDING', start, stop, utils.unit_get(node.getAttribute('length')))) elif node.localName=='blockBackground': styles.append(('BACKGROUND', start, stop, color.get(node.getAttribute('colorName')))) if node.hasAttribute('size'): styles.append(('FONTSIZE', start, stop, utils.unit_get(node.getAttribute('size')))) elif node.localName=='lineStyle': kind = node.getAttribute('kind') kind_list = [ 'GRID', 'BOX', 'OUTLINE', 'INNERGRID', 'LINEBELOW', 'LINEABOVE','LINEBEFORE', 'LINEAFTER' ] assert kind in kind_list thick = 1 if node.hasAttribute('thickness'): thick = float(node.getAttribute('thickness')) styles.append((kind, start, stop, thick, color.get(node.getAttribute('colorName')))) return platypus.tables.TableStyle(styles)
def render(self, node): tags = { 'drawCentredString': self._drawCenteredString, 'drawRightString': self._drawRightString, 'drawString': self._drawString, 'rect': self._rect, 'ellipse': self._ellipse, 'lines': self._lines, 'grid': self._grid, 'curves': self._curves, 'fill': lambda node: self.canvas.setFillColor(color.get(node.get('color'))), 'stroke': lambda node: self.canvas.setStrokeColor(color.get(node.get('color'))), 'setFont': self.setFont , 'place': self._place, 'circle': self._circle, 'lineMode': self._line_mode, 'path': self._path, 'rotate': lambda node: self.canvas.rotate(float(node.get('degrees'))), 'translate': self._translate, 'image': self._image } for n in utils._child_get(node, self): if n.tag in tags: tags[n.tag](n)
def __call__(self, time, delta): if (self.firstCall): self.firstCall=False self.firstCallTime=time-delta #elapsed is never quite zero, in case that would be a problem. self.elapsed=0.0 #Note this does not depend on delta, so it can be called multiple times within one frame. self.elapsed=time-self.firstCallTime #Determine if time is up if self.elapsed>(self.runSecs*1000): self.isComplete=True #Get current frame/value/etc. return color.get(self.pattern,self.elapsed,delta)
def render(self, node): tags = { "drawCentredString": self._drawCenteredString, "drawRightString": self._drawRightString, "drawString": self._drawString, "rect": self._rect, "ellipse": self._ellipse, "lines": self._lines, "grid": self._grid, "curves": self._curves, "fill": lambda node: self.canvas.setFillColor(color.get(node.get("color"))), "stroke": lambda node: self.canvas.setStrokeColor(color.get(node.get("color"))), "setFont": self.setFont, "place": self._place, "circle": self._circle, "lineMode": self._line_mode, "path": self._path, "rotate": lambda node: self.canvas.rotate(float(node.get("degrees"))), "translate": self._translate, "image": self._image, } for n in utils._child_get(node, self): if n.tag in tags: tags[n.tag](n)
def __call__(self, time, delta): s = color.get(self.s, time, delta) x = color.get(self.x, time, delta) y = color.get(self.y, time, delta) z = color.get(self.z, time, delta) colorOne = color.get(self.colorOne, time, delta) backgroundColor = color.get(self.backgroundColor, time, delta) self.frame=MonoFrame(backgroundColor).frame self.frame[s][x][y][z]=colorOne return Frame.__call__(self, time, delta)
def _para_style_update(self, style, node): for attr in ['textColor', 'backColor', 'bulletColor']: if node.hasAttribute(attr): style.__dict__[attr] = color.get(node.getAttribute(attr)) for attr in ['fontName', 'bulletFontName', 'bulletText']: if node.hasAttribute(attr): style.__dict__[attr] = node.getAttribute(attr) for attr in ['fontSize', 'leftIndent', 'rightIndent', 'spaceBefore', 'spaceAfter', 'firstLineIndent', 'bulletIndent', 'bulletFontSize', 'leading']: if node.hasAttribute(attr): style.__dict__[attr] = utils.unit_get(node.getAttribute(attr)) if node.hasAttribute('alignment'): align = { 'right':reportlab.lib.enums.TA_RIGHT, 'center':reportlab.lib.enums.TA_CENTER, 'justify':reportlab.lib.enums.TA_JUSTIFY } style.alignment = align.get(node.getAttribute('alignment').lower(), reportlab.lib.enums.TA_LEFT) return style
def __call__(self, time, delta): period = color.get(self.period, time, delta) period = period/self.numBeads velocity = delta / period #velocity = period / self.numBeads self.position += velocity fpart, pos = math.modf(self.position) #fpart = abs(fpart) #if(self.position < 0): # fpart = 1.0 - fpart iBead=int(pos)%self.numBeads r=[] for z in range(constants.CUBE_DEPTH): r.append(self.beads[iBead%self.numBeads]) iBead+=1 return r
def __call__(self, time, delta): frame = self.source(time, delta) period = color.get(self.period, time, delta) velocity = delta / period self.position += velocity #**** INCOMPLETE. NEEDS TO ADDRESS LEAVES AND FISSURES **** #cubes cubes=frame[0] resolution = len(cubes) c=[] for i in range(len(cubes)): c.append([]) for j in range(len(cubes[i])): if j<constants.HEIGHT_INNER: fpart, pos = math.modf(self.position) fpart = abs(fpart) if(self.position < 0): fpart = 1.0 - fpart cur = int(pos + i) % resolution next = int(cur + 1) % resolution else: #The topmost cubes on the outer shell need special handling fpart, pos = math.modf(self.position) fpart = abs(fpart) if(self.position < 0): fpart = 1.0 - fpart cur = int(pos + i) % resolution next = int(int((int(cur + 1) % resolution)/2)*2) cur=int(int(cur/2)*2) c[i].append([]) for k in range(len(cubes[i][j])): c[i][j].append([]) color1=cubes[cur][j][k] color2=cubes[next][j][k] c[i][j][k]=color.blend(color1, color2, abs(fpart)) #leaves #fissures return [c,frame[1],frame[2]]
def _para_style_update(self, node): data = {} for attr in ["textColor", "backColor", "bulletColor", "borderColor"]: if node.get(attr): data[attr] = color.get(node.get(attr)) for attr in ["bulletFontName", "fontName"]: if node.get(attr): fontname = select_fontname(node.get(attr), None) if fontname is not None: data["fontName"] = fontname for attr in ["bulletText"]: if node.get(attr): data[attr] = node.get(attr) for attr in [ "fontSize", "leftIndent", "rightIndent", "spaceBefore", "spaceAfter", "firstLineIndent", "bulletIndent", "bulletFontSize", "leading", "borderWidth", "borderPadding", "borderRadius", ]: if node.get(attr): data[attr] = utils.unit_get(node.get(attr)) if node.get("alignment"): align = { "right": reportlab.lib.enums.TA_RIGHT, "center": reportlab.lib.enums.TA_CENTER, "justify": reportlab.lib.enums.TA_JUSTIFY, } data["alignment"] = align.get(node.get("alignment").lower(), reportlab.lib.enums.TA_LEFT) data["splitLongWords"] = 0 return data
def __call__(self, time, delta): z = color.get(self.zPos,time,delta) #Determine inner or outer legs if z>5: legOffset=0 else: legOffset=1 #Convert to correct z-dimension z%=6 z=5-z #Render 6-pattern sixPattern=SixSingle(z,self.squareColor) #Amplify to correct legs effect=AdditionEffect([SixToLeg(0+legOffset,sixPattern,MonoFrame(color.Black)) ,SixToLeg(2+legOffset,sixPattern,MonoFrame(color.Black)) ,SixToLeg(4+legOffset,sixPattern,MonoFrame(color.Black))]) self.frame=effect(time,delta) return Frame.__call__(self, time, delta)
def _para_style_update(self, style, node): for attr in ['textColor', 'backColor', 'bulletColor']: if node.hasAttribute(attr): style.__dict__[attr] = color.get(node.getAttribute(attr)) for attr in ['fontName', 'bulletFontName', 'bulletText']: if node.hasAttribute(attr): style.__dict__[attr] = node.getAttribute(attr) for attr in [ 'fontSize', 'leftIndent', 'rightIndent', 'spaceBefore', 'spaceAfter', 'firstLineIndent', 'bulletIndent', 'bulletFontSize', 'leading' ]: if node.hasAttribute(attr): style.__dict__[attr] = utils.unit_get(node.getAttribute(attr)) if node.hasAttribute('alignment'): align = { 'right': reportlab.lib.enums.TA_RIGHT, 'center': reportlab.lib.enums.TA_CENTER, 'justify': reportlab.lib.enums.TA_JUSTIFY } style.alignment = align.get( node.getAttribute('alignment').lower(), reportlab.lib.enums.TA_LEFT) return style
return platypus.CondPageBreak(1000) # TODO: change the 1000 ! elif node.tag == 'setNextFrame': from reportlab.platypus.doctemplate import NextFrameFlowable return NextFrameFlowable(str(node.get('name'))) elif node.tag == 'currentFrame': from reportlab.platypus.doctemplate import CurrentFrameFlowable return CurrentFrameFlowable(str(node.get('name'))) elif node.tag == 'frameEnd': return EndFrameFlowable() elif node.tag == 'hr': width_hr = node.get('width') or '100%' color_hr = node.get('color') or 'black' thickness_hr = node.get('thickness') or 1 lineCap_hr = node.get('lineCap') or 'round' return platypus.flowables.HRFlowable(width=width_hr, color=color.get(color_hr), thickness=float(thickness_hr), lineCap=str(lineCap_hr)) else: sys.stderr.write('Warning: flowable not yet implemented: %s !\n' % (node.tag, )) return None def render(self, node_story): def process_story(node_story): sub_story = [] for node in utils._child_get(node_story, self): if node.tag == etree.Comment: node.text = '' continue flow = self._flowable(node)
elif node.tag=='nextFrame': return platypus.CondPageBreak(1000) # TODO: change the 1000 ! elif node.tag == 'setNextFrame': from reportlab.platypus.doctemplate import NextFrameFlowable return NextFrameFlowable(str(node.get('name'))) elif node.tag == 'currentFrame': from reportlab.platypus.doctemplate import CurrentFrameFlowable return CurrentFrameFlowable(str(node.get('name'))) elif node.tag == 'frameEnd': return EndFrameFlowable() elif node.tag == 'hr': width_hr=node.get('width') or '100%' color_hr=node.get('color') or 'black' thickness_hr=node.get('thickness') or 1 lineCap_hr=node.get('lineCap') or 'round' return platypus.flowables.HRFlowable(width=width_hr,color=color.get(color_hr),thickness=float(thickness_hr),lineCap=str(lineCap_hr)) else: sys.stderr.write('Warning: flowable not yet implemented: %s !\n' % (node.tag,)) return None def render(self, node_story): def process_story(node_story): sub_story = [] for node in utils._child_get(node_story, self): if node.tag == etree.Comment: node.text = '' continue flow = self._flowable(node) if flow: if isinstance(flow,list): sub_story = sub_story + flow
def _flowable(self, node, extra_style=None): if node.tag == "pto": return self._pto(node) if node.tag == "para": style = self.styles.para_style_get(node) if extra_style: style.__dict__.update(extra_style) result = [] for i in self._textual(node).split("\n"): result.append(platypus.Paragraph(i, style, **(utils.attr_get(node, [], {"bulletText": "str"})))) return result elif node.tag == "barCode": try: from reportlab.graphics.barcode import code128 from reportlab.graphics.barcode import code39 from reportlab.graphics.barcode import code93 from reportlab.graphics.barcode import common from reportlab.graphics.barcode import fourstate from reportlab.graphics.barcode import usps from reportlab.graphics.barcode import createBarcodeDrawing except ImportError: _logger.warning("Cannot use barcode renderers:", exc_info=True) return None args = utils.attr_get( node, [], { "ratio": "float", "xdim": "unit", "height": "unit", "checksum": "int", "quiet": "int", "width": "unit", "stop": "bool", "bearers": "int", "barWidth": "float", "barHeight": "float", }, ) codes = { "codabar": lambda x: common.Codabar(x, **args), "code11": lambda x: common.Code11(x, **args), "code128": lambda x: code128.Code128(str(x), **args), "standard39": lambda x: code39.Standard39(str(x), **args), "standard93": lambda x: code93.Standard93(str(x), **args), "i2of5": lambda x: common.I2of5(x, **args), "extended39": lambda x: code39.Extended39(str(x), **args), "extended93": lambda x: code93.Extended93(str(x), **args), "msi": lambda x: common.MSI(x, **args), "fim": lambda x: usps.FIM(x, **args), "postnet": lambda x: usps.POSTNET(x, **args), "ean13": lambda x: createBarcodeDrawing("EAN13", value=str(x), **args), "qrcode": lambda x: createBarcodeDrawing("QR", value=x, **args), } code = "code128" if node.get("code"): code = node.get("code").lower() return codes[code](self._textual(node)) elif node.tag == "name": self.styles.names[node.get("id")] = node.get("value") return None elif node.tag == "xpre": style = self.styles.para_style_get(node) return platypus.XPreformatted( self._textual(node), style, **(utils.attr_get(node, [], {"bulletText": "str", "dedent": "int", "frags": "int"})) ) elif node.tag == "pre": style = self.styles.para_style_get(node) return platypus.Preformatted( self._textual(node), style, **(utils.attr_get(node, [], {"bulletText": "str", "dedent": "int"})) ) elif node.tag == "illustration": return self._illustration(node) elif node.tag == "blockTable": return self._table(node) elif node.tag == "title": styles = reportlab.lib.styles.getSampleStyleSheet() style = styles["Title"] return platypus.Paragraph(self._textual(node), style, **(utils.attr_get(node, [], {"bulletText": "str"}))) elif re.match("^h([1-9]+[0-9]*)$", (node.tag or "")): styles = reportlab.lib.styles.getSampleStyleSheet() style = styles["Heading" + str(node.tag[1:])] return platypus.Paragraph(self._textual(node), style, **(utils.attr_get(node, [], {"bulletText": "str"}))) elif node.tag == "image": image_data = False if not node.get("file"): if node.get("name"): if node.get("name") in self.doc.images: _logger.debug("Image %s read ", node.get("name")) image_data = self.doc.images[node.get("name")].read() else: _logger.warning("Image %s not defined", node.get("name")) return False else: import base64 newtext = node.text if self.localcontext: newtext = utils._process_text(self, node.text or "") image_data = base64.decodestring(newtext) if not image_data: _logger.debug("No inline image data") return False image = StringIO(image_data) else: _logger.debug("Image get from file %s", node.get("file")) image = _open_image(node.get("file"), path=self.doc.path) return platypus.Image( image, mask=(250, 255, 250, 255, 250, 255), **(utils.attr_get(node, ["width", "height"])) ) elif node.tag == "spacer": if node.get("width"): width = utils.unit_get(node.get("width")) else: width = utils.unit_get("1cm") length = utils.unit_get(node.get("length")) return platypus.Spacer(width=width, height=length) elif node.tag == "section": return self.render(node) elif node.tag == "pageNumberReset": return PageReset() elif node.tag in ("pageBreak", "nextPage"): return platypus.PageBreak() elif node.tag == "condPageBreak": return platypus.CondPageBreak(**(utils.attr_get(node, ["height"]))) elif node.tag == "setNextTemplate": return platypus.NextPageTemplate(str(node.get("name"))) elif node.tag == "nextFrame": return platypus.CondPageBreak(1000) # TODO: change the 1000 ! elif node.tag == "setNextFrame": from reportlab.platypus.doctemplate import NextFrameFlowable return NextFrameFlowable(str(node.get("name"))) elif node.tag == "currentFrame": from reportlab.platypus.doctemplate import CurrentFrameFlowable return CurrentFrameFlowable(str(node.get("name"))) elif node.tag == "frameEnd": return EndFrameFlowable() elif node.tag == "hr": width_hr = node.get("width") or "100%" color_hr = node.get("color") or "black" thickness_hr = node.get("thickness") or 1 lineCap_hr = node.get("lineCap") or "round" return platypus.flowables.HRFlowable( width=width_hr, color=color.get(color_hr), thickness=float(thickness_hr), lineCap=str(lineCap_hr) ) else: sys.stderr.write("Warning: flowable not yet implemented: %s !\n" % (node.tag,)) return None
def __call__(self, time, delta): c=color.get(self.color, time, delta) r=[c,c,c,c,c,c] return r
def _flowable(self, node, extra_style=None): if node.tag=='pto': return self._pto(node) if node.tag=='para': style = self.styles.para_style_get(node) if extra_style: style.__dict__.update(extra_style) result = [] for i in self._textual(node).split('\n'): result.append(platypus.Paragraph(i, style, **(utils.attr_get(node, [], {'bulletText':'str'})))) return result elif node.tag=='barCode': try: from reportlab.graphics.barcode import code128 from reportlab.graphics.barcode import code39 from reportlab.graphics.barcode import code93 from reportlab.graphics.barcode import common from reportlab.graphics.barcode import fourstate from reportlab.graphics.barcode import usps from reportlab.graphics.barcode import createBarcodeDrawing except ImportError: self._logger.warning("Cannot use barcode renderers:", exc_info=True) return None args = utils.attr_get(node, [], {'ratio':'float','xdim':'unit','height':'unit','checksum':'int','quiet':'int','width':'unit','stop':'bool','bearers':'int','barWidth':'float','barHeight':'float'}) codes = { 'codabar': lambda x: common.Codabar(x, **args), 'code11': lambda x: common.Code11(x, **args), 'code128': lambda x: code128.Code128(str(x), **args), 'standard39': lambda x: code39.Standard39(str(x), **args), 'standard93': lambda x: code93.Standard93(str(x), **args), 'i2of5': lambda x: common.I2of5(x, **args), 'extended39': lambda x: code39.Extended39(str(x), **args), 'extended93': lambda x: code93.Extended93(str(x), **args), 'msi': lambda x: common.MSI(x, **args), 'fim': lambda x: usps.FIM(x, **args), 'postnet': lambda x: usps.POSTNET(x, **args), 'ean13': lambda x: createBarcodeDrawing('EAN13', value=str(x), **args), 'qrcode': lambda x: createBarcodeDrawing('QR', value=x, **args), } code = 'code128' if node.get('code'): code = node.get('code').lower() return codes[code](self._textual(node)) elif node.tag=='name': self.styles.names[ node.get('id')] = node.get('value') return None elif node.tag=='xpre': style = self.styles.para_style_get(node) return platypus.XPreformatted(self._textual(node), style, **(utils.attr_get(node, [], {'bulletText':'str','dedent':'int','frags':'int'}))) elif node.tag=='pre': style = self.styles.para_style_get(node) return platypus.Preformatted(self._textual(node), style, **(utils.attr_get(node, [], {'bulletText':'str','dedent':'int'}))) elif node.tag=='illustration': return self._illustration(node) elif node.tag=='blockTable': return self._table(node) elif node.tag=='title': styles = reportlab.lib.styles.getSampleStyleSheet() style = styles['Title'] return platypus.Paragraph(self._textual(node), style, **(utils.attr_get(node, [], {'bulletText':'str'}))) elif re.match('^h([1-9]+[0-9]*)$', (node.tag or '')): styles = reportlab.lib.styles.getSampleStyleSheet() style = styles['Heading'+str(node.tag[1:])] return platypus.Paragraph(self._textual(node), style, **(utils.attr_get(node, [], {'bulletText':'str'}))) elif node.tag=='image': image_data = False if not node.get('file'): if node.get('name'): if node.get('name') in self.doc.images: self._logger.debug("Image %s read ", node.get('name')) image_data = self.doc.images[node.get('name')].read() else: self._logger.warning("Image %s not defined", node.get('name')) return False else: import base64 if self.localcontext: newtext = utils._process_text(self, node.text or '') node.text = newtext image_data = base64.decodestring(node.text) if not image_data: self._logger.debug("No inline image data") return False image = StringIO(image_data) else: self._logger.debug("Image get from file %s", node.get('file')) image = _open_image(node.get('file'), path=self.doc.path) return platypus.Image(image, mask=(250,255,250,255,250,255), **(utils.attr_get(node, ['width','height']))) elif node.tag=='spacer': if node.get('width'): width = utils.unit_get(node.get('width')) else: width = utils.unit_get('1cm') length = utils.unit_get(node.get('length')) return platypus.Spacer(width=width, height=length) elif node.tag=='section': return self.render(node) elif node.tag == 'pageNumberReset': return PageReset() elif node.tag in ('pageBreak', 'nextPage'): return platypus.PageBreak() elif node.tag=='condPageBreak': return platypus.CondPageBreak(**(utils.attr_get(node, ['height']))) elif node.tag=='setNextTemplate': return platypus.NextPageTemplate(str(node.get('name'))) elif node.tag=='nextFrame': return platypus.CondPageBreak(1000) # TODO: change the 1000 ! elif node.tag == 'setNextFrame': from reportlab.platypus.doctemplate import NextFrameFlowable return NextFrameFlowable(str(node.get('name'))) elif node.tag == 'currentFrame': from reportlab.platypus.doctemplate import CurrentFrameFlowable return CurrentFrameFlowable(str(node.get('name'))) elif node.tag == 'frameEnd': return EndFrameFlowable() elif node.tag == 'hr': width_hr=node.get('width') or '100%' color_hr=node.get('color') or 'black' thickness_hr=node.get('thickness') or 1 lineCap_hr=node.get('lineCap') or 'round' return platypus.flowables.HRFlowable(width=width_hr,color=color.get(color_hr),thickness=float(thickness_hr),lineCap=str(lineCap_hr)) else: sys.stderr.write('Warning: flowable not yet implemented: %s !\n' % (node.tag,)) return None
def _flowable(self, node, extra_style=None): if node.tag=='pto': return self._pto(node) if node.tag=='para': style = self.styles.para_style_get(node) if extra_style: style.__dict__.update(extra_style) result = [] for i in self._textual(node).split('\n'): result.append(platypus.Paragraph(i, style, **(utils.attr_get(node, [], {'bulletText':'str'})))) return result elif node.tag=='barCode': try: from reportlab.graphics.barcode import code128 from reportlab.graphics.barcode import code39 from reportlab.graphics.barcode import code93 from reportlab.graphics.barcode import common from reportlab.graphics.barcode import fourstate from reportlab.graphics.barcode import usps from reportlab.graphics.barcode import createBarcodeDrawing except ImportError: _logger.warning("Cannot use barcode renderers:", exc_info=True) return None args = utils.attr_get(node, [], {'ratio':'float','xdim':'unit','height':'unit','checksum':'int','quiet':'int','width':'unit','stop':'bool','bearers':'int','barWidth':'float','barHeight':'float'}) codes = { 'codabar': lambda x: common.Codabar(x, **args), 'code11': lambda x: common.Code11(x, **args), 'code128': lambda x: code128.Code128(str(x), **args), 'standard39': lambda x: code39.Standard39(str(x), **args), 'standard93': lambda x: code93.Standard93(str(x), **args), 'i2of5': lambda x: common.I2of5(x, **args), 'extended39': lambda x: code39.Extended39(str(x), **args), 'extended93': lambda x: code93.Extended93(str(x), **args), 'msi': lambda x: common.MSI(x, **args), 'fim': lambda x: usps.FIM(x, **args), 'postnet': lambda x: usps.POSTNET(x, **args), 'ean13': lambda x: createBarcodeDrawing('EAN13', value=str(x), **args), 'qrcode': lambda x: createBarcodeDrawing('QR', value=x, **args), } code = 'code128' if node.get('code'): code = node.get('code').lower() return codes[code](self._textual(node)) elif node.tag=='name': self.styles.names[ node.get('id')] = node.get('value') return None elif node.tag=='xpre': style = self.styles.para_style_get(node) return platypus.XPreformatted(self._textual(node), style, **(utils.attr_get(node, [], {'bulletText':'str','dedent':'int','frags':'int'}))) elif node.tag=='pre': style = self.styles.para_style_get(node) return platypus.Preformatted(self._textual(node), style, **(utils.attr_get(node, [], {'bulletText':'str','dedent':'int'}))) elif node.tag=='illustration': return self._illustration(node) elif node.tag=='blockTable': return self._table(node) elif node.tag=='title': styles = reportlab.lib.styles.getSampleStyleSheet() style = styles['Title'] return platypus.Paragraph(self._textual(node), style, **(utils.attr_get(node, [], {'bulletText':'str'}))) elif re.match('^h([1-9]+[0-9]*)$', (node.tag or '')): styles = reportlab.lib.styles.getSampleStyleSheet() style = styles['Heading'+str(node.tag[1:])] return platypus.Paragraph(self._textual(node), style, **(utils.attr_get(node, [], {'bulletText':'str'}))) elif node.tag=='image': image_data = False if not node.get('file'): if node.get('name'): if node.get('name') in self.doc.images: _logger.debug("Image %s read ", node.get('name')) image_data = self.doc.images[node.get('name')].read() else: _logger.warning("Image %s not defined", node.get('name')) return False else: import base64 newtext = node.text if self.localcontext: newtext = utils._process_text(self, node.text or '') image_data = base64.decodestring(newtext) if not image_data: _logger.debug("No inline image data") return False image = StringIO(image_data) else: _logger.debug("Image get from file %s", node.get('file')) image = _open_image(node.get('file'), path=self.doc.path) return platypus.Image(image, mask=(250,255,250,255,250,255), **(utils.attr_get(node, ['width','height']))) elif node.tag=='spacer': if node.get('width'): width = utils.unit_get(node.get('width')) else: width = utils.unit_get('1cm') length = utils.unit_get(node.get('length')) return platypus.Spacer(width=width, height=length) elif node.tag=='section': return self.render(node) elif node.tag == 'pageNumberReset': return PageReset() elif node.tag in ('pageBreak', 'nextPage'): return platypus.PageBreak() elif node.tag=='condPageBreak': return platypus.CondPageBreak(**(utils.attr_get(node, ['height']))) elif node.tag=='setNextTemplate': return platypus.NextPageTemplate(str(node.get('name'))) elif node.tag=='nextFrame': return platypus.CondPageBreak(1000) # TODO: change the 1000 ! elif node.tag == 'setNextFrame': from reportlab.platypus.doctemplate import NextFrameFlowable return NextFrameFlowable(str(node.get('name'))) elif node.tag == 'currentFrame': from reportlab.platypus.doctemplate import CurrentFrameFlowable return CurrentFrameFlowable(str(node.get('name'))) elif node.tag == 'frameEnd': return EndFrameFlowable() elif node.tag == 'hr': width_hr=node.get('width') or '100%' color_hr=node.get('color') or 'black' thickness_hr=node.get('thickness') or 1 lineCap_hr=node.get('lineCap') or 'round' return platypus.flowables.HRFlowable(width=width_hr,color=color.get(color_hr),thickness=float(thickness_hr),lineCap=str(lineCap_hr)) else: sys.stderr.write('Warning: flowable not yet implemented: %s !\n' % (node.tag,)) return None
def __call__(self, time, delta): partA = color.get(self.partA, time, delta) partB = color.get(self.partB, time, delta) return partA/partB