ó
ÉÝ{Tc           @   s_   d  Z  d d l Z d d l Z d d l Td d l Td f  d „  ƒ  YZ d e f d „  ƒ  YZ d S(   sK  
     pygl/displayobject.py: CCP4MG Molecular Graphics Program
     Copyright (C) 2001-2005 University of York, CCLRC

     This library is free software: you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public License
     version 3, modified in accordance with the provisions of the 
     license to address the requirements of UK law.
 
     You should have received a copy of the modified GNU Lesser General 
     Public License along with this library.  If not, copies may be 
     downloaded from http://www.ccp4.ac.uk/ccp4license.php
 
     This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU Lesser General Public License for more details.
iÿÿÿÿN(   t   *t   displayobjectc           B   s”  e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d d „ Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d d  „ Z  d! „  Z! d" „  Z" d# „  Z# d$ „  Z$ d% „  Z% d& „  Z& d' „  Z' d( „  Z( d) „  Z) d* „  Z* d+ „  Z+ d, „  Z, RS(-   s€  
      Class which contains all the information about a given
      display object. A display object is a collection of primitives
      with a given position and orientation. The class also contains
      information out the material properties of the primitives. The
      same properties are applied to all primitives in an object to
      enable the speed up the colouring.
      c         C   s)   t  |  j d |  j d |  j d ƒ d  S(   Ni    i   i   (   t   glTranslateft   origin(   t   self(    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   ApplyTranslation%   s    c         C   sg  |  j  j ƒ  } t d ƒ } | d d | d <| d d | d <| d d | d <| d d | d <| d d | d <| d d | d <| d d | d <| d d | d	 <| d d | d
 <| d d | d <| d d | d <| d d | d <| d d | d <| d d | d <| d d | d <| d d | d <t d d | ƒ } t | ƒ } t | ƒ d  S(   Ni   i    i   i   i   i   i   i   i   i   i	   i
   i   i   i   i   i   (   t   quatt	   getMatrixt   doubleat   dptomatt   buildrotmatrix_from_ct   glMultMatrixf(   R   t   Mt   cmatt
   glrotmat_c(    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   ApplyRotation(   s*    c         C   s   |  j  ƒ  d  S(   N(   t   init(   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   __init__?   s    c         C   s×  d d  l  } |  j ƒ  |  j j ƒ  } | j | d d ƒ } g  } d } xŠ|  j D]~} | d } g  } | j | j d ƒ | j | j d ƒ | j | j d ƒ | j d ƒ | j | | ƒ }	 g  }
 |
 j |	 d |  j d ƒ |
 j |	 d |  j d ƒ |
 j |	 d |  j d ƒ d } xŽ| D]†} g  } | j | d d | d d ƒ | j | d d | d d ƒ | j | d d | d d ƒ g  } | j | d d | d d ƒ | j | d d | d d ƒ | j | d d | d d ƒ | j	 | | ƒ } | j
 | ƒ } g  } | j | d d |
 d ƒ | j | d d |
 d ƒ | j | d d |
 d ƒ | j
 | ƒ } | j | | ƒ d k  r)d } q)q)W| d k rQ | j | ƒ qQ qQ W| S(   Niÿÿÿÿi   i   i    i   g        (   t   utilt   set_primitive_originsR   R   t   buildmatrixt   primst   appendR   t   matrixXvectort   vcrosst	   normalizet   vdot(   R   t   volumeR   R   t   rotmatt   selected_primst   primidt   primt   origin4t   primoriginrott
   primorigint   prim_in_boxt   planet   v0t   v1t   nt   p2prim(    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   get_selected_primsB   sP    

!!!!!!c         C   sW   g  } d GHx< |  j  D]1 } t | ƒ j d ƒ d k r | j | ƒ q q W| |  _  d  S(   Ns   Clear labelst   texti    (   R   t   dirt   countR   (   R   R   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   clear_labelsp   s    c         C   s   g  |  _  d  S(   N(   R   (   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   clear_primsy   s    c         C   s   d S(   Ni    (    (   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   GetNumSymmetryMatrices|   s    c         C   s   d  S(   N(    (   R   t   i(    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   ApplySymmetryMatrix   s    c         C   s   d  S(   N(    (   R   R0   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   GetSymmetryMatrix‚   s    c         C   s   d  S(   N(    (   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   DrawUnitCell…   s    c         C   s   | |  _  d  S(   N(   t   symm_mat(   R   R4   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   SetSymmetryMatricesˆ   s    c         C   s¯   g  |  _  d |  _ d |  _ d |  _ d |  _ d	 |  _ d |  _ d |  _ d |  _ t	 j
 |  j d |  j d |  j d d ƒ |  _ t j ƒ  |  _ d |  _ d |  _ d |  _ d S(
   sz   
         Create null object with zero primitives and positioned
         at origin. Default lighting behaviour.
         g        i   i    i   N(   g        g        g        (   g        g        g        (   g        g        g        (   g        g        g        (   R   R   t   comt   visiblet   rott   drott   dxt   dyt   dzt
   pygl_coordt   QuatR   t   Lightingt   lightingt
   do_rebuildt   NoneR4   t
   build_list(   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyR   ‹   s    									0		i   c         C   s   |  j  S(   N(   RA   (   R   t   doit(    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   get_rebuildŸ   s    c         C   s   | |  _  d  S(   N(   RA   (   R   RD   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   rebuild¢   s    c         C   s(   |  j  d k r d |  _  n	 d |  _  d  S(   Ni   i    (   R7   (   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt	   changevis¥   s    c         C   s   | j  j |  j  ƒ d  S(   N(   R@   t   copy(   R   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   set_prim_lighting«   s    c         C   sG   d } x: |  j  D]/ } | | k r5 |  j  j | ƒ n  | d } q Wd  S(   Ni    i   (   R   t   pop(   R   t   delprimR0   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   delete_primitive®   s
    c         C   s!   |  j  | ƒ |  j j | ƒ d S(   s‡   
         Add primitive to self.prims and set its colouring.
         The colouring needs to be made into its own nice class.
         N(   RI   R   R   (   R   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   add_primitiveµ   s    c         C   s†   |  j  j | |  j  _ |  j  j d k  r7 d |  j  _ n  |  j  j d k rX d |  j  _ n  x |  j D] } |  j | ƒ qb Wd |  _ d S(   s"   
         Set shininess.
         g        g      `@i   N(   R@   t	   shininessR   RI   RA   (   R   RN   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   increase_shininess½   s    c         C   sŠ  |  j  j d | d |  j  j d <|  j  j d | d |  j  j d <|  j  j d | d |  j  j d <|  j  j d d k  r� d |  j  j d <n  |  j  j d d k r¸ d |  j  j d <n  |  j  j d d k  rá d |  j  j d <n  |  j  j d d k r
d |  j  j d <n  |  j  j d d k  r3d |  j  j d <n  |  j  j d d k r\d |  j  j d <n  x |  j D] } |  j | ƒ qfWd |  _ d S(   s3   
         Set specular lighting property.
         i    i   i   g        g      ð?N(   R@   t   specularR   RI   RA   (   R   RP   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   increase_specularË   s$    """c         C   sŠ  |  j  j d | d |  j  j d <|  j  j d | d |  j  j d <|  j  j d | d |  j  j d <|  j  j d d k  r� d |  j  j d <n  |  j  j d d k r¸ d |  j  j d <n  |  j  j d d k  rá d |  j  j d <n  |  j  j d d k r
d |  j  j d <n  |  j  j d d k  r3d |  j  j d <n  |  j  j d d k r\d |  j  j d <n  x |  j D] } |  j | ƒ qfWd |  _ d S(   s2   
         Set ambient lighting property.
         i    i   i   g        g      ð?N(   R@   t   ambientR   RI   RA   (   R   RR   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   increase_ambientè   s$    """c         C   sŠ  |  j  j d | d |  j  j d <|  j  j d | d |  j  j d <|  j  j d | d |  j  j d <|  j  j d d k  r� d |  j  j d <n  |  j  j d d k r¸ d |  j  j d <n  |  j  j d d k  rá d |  j  j d <n  |  j  j d d k r
d |  j  j d <n  |  j  j d d k  r3d |  j  j d <n  |  j  j d d k r\d |  j  j d <n  x |  j D] } |  j | ƒ qfWd |  _ d S(   s2   
         Set diffuse lighting property.
         i    i   i   g        g      ð?N(   R@   t   diffuseR   RI   RA   (   R   RT   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   increase_diffuse  s$    """c         C   sŠ  |  j  j d | d |  j  j d <|  j  j d | d |  j  j d <|  j  j d | d |  j  j d <|  j  j d d k  r� d |  j  j d <n  |  j  j d d k r¸ d |  j  j d <n  |  j  j d d k  rá d |  j  j d <n  |  j  j d d k r
d |  j  j d <n  |  j  j d d k  r3d |  j  j d <n  |  j  j d d k r\d |  j  j d <n  x |  j D] } |  j | ƒ qfWd |  _ d S(   s3   
         Set emission lighting property.
         i    i   i   g        g      ð?N(   R@   t   emissionR   RI   RA   (   R   RV   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   increase_emission"  s$    """c         C   s4   |  j  | |  _  |  j | |  _ |  j | |  _ d  S(   N(   R:   R;   R<   (   R   R:   R;   R<   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   move?  s    c   	      C   se   |  j  ƒ  |  j j ƒ  } t | | | | |  j t |  j ƒ |  j d |  j d |  j d | ƒ
 } | S(   Ni    i   i   (   R   R   t   getInvMatrixt	   findprimcR"   t   lenR   R   (	   R   t   xyzmpct   xyzmmct   xyzpmct   xyzppct   neart   farR   t   nearprim(    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   findprimitiveD  s    
Hc         C   s§   t  d t |  j ƒ ƒ |  _ x„ t t |  j ƒ ƒ D]m } |  j | } | j d |  j | <| j d |  j | t |  j ƒ <| j d |  j | d t |  j ƒ <q2 Wd  S(   Ni   i    i   i   (   R   R[   R   R"   t   rangeR   (   R   R0   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyR   J  s    !c         C   s   | | | f |  _  d  S(   N(   R9   (   R   t   dphit   dchit   dpsi(    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   rotateR  s    c         C   sm   |  j  d | d } |  j  d | d } |  j  d | d } | | | f |  _  d \ |  _ |  _ |  _ d  S(   Ni    i   i   g        (   g        g        g        (   R   R:   R;   R<   (   R   R   t   o0t   o1t   o2(    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   move_originU  s
    c         C   s   d  S(   N(    (   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt	   draw_text]  s    i    c         C   sW   xP |  j  D]E } | d k r) | j ƒ  n
 | j ƒ  | j | k r
 | j ƒ  q
 q
 Wd  S(   Ni   (   R   t   set_draw_colour_whitet   set_draw_colourt   transparentt   draw(   R   t   whiteRp   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyRq   `  s    
c         C   s   |  j  S(   N(   R   (   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt
   get_origini  s    c         C   s   |  j  | S(   N(   R   (   R   R0   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   get_primitivel  s    c         C   s   | | | f |  _  d  S(   N(   R   (   R   Rj   Rk   t   o3(    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt
   set_origino  s    c         C   s   |  j  S(   N(   R9   (   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   get_drotr  s    c         C   s)   |  j  j | | | |  j ƒ d |  _ d  S(   Ng        (   g        g        g        (   R   t   rotate_about_axesR9   (   R   t   xaxist   yaxist   zaxis(    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   apply_rotation_about_axesu  s    c         C   s   |  j  j ƒ  S(   N(   R   R   (   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   get_rotation_matrixy  s    c         C   s   |  j  j ƒ  S(   N(   R   t   getMatrix_c(   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   get_rotation_matrix_c|  s    c         C   s`   |  j  | } g  } | j | j d ƒ | j | j d ƒ | j | j d ƒ | j d ƒ | S(   Ni    i   i   (   R   R   R   (   R   R0   R   R    (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   get_primorigin  s    c         C   s\   |  j  ƒ  } g  } | j | ƒ | j | ƒ | j | ƒ | j d ƒ t j | | ƒ } | S(   Ni    (   R}   R   R   R   (   R   t   xt   yt   zR   R    R!   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   rotate_pointˆ  s    c         C   s   | |  _  d  S(   N(   RC   (   R   RC   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   SetBuildDisplayList’  s    c         C   s   t  S(   N(   RC   (   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   BuildDisplayList•  s    c         C   sŠ   d d  l  } |  j | } |  j ƒ  } g  } | j | j d ƒ | j | j d ƒ | j | j d ƒ | j d ƒ | j | | ƒ } | S(   Niÿÿÿÿi    i   i   (   R   R   R}   R   R   R   (   R   R0   R   R   R   R    R!   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   get_primoriginrot˜  s    (-   t   __name__t
   __module__t   __doc__R   R   R   R)   R-   R.   R/   R1   R2   R3   R5   R   RE   RF   RG   RI   RL   RM   RO   RQ   RS   RU   RW   RX   Rc   R   Rh   Rl   Rm   Rq   Rs   Rt   Rv   Rw   R|   R}   R   R€   R„   R…   R†   R‡   (    (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyR      sV   				.																																			
		t   mapdisplayobjectc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   |  j  ƒ  d  S(   N(   R   (   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyR   ¥  s    c         C   s   d S(   Ni    (    (   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyR†   ¨  s    c         C   sâ   |  j  G|  j G|  j GHt | d ƒ d k sX t | d ƒ d k sX t | d ƒ d k rÆ |  j d j d | d |  j d j d | d |  j d j d | d f |  j d _ d |  j d _ n  d \ |  _  |  _ |  _ d  S(   Ni    g        i   i   (   g        g        g        (   R:   R;   R<   t   absR   t   mapcomRF   (   R   R   (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyRl   «  s
    B[(   Rˆ   R‰   R   R†   Rl   (    (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyR‹   ¤  s   		(   RŠ   R=   R?   t   point_funcst   openglR   R‹   (    (    (    s?   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/pygl/displayobject.pyt   <module>   s   

ÿ Š