def render_text(self, position, text, relative_line_spacing=1.0, use_3d_position=False): from gltbx.gl import glRasterPos2f, glRasterPos3f, glBitmap if use_3d_position: glRasterPos = glRasterPos3f else: glRasterPos = glRasterPos2f line_spacing = round(self.height() * relative_line_spacing) for i,string in enumerate(text.splitlines()): glRasterPos(*position) glBitmap(0, 0, 0.0, 0.0, 0.0, -i*line_spacing, "") self.render_string(string=string.expandtabs())
def label_nearest_point(self): ann = AnnAdaptorSelfInclude(self.points.as_double(), 3) ann.query(self.rotation_center) i = ann.nn[0] gltbx.fonts.ucs_bitmap_8x13.setup_call_lists() gl.glDisable(gl.GL_LIGHTING) gl.glColor3f(1.0, 1.0, 1.0) gl.glLineWidth(1.0) xyz = self.points_data["xyz"][i] exp_id = self.points_data["id"][i] panel = self.points_data["panel"][i] d_spacing = self.points_data["d_spacing"][i] label = (f"id: {exp_id}; panel: {panel}\n" f"xyz: {xyz[0]:.1f} {xyz[1]:.1f} {xyz[2]:.1f}\n" f"res: {d_spacing:.2f} Angstrom") if "miller_index" in self.points_data and exp_id != -1: hkl = self.points_data["miller_index"][i] label += f"\nhkl: {hkl}" line_spacing = round(gltbx.fonts.ucs_bitmap_8x13.height()) for j, string in enumerate(label.splitlines()): gl.glRasterPos3f(*self.points[i]) gl.glBitmap(0, 0, 0.0, 0.0, line_spacing, -j * line_spacing, b" ") gltbx.fonts.ucs_bitmap_8x13.render_string(string)