def get_pixel(self, x, y): try: if not self._cached_image: from PIL import Image self._cached_image = Image.open(self.path) col = self._cached_image.getpixel((x, self.height - y - 1)) if self._cached_image.mode == 'LA': col = (col[0], col[0], col[0], col[1]) if self._cached_image.mode == 'L': col = (col[0], col[0], col[0]) return color.rgba(*col) except: return None
def create_text_section(self, text, tag='', x=0, y=0): # print(text, tag) self.text_node = TextNode('t') self.text_node_path = self.attachNewNode(self.text_node) try: self.text_node.setFont(self._font) except: pass # default font if tag != '<>': tag = tag[1:-1] if tag.startswith('hsb('): # set color based on numbers tag = tag[4:-1] hsb_values = tuple(float(e.strip()) for e in tag.split(',')) self.current_color = color.color(*hsb_values) elif tag.startswith('rgb('): # set color based on numbers tag = tag[4:-1] rgb_values = (float(e.strip()) for e in tag.split(',')) self.current_color = color.rgba(*rgb_values) if tag.startswith('scale:'): scale = tag.split(':')[1] self.scale_override = float(scale) elif tag.startswith('image:'): texture_name = tag.split(':')[1] image = Entity( parent=self.text_node_path, name='inline_image', model='quad', texture=texture_name, color=self.current_color, scale=1, # position=(x*self.size*self.scale_override, y*self.size*self.line_height), origin=(.0, -.25), add_to_scene_entities=False, ) if not image.texture: destroy(image) else: self.images.append(image) # self.text_node.remove_node() # self.text_node = image else: if tag in self.text_colors: self.current_color = self.text_colors[tag] self.text_node_path.setScale(self.scale_override * self.size) self.text_node.setText(text) self.text_node.setTextColor(self.current_color) self.text_node.setPreserveTrailingWhitespace(True) # self.text_node_path.setPos( # x * self.size * self.scale_override, # 0, # (y * self.size * self.line_height) - .75 * self.size) self.text_node_path.setPos(x * self.size * self.scale_override, (y * self.size * self.line_height) - .75 * self.size, 0) self.text_nodes.append(self.text_node_path) return self.text_node