Beispiel #1
0
 def draw_axis(self, axis, label):
     if self.minimum_covering_sphere is None:
         self.update_minimum_covering_sphere()
     s = self.minimum_covering_sphere
     scale = max(max(s.box_max()), abs(min(s.box_min())))
     gltbx.fonts.ucs_bitmap_8x13.setup_call_lists()
     gl.glDisable(gl.GL_LIGHTING)
     if self.settings.black_background:
         gl.glColor3f(1.0, 1.0, 1.0)
     else:
         gl.glColor3f(0.0, 0.0, 0.0)
     gl.glLineWidth(1.0)
     gl.glBegin(gl.GL_LINES)
     gl.glVertex3f(0.0, 0.0, 0.0)
     gl.glVertex3f(axis[0] * scale, axis[1] * scale, axis[2] * scale)
     gl.glEnd()
     gl.glRasterPos3f(0.5 + axis[0] * scale, 0.2 + axis[1] * scale,
                      0.2 + axis[2] * scale)
     gltbx.fonts.ucs_bitmap_8x13.render_string(label)
     gl.glEnable(gl.GL_LINE_STIPPLE)
     gl.glLineStipple(4, 0xAAAA)
     gl.glBegin(gl.GL_LINES)
     gl.glVertex3f(0.0, 0.0, 0.0)
     gl.glVertex3f(-axis[0] * scale, -axis[1] * scale, -axis[2] * scale)
     gl.glEnd()
     gl.glDisable(gl.GL_LINE_STIPPLE)
Beispiel #2
0
 def draw_lab_axis(self, start, end, label):
     mid = tuple([0.5 * (s + e) for s, e in zip(start, end)])
     gltbx.fonts.ucs_bitmap_8x13.setup_call_lists()
     gl.glDisable(gl.GL_LIGHTING)
     gl.glColor3f(1.0, 1.0, 0.0)
     gl.glLineWidth(1.0)
     gl.glBegin(gl.GL_LINES)
     gl.glVertex3f(*start)
     gl.glVertex3f(*end)
     gl.glEnd()
     gl.glRasterPos3f(*mid)
     gltbx.fonts.ucs_bitmap_8x13.render_string(label)
Beispiel #3
0
 def enable(self, flag=True):
   from gltbx import gl
   if self.has_rescale_normal:
     mode = self.GL_RESCALE_NORMAL
   else:
     assert self.fallback_to_normalize,\
            "Rescale normals only available from OpenGL 1.2 onward"
     mode = gl.GL_NORMALIZE
   if flag:
     gl.glEnable(mode)
   else:
     gl.glDisable(mode)
Beispiel #4
0
 def enable(self, flag=True):
     from gltbx import gl
     if self.has_rescale_normal:
         mode = self.GL_RESCALE_NORMAL
     else:
         assert self.fallback_to_normalize,\
                "Rescale normals only available from OpenGL 1.2 onward"
         mode = gl.GL_NORMALIZE
     if flag:
         gl.glEnable(mode)
     else:
         gl.glDisable(mode)
Beispiel #5
0
 def setup_fog(self):
     if self.flag_show_fog:
         near, far = self.get_clipping_distances()
         fog_start = near + self.fog_scale_factor * (far - near)
         fog_end = max(fog_start + 5, far)
         gl.glMatrixMode(gl.GL_MODELVIEW)
         gl.glEnable(gl.GL_FOG)
         gl.glFogi(gl.GL_FOG_MODE, gl.GL_LINEAR)
         gl.glFogf(gl.GL_FOG_START, fog_start)
         gl.glFogf(gl.GL_FOG_END, fog_end)
         b = self.background_rgb
         gl.glFogfv(gl.GL_FOG_COLOR, [b[0], b[1], b[2], 1.0])
     else:
         gl.glDisable(gl.GL_FOG)
Beispiel #6
0
 def draw_cell(self, axes, color):
     astar, bstar, cstar = axes[0], axes[1], axes[2]
     gltbx.fonts.ucs_bitmap_8x13.setup_call_lists()
     gl.glDisable(gl.GL_LIGHTING)
     gl.glColor3f(*color)
     gl.glLineWidth(2.0)
     gl.glBegin(gl.GL_LINES)
     gl.glVertex3f(0.0, 0.0, 0.0)
     gl.glVertex3f(*astar.elems)
     gl.glVertex3f(0.0, 0.0, 0.0)
     gl.glVertex3f(*bstar.elems)
     gl.glVertex3f(0.0, 0.0, 0.0)
     gl.glVertex3f(*cstar.elems)
     gl.glEnd()
     gl.glRasterPos3f(*(1.01 * astar).elems)
     gltbx.fonts.ucs_bitmap_8x13.render_string("a*")
     gl.glRasterPos3f(*(1.01 * bstar).elems)
     gltbx.fonts.ucs_bitmap_8x13.render_string("b*")
     gl.glRasterPos3f(*(1.01 * cstar).elems)
     gltbx.fonts.ucs_bitmap_8x13.render_string("c*")
     gl.glEnable(gl.GL_LINE_STIPPLE)
     gl.glLineStipple(4, 0xAAAA)
     farpoint = astar + bstar + cstar
     # a* face
     gl.glBegin(gl.GL_LINE_LOOP)
     gl.glVertex3f(*farpoint.elems)
     gl.glVertex3f(*(farpoint - bstar).elems)
     gl.glVertex3f(*(farpoint - bstar - cstar).elems)
     gl.glVertex3f(*(farpoint - cstar).elems)
     gl.glEnd()
     # b* face
     gl.glBegin(gl.GL_LINE_LOOP)
     gl.glVertex3f(*farpoint.elems)
     gl.glVertex3f(*(farpoint - astar).elems)
     gl.glVertex3f(*(farpoint - astar - cstar).elems)
     gl.glVertex3f(*(farpoint - cstar).elems)
     gl.glEnd()
     # c* face
     gl.glBegin(gl.GL_LINE_LOOP)
     gl.glVertex3f(*farpoint.elems)
     gl.glVertex3f(*(farpoint - bstar).elems)
     gl.glVertex3f(*(farpoint - bstar - astar).elems)
     gl.glVertex3f(*(farpoint - astar).elems)
     gl.glEnd()
     gl.glDisable(gl.GL_LINE_STIPPLE)
Beispiel #7
0
 def draw_spheres(self, solid=False):
     gl.glMatrixMode(gl.GL_MODELVIEW)
     gray = 0.3
     gl.glColor3f(gray, gray, gray)
     if solid:
         gl.glEnable(gl.GL_LIGHTING)
         gl.glEnable(gl.GL_LIGHT0)
         gl.glLightfv(gl.GL_LIGHT0, gl.GL_AMBIENT, [1, 1, 1, 1])
         gl.glLightfv(gl.GL_LIGHT0, gl.GL_POSITION, [0, 0, 1, 0])
         gl.glEnable(gl.GL_BLEND)
         gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA)
         gl.glMaterialfv(gl.GL_FRONT, gl.GL_DIFFUSE, [1, 1, 1, 0.5])
         sphere = gltbx.util.SolidSphere
         grid = 50
     else:
         sphere = gltbx.util.WireSphere
         grid = 20
     for i, (x, r) in enumerate(self.spheres):
         gl.glPushMatrix()
         gl.glTranslated(*(x))
         sphere(radius=r, slices=grid, stacks=grid)
         gl.glPopMatrix()
     if solid:
         gl.glDisable(gl.GL_LIGHTING)
         gl.glDisable(gl.GL_LIGHT0)
         gl.glDisable(gl.GL_BLEND)
Beispiel #8
0
 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)