def Texture2HSV(tx, pos): 'Given a texture and a vexor position, return a color.' h,s,v = textures2hsv[tx] if tx in (simulation.Textures.BULKHEAD, simulation.Textures.DECK): tupity = vexor5.uniform3coloring(pos) #h,s,v = (h, s, v + tupity*16 ) h,s,v = (sevenHueMap[tupity], s*3, v) return (h,s,v)
def paint(self, painter, option, widget=0): # TODO: For a given zoom level and rotation and cell contents, # cache tile rendering in a bitmap. Since many tiles are often identical # this should provide a substatial speedup. # TODO: Strategy: Using the given painter's transformation, # extract size and orientation, then reset the transform and # either blit from cache or manually scale and rotate painting into # a QPixMap, and then blit it. # TODO: Extend the above technique so that in the same way, alpha-masked # pixmaps of the various component drawing operations are cached. lod = option.levelOfDetailFromTransform(painter.worldTransform()) if lod != GraphicsTileItem._oldLOD: GraphicsTileItem._oldLOD = lod print "GraphicsTileItem level of detail = {0}".format(lod) #painter.resetTransform() # restore to device coordinates, 1 = 1 pixel #key = (self._renderSpec, lod, orientation) #if key in self._renderCache: # bitBlt #else: # pixm = QPixMap(svgr.defaultSize()) # painter = QPainter(pixm) if lod >= 23: painter.setClipPath(self.hexagon_qpainterpath) painter.setPen(QtCore.Qt.NoPen) for (renderObj, arg) in self._renderSpec: if renderObj == simulation.RenderObjects.BG: painter.setBrush(QBrush(QtGui.QColor.fromHsv(*Texture2HSV(arg, self._cell.Pos())))) if self.isSelected(): painter.setPen(self.selectionPen) elif lod >= 23: painter.setPen(self.pen()) painter.drawConvexPolygon(self.polygon()) painter.setPen(QtCore.Qt.NoPen) elif renderObj == simulation.RenderObjects.TARGETING: brush = QBrush(QtGui.QColor(255,127,0), QtCore.Qt.Dense4Pattern) brush.setTransform(QtGui.QTransform.fromScale(.1,.1)) painter.setBrush(brush) painter.drawConvexPolygon(self.polygon()) elif renderObj == simulation.RenderObjects.NPC or renderObj == simulation.RenderObjects.PLAYER: painter.setBrush(QtGui.QColor.fromHsv(*arg)) r = simulation.CELL_APOTHEM*3/4.0 painter.drawEllipse(QPointF(0,0), r, r) if False: # paint some debugging text painter.setPen(QtCore.Qt.white) painter.setBrush(self.brush()) #painter.setFont(QtGui.QFont("Helvetica", 8)) scale = .02 painter.scale(scale,scale) r = QtCore.QRectF(-.5/scale,-.5/scale,1/scale,1/scale) #txt = "{0},{1},{2}".format(self._cell.Pos().x, self._cell.Pos().y, self._cell.Pos().z) txt = "{0}".format( vexor5.uniform3coloring(self._cell.Pos()) ) #txt = str(self._cell._region) painter.drawText(r, QtCore.Qt.AlignCenter, txt)