ó
ÉÝ{Tc           @   sø   d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z e j j d ƒ rc d d l Z	 n d d l	 Z	 d d l
 m Z m Z m Z d d l Z d d l Z d d l Z d f  d „  ƒ  YZ d e e j f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d S(   sš  
     qtgui/MGGLWidgetCore.py: CCP4MG Molecular Graphics Program
     Copyright (C) 2001-2008 University of York, CCLRC
     Copyright (C) 2009-2011 University of York
     Copyright (C) 2012 STFC

     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ÿÿÿÿNs   -osmesa(   t   QtCoret   QtGuit   QtOpenGLt   MGGLWidgetCorec           B   sô  e  Z d  Z d Z e Z e j ƒ  Z e Z d Z d Z	 d „  Z
 d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d/ d/ d/ d/ d/ d/ d	 „ Z d/ 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 e 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/ d& „  Z0 d' „  Z1 d( „  Z2 d) „  Z3 d* „  Z4 d+ „  Z5 d, d- „ Z6 d, d/ d/ d. „ Z7 RS(0   g      (@i    c         C   s©   | j  d ƒ r | d |  _ n  | j  d ƒ r> | d |  _ n  | j  d ƒ r] | d |  _ n  | j  d ƒ r| | d |  _ n  | j  d ƒ r› | d |  _ n  |  j ƒ  d  S(   Nt   ambocc_zneart   ambocc_zfart   ambocc_radiust   ambocc_biast   ambocc_scale(   t   has_keyt   ambientOcclusionZNeart   ambientOcclusionZFart   ambientOcclusionRadiust   ambientOcclusionBiast   ambientOcclusionScalet   updateGL(   t   selft   params(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setAmbientOcclusionPrefs/   s    c         C   s   | |  _  d  S(   N(   t   _size(   R   t   size(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setSize<   s    c         C   s   |  j  S(   N(   R   (   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR   ?   s    c         C   s   |  j  j ƒ  d  S(   N(   t   pbuffert   bind(   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   BindOffScreenBufferFBOB   s    c         C   s   |  j  j ƒ  d  S(   N(   R   t   makeCurrent(   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   BindOffScreenBufferE   s    c         C   s   |  j  j ƒ  S(   N(   R   t   width(   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR   H   s    c         C   s   |  j  j ƒ  S(   N(   R   t   height(   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR   K   s    c         C   s   d S(   Ni    (    (   R   t   imaget   pixmapt   targett   formatt   fileNamet   options(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   bindTextureN   s    c         C   s  t  |  _ d |  _ t  |  _ g  |  _ g  |  _ d |  _ t  |  _ d |  _ d |  _	 t
 j d d d d ƒ |  _ t
 j d d d d ƒ |  _ d  |  _ d d d g |  _ i  |  _ t j ƒ  |  _ t j ƒ  |  _ t j d d d d ƒ |  _ g  |  _ g  |  _ d |  _ d |  _ |  j |  j ƒ t |  _ d |  _  d |  _! d |  _" d	 |  _# d |  _$ d |  _% t |  _& t  |  _' t  |  _( d
 |  _) d |  _* d |  _+ d |  _, d |  _- d |  _. d |  _/ d |  _0 d |  _1 d |  _2 d |  _3 d |  _4 d |  _5 d |  _6 d |  _7 d |  _8 d |  _9 d |  _: d |  _; d |  _< d |  _= d |  _> d |  _? d |  _@ d |  _A d |  _B d |  _C d |  _D d |  _E d |  _F d |  _G t  |  _H t  |  _I t  |  _J t  |  _K t  |  _L t  |  _M d |  _N d |  _O d |  _P d |  _Q d |  _R g  |  _S d |  _T d  S(   Ni   i    g      N@g        g      $Àiÿ   g      ð?iè  i
   g       €g      4@t    g     €F@g      è?g      Y@g     Àb@g      .@g333333Ó?(   i    i    i    (   g      è?g      è?(U   t   Falset   use_pbuffert   displayListsRebuiltt   isTransparentt   visibility_listt
   alpha_listt   doStereot   doZalmanStereot   objectt   RADIUSt
   pygl_coordt   Quatt   quatt
   extra_quatt   Nonet   extra_matrixt   rpost	   keys_downR    t   QPointt   lastPost   mouseDownPosR   t   QColort   bgcolourt   got   listidst   DISPLAYLISTSt	   IMMEDIATEt   SetRenderModet   Truet   drawTextSeparatelyt   fontScalingt   NEARt   FARt
   slab_widtht   slab_offsett   fog_strengtht   fog_enabledt   slab_enabledt   clip_capt   fog_neart   fog_fart	   show_axest
   show_scalet
   shaders_ont   vertexShadert   fragmentShadert   textVertexShadert   textFragmentShadert   normalAsColourVertexShadert   normalAsColourFragmentShadert   edgeDetectVertexShadert   edgeDetectFragmentShadert   blurVertexShadert   blurXFragmentShadert   blurYFragmentShadert   depthVertexShadert   depthFragmentShadert   textBackgroundVertexShadert   textBackgroundFragmentShadert   circleShadowVertexShadert   circleShadowFragmentShadert   circleVertexShadert   circleFragmentShadert   ssaoVertexShadert   ssaoFragmentShadert   shadowVertexShadert   shadowFragmentShadert   shadowCentret   shadowExtentt   axes_positiont   doMirrort   doShadowt   inShadowt	   doAmbientt	   inAmbientt	   doOutlineR
   R   R   R   R   t   customClipPlanest   line_scaling(   R   t   parentt   shareR    (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   __init__Q   s˜    																																																																				c         C   s   |  j  S(   N(   t
   renderMode(   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   GetRenderMode°   s    c         C   s   | |  _  d  S(   N(   Rv   (   R   t   mode(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR@   ³   s    c         C   sa   d } xT |  j  D]I } |  j | j j ƒ  rO |  j | j |  j |  j ƒ  ƒ n  | d } q Wd  S(   Ni    i   (   R=   R<   t   objt   GetDrawSymmetryt   SetupSymmetryR5   t   extents(   R   t   it   id(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR{   ¶   s
    #c         C   s.   |  j  j ƒ  |  j  j ƒ  |  j  j ƒ  g } | S(   N(   R;   t   redt   greent   blue(   R   t   col(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   getBackground½   s    *c         C   s   | |  _  |  j ƒ  d  S(   N(   R5   R{   (   R   R5   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setPositionNoUpdateÁ   s    	c         C   s:   | |  _  |  j ƒ  |  j t j d ƒ |  ƒ |  j ƒ  d  S(   Nt   PositionChanged(   R5   R   t   emitR    t   SIGNALR{   (   R   R5   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setPositionÅ   s    	
c         C   s   | |  _  d  S(   N(   R1   (   R   R1   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setQuatNoUpdateË   s    c         C   s0   | |  _  |  j ƒ  |  j t j d ƒ |  ƒ d  S(   Nt   QuatChanged(   R1   R   R†   R    R‡   (   R   R1   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setQuatÎ   s    	
c         C   s�   |  j  j ƒ  t j | | | ƒ } | j ƒ  | j ƒ  | j ƒ  } } } t j | | | d ƒ } |  j j	 | ƒ |  j
 t j d ƒ |  ƒ d  S(   Ni    RŠ   (   R2   t   getInvMatrixR/   t	   Cartesiant   get_xt   get_yt   get_zR0   R1   t   postMultR†   R    R‡   (   R   t   dxt   dyt   dzt   cartt   rotQ(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setRotationNoUpdateÓ   s
    "&c         C   s—   |  j  j ƒ  t j | | | ƒ } | j ƒ  | j ƒ  | j ƒ  } } } t j | | | d ƒ } |  j j	 | ƒ |  j
 ƒ  |  j t j d ƒ |  ƒ d  S(   Ni    RŠ   (   R2   RŒ   R/   R�   RŽ   R�   R�   R0   R1   R‘   R   R†   R    R‡   (   R   R’   R“   R”   R•   R–   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setRotationÚ   s    "&
c         C   s   |  j  S(   N(   R(   (   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   transparencyâ   s    c         C   s   | |  _  d  S(   N(   R(   (   R   t   transparent(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setTransparencyå   s    c         C   s@   d } x3 |  j  D]( } | j j ƒ  d k  r | d } q q W| S(   Ni    g®Gáz®ï?i   (   R<   Ry   t   GetAlpha(   R   t   nnR<   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   nofTransparentObjectsè   s
     c         C   sz   |  j  j j ƒ  } t | ƒ t d ƒ k ri t j |  j  j j ƒ  ƒ } | j ƒ  | j ƒ  | j ƒ  f } n  |  j	 | ƒ d  S(   NR$   (
   R<   Ry   t
   get_origint   typeR/   t   CartesianPtrRŽ   R�   R�   t   centreOn(   R   t   origin(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   recentreî   s
    $c         C   sZ   |  j  ƒ  |  j r  |  j ƒ  n  | |  _ |  j ƒ  |  j t j d ƒ |  ƒ |  j ƒ  d  S(   Nt   ViewChanged(	   R   R&   R   R5   R   R†   R    R‡   R{   (   R   t   o_int   redraw(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt	   SetOriginõ   s    
		
c         C   s(   | |  _  |  j  d k  r$ d |  _  n  d  S(   Ni   (   R.   (   R   R.   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setZoomNoUpdateþ   s    	 c         C   sK   | |  _  |  j  d k  r$ d |  _  n  |  j ƒ  |  j t j d ƒ |  ƒ d  S(   Ni   t   ZoomChanged(   R.   R   R†   R    R‡   (   R   R.   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setZoom  s
    	 
c         C   s_   |  j  ƒ  |  j r  |  j ƒ  n  | |  _ |  j |  j ƒ  j ƒ  |  j ƒ  j ƒ  ƒ |  j ƒ  d  S(   N(	   R   R&   R   t   viewsizet   resizeGLR   R   R   R   (   R   R¬   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setViewsize  s    
		(c         C   s†   | |  _  | s‚ t |  d ƒ r‚ t |  j ƒ r‚ t |  j ƒ  d ƒ r‚ t |  j ƒ  j ƒ r‚ |  j ƒ  j ƒ  d k r‚ t j d ƒ q‚ n  d  S(   NR    t   samplesi   i�€  (   R,   t   hasattrt   callableR    R¯   t   openglt   glEnable(   R   R,   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setDoZalmanStereo  s    	`c         C   s   | |  _  d  S(   N(   R+   (   R   t   stereo(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt	   setStereo  s    c         C   s   |  j  S(   N(   R,   (   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   getDoZalmanStereo  s    c         C   s   |  j  S(   N(   R+   (   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt	   getStereo  s    c         C   s   |  j  S(   N(   RC   (   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   getFontScaling  s    c         C   s   | |  _  d  S(   N(   RC   (   R   RC   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setFontScaling"  s    c         C   sG   |  j  rC y, d d  l } | j d d |  j  ƒ } | SWqC d  SXn  d  S(   Niÿÿÿÿi   (   R4   R/   t   matrixR3   (   R   R/   t   extra_matrix_copy(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   getExtraMatrixCopy%  s    	c         C   s   |  j  S(   N(   R4   (   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   getExtraMatrix/  s    c         C   s   | |  _  d  S(   N(   R4   (   R   R»   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setExtraMatrix2  s    c         C   s–  d d  l  } | j  ƒ  } | j  j j d ƒ } t j d ƒ |  _ | d |  j d <| d |  j d <| d |  j d <| d |  j d <g  |  _ d d	 d
 d d d g } g  } | j  j j d ƒ } x; | j | ƒ d k rü | j	 | ƒ | j  j j | ƒ } qÂ Wg  } xŒ | D]„ } | j | ƒ s
| j  j j | ƒ }	 t j d ƒ }
 |	 d |
 d <|	 d |
 d <|	 d |
 d <|	 d |
 d <|  j j	 |
 ƒ q
q
Wd  S(   Niÿÿÿÿt   whitei   i    i   i   i   R€   R   R�   t   blackt   yellowt   default(
   t   COLOURt   instst   RGBR/   t   doubleat   whitept   symcolpt   nextt   countt   append(   R   RÄ   t   dumRÀ   t   excludest   excludeRÊ   t   finalR‚   t   rgbRÉ   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setup_colour_pointers5  s2       	   c         C   s   | |  _  d  S(   N(   RN   (   R   t   state(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setAxesL  s    c         C   s   |  j  S(   N(   RN   (   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   getAxesO  s    c         C   s   | |  _  d  S(   N(   RO   (   R   RÓ   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setShowScaleR  s    c         C   s   |  j  S(   N(   RO   (   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   getShowScaleU  s    c         C   s   | |  _  | |  _ d  S(   N(   RL   RM   (   R   t   neart   far(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setFogNearAndFarX  s    	iÿÿÿÿc         C   s>   | |  _  | d k r! | |  _ n  |  j t j d ƒ |  ƒ d  S(   Ng        t
   FogChanged(   RI   RH   R†   R    R‡   (   R   RÓ   t   strength(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setFog\  s    	 c         C   sn   | |  _  | d  k r! | |  _ n  | d k r9 | |  _ n  | d  k rQ | |  _ n  |  j t j d ƒ |  ƒ d  S(   Ng        t   SlabChanged(   RJ   R3   RK   RF   RG   R†   R    R‡   (   R   RÓ   R   t   positionRK   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setSlaba  s    	   N(8   t   __name__t
   __module__R¬   t   nframest   previous_framest   timet   initial_timet   previous_timet   rollingt	   recordingR   R   R   R   R   R   R   R3   R#   Ru   Rw   R@   R{   Rƒ   R„   Rˆ   R‰   R‹   R—   R˜   R™   RA   R›   Rž   R¤   R¨   R©   R«   R®   R´   R¶   R·   R¸   R¹   Rº   R½   R¾   R¿   RÒ   RÔ   RÕ   RÖ   R×   RÚ   RÝ   Rà   (    (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR   $   sf   							_																								
								t   MGGLWidgetSimplec           B   sÎ   e  Z i  d  „ Z d d „ Z d d d „ Z d d d „ Z d d „ Z d d d „ Z d d	 „ Z	 d
 „  Z
 d d d d „ Z d d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   d  S(   N(    (   R   t   bindings(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setMouseBindingsj  s    iÿ   c         C   sx   t  j | | | | ƒ |  _ |  j ƒ  |  j r; |  j ƒ  n  |  j ƒ  t j ƒ  j	 | d | d | d | d g ƒ d  S(   Ng     ào@(
   R   R:   R;   R   R&   R   R   t   cprimt   RGBRepst   SetBackgroundColour(   R   t   rt   gt   bt   a(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setBackgroundm  s    
	
i    c         C   sH   d } x; |  j  D]/ } | | k r6 |  j  j | ƒ n  | d } q Wd  S(   Ni    i   (   R<   t   pop(   R   t   go_inR§   R}   R<   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   removeDisplayObjectu  s
    c         C   s`   |  j  ƒ  |  j r  |  j ƒ  n  | rR | rR |  j j | ƒ d |  _ |  j ƒ  n  |  j ƒ  d  S(   Ni   (   R   R&   R   R<   RÌ   R'   R   R{   (   R   R<   R§   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   addDisplayObject}  s    
		c         C   s	   d GHd  S(   Ns    rebuildAllDisplayObjects Simple (    (   R   R§   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   rebuildAllDisplayObjects‡  s    c         C   s   d  S(   N(    (   R   R<   R§   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   rebuildDisplayObject‹  s    i   c         C   s+   | d | d | d f } | |  _  d  S(   Ni    i   i   (   R5   (   R   R£   t   glidet   rpos_new(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR¢   Ž  s    c         C   s   d  S(   N(    (   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   DrawInThread’  s    c         C   sŠ   t  j j |  | ƒ t j |  | | | ƒ t  j d d ƒ |  _ g  |  _ t j d d ƒ |  _	 t j d d ƒ |  _
 t j |  j
 ƒ |  _ d  S(   Ni€  ià  t   timesi   i   (   R    t   QObjectRu   R   t   QSizeR   t   _lightsR   t   QFontt	   atom_fontt   fontt   QFontMetricst   fm(   R   Rs   Rt   R    (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRu   •  s    	c         C   s   | |  _  d  S(   N(   R<   (   R   Rö   R§   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   SetGOž  s    c         C   s   |  j  t j | | ƒ ƒ d  S(   N(   R   R    R   (   R   t   wt   h(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR­   ¡  s    c         C   s   d  S(   N(    (   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   paintGL¤  s    c         C   s   d  S(   N(    (   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR   §  s    c         C   s   |  j  r |  j ƒ  n  d  S(   N(   R&   R   (   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR   ª  s    	c         C   s   | |  _  d  S(   N(   R  (   R   t   lights(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt	   setLights¯  s    c         B   s  g  } d } xÉ |  j  D]¾ } i  } | j | e j <| j | e j <| j | e j <i  } | | d <e j	 | j
 d | j
 d ƒ | d <| j
 d | d <d e | ƒ } d | d  Ue | d	 <| j | ƒ | d } q Wx' | d
 k  r| j d  ƒ | d } qÛ W| S(   Ni    R   i   t   posi   t   deptht   GL_LIGHTs   lightID=opengl.R~   i   (   R  t   ambientR²   t
   GL_AMBIENTt   speculart   GL_SPECULARt   diffuset
   GL_DIFFUSER    t   QPointFRß   t   strt   lightIDRÌ   R3   (   R   t   lsR}   t   lR   t   newlt	   lightName(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt	   getLights²  s(    
$
c         C   sé  t  j d d d ƒ } t  j d d d ƒ } t  j d d d ƒ } |  j ƒ  j ƒ  } |  j ƒ  j ƒ  } d | | } |  j d |  j | | j ƒ  |  j | j ƒ  |  j d |  j | | j ƒ  |  j | j ƒ  |  j d |  j | | j	 ƒ  d |  j | j	 ƒ  g } |  j d |  j | | j ƒ  |  j | j ƒ  |  j d |  j | | j ƒ  |  j | j ƒ  |  j d |  j | | j	 ƒ  d |  j | j	 ƒ  g } |  j d |  j | | j ƒ  |  j | j ƒ  |  j d |  j | | j ƒ  |  j | j ƒ  |  j d |  j | | j	 ƒ  d |  j | j	 ƒ  g }	 |  j d |  j | | j ƒ  |  j | j ƒ  |  j d |  j | | j ƒ  |  j | j ƒ  |  j d |  j | | j	 ƒ  d |  j | j	 ƒ  g }
 | | |
 |	 g S(   Ni   i    g      ð?i   g       @(
   R/   R�   R   R   R   R5   R¬   RŽ   R�   R�   (   R   t   xaxist   yaxist   zaxist   win_wt   win_ht   ratiot   trt   tlt   blt   br(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR|   Ì  s    ššššN(   Rá   Râ   Rì   Rô   R3   R÷   Rø   Rù   Rú   R¢   Rý   Ru   R  R­   R
  R   R   R  R  R|   (    (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRê   h  s"   
								t   MGGLWidgetGLc        	   B   sE  e  Z d  „  Z d „  Z e e e e e j d d ƒ d „ Z d d „ Z	 d „  Z
 d „  Z d „  Z d	 „  Z d
 d „ Z e d
 d „ Z e d
 d „ Z e d
 d „ Z d „  Z d „  Z d „  Z d „  Z d d d d d e e 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( „  Z' d) „  Z( d* „  Z) d+ „  Z* d, „  Z+ e e d- „ Z, d. „  Z- d/ „  Z. e e d0 „ Z/ e e d1 „ Z0 d2 „  Z1 d3 d4 „ Z2 d
 d5 „ Z3 d6 „  Z4 d7 „  Z5 d8 „  Z6 d9 „  Z7 d: „  Z8 e d
 d; „ Z9 d< „  Z: RS(=   c         C   s   d  S(   N(    (   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR   ß  s    c         C   s   d  S(   N(    (   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR   ã  s    iX  c         C   sH   t  j |  | | | ƒ d |  _ |  j ƒ  d  |  _ d  |  _ d  |  _ d  S(   Ni    (   R   Ru   t   numberOfLightsOnRÒ   R3   t   shadert   furtherMatrixt   furtherQuat(   R   Rs   Rt   R    R&   t   pbuffer_size(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRu   ç  s    	
		iÿ   c         C   s‰   t  j | | | | ƒ |  _ t j |  j j ƒ  |  j j ƒ  |  j j ƒ  | ƒ |  j ƒ  t	 j
 ƒ  j | d | d | d | d g ƒ d  S(   Ng     ào@(   R   R:   R;   R²   t   glClearColort   redFt   greenFt   blueFR   Rí   Rî   Rï   (   R   Rð   Rñ   Rò   Ró   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRô   ï  s    1
c         C   sÇ  |  j  |  j |  j } } } |  j ƒ  j ƒ  } |  j ƒ  j ƒ  } d | | } |  j d |  j | | j ƒ  |  j | j ƒ  |  j d |  j | | j	 ƒ  |  j | j	 ƒ  |  j d |  j | | j
 ƒ  d |  j | j
 ƒ  g } |  j d |  j | | j ƒ  |  j | j ƒ  |  j d |  j | | j	 ƒ  |  j | j	 ƒ  |  j d |  j | | j
 ƒ  d |  j | j
 ƒ  g } |  j d |  j | | j ƒ  |  j | j ƒ  |  j d |  j | | j	 ƒ  |  j | j	 ƒ  |  j d |  j | | j
 ƒ  d |  j | j
 ƒ  g }	 |  j d |  j | | j ƒ  |  j | j ƒ  |  j d |  j | | j	 ƒ  |  j | j	 ƒ  |  j d |  j | | j
 ƒ  d |  j | j
 ƒ  g }
 | | |
 |	 g S(   Ng      ð?i    i   i   g       @(   R  R  R   R   R   R   R5   R¬   RŽ   R�   R�   (   R   R  R  R   R!  R"  R#  R$  R%  R&  R'  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR|   õ  s    ššššc   	      C   sO  |  j  j ƒ  d |  j  j ƒ  d |  j  j ƒ  d } t j |  j ƒ } | j |  j ƒ |  j	 |  j
 d ƒ } |  j	 |  j
 d ƒ } |  j	 |  j d ƒ } |  j	 |  j d ƒ } |  j	 |  j d ƒ } |  j	 |  j d ƒ } t j | |  j ƒ  j ƒ  |  j ƒ  j ƒ  | |  j |  j | | | | | | |  j
 d j ƒ  |  j
 d j ƒ  |  j d j ƒ  |  j d j ƒ  |  j d j ƒ  |  j d j ƒ  |  j j ƒ  ƒ t j | |  j ƒ  j ƒ  |  j ƒ  j ƒ  | |  j |  j | | | | | | |  j
 d j ƒ  |  j
 d j ƒ  |  j d j ƒ  |  j d j ƒ  |  j d j ƒ  |  j d j ƒ  |  j j ƒ  ƒ d  S(   Ng‰A`åÐ"Ó?gbX9´Èâ?gÉv¾Ÿ/½?i    i   (   R;   R/  R0  R1  R/   R0   R1   R‘   R2   R#   t   tex_image_xt   tex_image_yt   tex_image_zR²   t   DrawAxesR   R   R   R¬   Rj   R  t   descentt   DrawAxesText(	   R   t   yR1   t
   tex_id_x_0t
   tex_id_x_1t
   tex_id_y_0t
   tex_id_y_1t
   tex_id_z_0t
   tex_id_z_1(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR5    s    5¸c   	   
   C   s  |  j  j ƒ  d |  j  j ƒ  d |  j  j ƒ  d } | d k rW t j d d d ƒ n t j d d d ƒ |  j ƒ  j ƒ  } |  j ƒ  j ƒ  } d | | } d | |  j	 d |  j
 d	 } d
 d  l } | j | |  j ƒ \ } } t |  d ƒ r|  j |  j ƒ |  j |  j ƒ n  |  j | d ƒ |  _ |  j | d ƒ |  _ t j | |  j ƒ  j ƒ  |  j ƒ  j ƒ  |  j	 |  j |  j | d j ƒ  | d j ƒ  |  j j ƒ  ƒ	 t j | |  j ƒ  j ƒ  |  j ƒ  j ƒ  |  j	 |  j |  j | d j ƒ  | d j ƒ  |  j j ƒ  ƒ	 d  S(   Ng‰A`åÐ"Ó?gbX9´Èâ?gÉv¾Ÿ/½?g      à?g        g      ð?u   %.1f â„«g       @g      N@iÿÿÿÿt
   dist_tex_0i    i   (   R;   R/  R0  R1  R²   t	   glColor3fR   R   R   R¬   R.   t	   TextLabelt   renderStringToPixmapR  R°   t   deleteTextureR?  t
   dist_tex_1R#   t	   DrawScaleR  R6  t   DrawScaleText(	   R   R8  R!  R"  R#  t   distRA  R4  t   twandh(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRE    s"    5 cc         C   s%   x |  j  D] } | j j ƒ  q
 Wd  S(   N(   R<   Ry   t   reInitializeTextPrims(   R   R<   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRI  $  s    i    c         C   s2   x! |  j  D] } |  j | | ƒ q
 W|  j ƒ  d  S(   N(   R<   Rú   R{   (   R   R§   R<   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRù   (  s    c         C   sÌ   t  } d } xG |  j D]< } | | k rH |  j | |  j | ƒ t } n  | d } q W| r¢ | r¢ | r¢ | j ƒ  r¢ | j j ƒ  | j j d  d d |  j
 ƒ n  | r¾ d |  _ |  j ƒ  n  |  j ƒ  d  S(   Ni    i   (   R%   R<   t	   buildlistR=   RA   t
   IsAnchoredRy   t   draw_solidst
   draw_linesR3   Rr   R'   R   R{   (   R   R<   R§   t   redrawnR}   t   old_go(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRú   .  s    	 	c         C   s™   d } x] |  j  D]Q } | | k rX |  j  j | ƒ |  j j | ƒ } t j | d ƒ n  | d } q W| r‹ |  j  r‹ d |  _ |  j ƒ  n  |  j ƒ  d  S(   Ni    i   (   R<   Rõ   R=   R²   t   glDeleteListsR'   R   R{   (   R   Rö   R§   R}   R<   R~   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR÷   >  s    	c         C   s�   | ra | ra t  j d ƒ } |  j j | ƒ |  j j | ƒ |  j | | ƒ d |  _ |  j ƒ  n  |  j ƒ  \ |  _	 |  _
 |  _ |  j ƒ  d  S(   Ni   (   R²   t
   glGenListsR<   RÌ   R=   RJ  R'   R   t   getaxesR  R  R   R{   (   R   R<   R§   t   listid(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRø   L  s    	c         B   sJ  d } x$ | D] } | j  r | d } q q W| |  _ e j ƒ  } d } e j e j | ƒ xU e | j ƒ  ƒ D]A } d e | ƒ } e	 e | ƒ rn d | d  Ue j
 e ƒ qn qn We j ƒ  e j ƒ  x | D] } | j ƒ  qÎ W|  j r)|  j r)|  j j | ƒ e	 |  d ƒ r)|  j j | ƒ q)n  e j ƒ  |  j ƒ  | |  _ d  S(   Ni    i   R$   R  s   lightID=opengl.t   circleShader(   t   onR)  R²   t   intpt   glGetIntegervt   GL_MAX_LIGHTSt   ranget   valueR  R°   t	   glDisableR  t   glPushMatrixt   glLoadIdentityt   applyRP   R*  t   setNumberOfLightsRT  t   glPopMatrixR   R  (   R   R  t   nont   lightt	   maxLightst   thisNameR}   R  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR  W  s0    		



c   	      C   s-  d d  l  } | j ƒ  } | j d ƒ } | j d ƒ } | j | | ƒ | j | | j | ƒ i  } xY | j | j | j f D]? } | j | | | ƒ | d | d | d | d f | | <q{ Wd  } | j
 ƒ  d k r i  } t j | d | d ƒ | d <| d | d <| | d	 <| | d
 <n  ~ ~ ~ | S(   Niÿÿÿÿi   i    i   i   i   R  R  R~   R   (   R²   RV  t   floataRW  t   glGetLightfvt   GL_POSITIONR  R  R  R3   RZ  R    R  (	   R   R  R²   t   lightOnt   lightPositiont   lightParamsR   t	   parameterRb  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   getOpenGLLightParameterss  s*    *
c         B   s–   d d  l  } | j ƒ  } | j | j | ƒ g  } x^ e | j ƒ  ƒ D]J } d e | ƒ } e | | ƒ rD d | d  U| j |  j	 e
 ƒ ƒ qD qD W| S(   NiÿÿÿÿR  s   lightID=opengl.(   R²   RV  RW  RX  RY  RZ  R  R°   RÌ   Rl  R  (   R   R²   Rc  t   mylightsR}   R  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR  Š  s    c         C   s$  t  j |  j j ƒ  |  j j ƒ  |  j j ƒ  d ƒ t  j t  j ƒ t  j t  j ƒ t	 j
 ƒ  } t  j t  j | ƒ | j ƒ  |  _ ~ t |  _ t |  _ t j ƒ  } | j d ƒ t  j t  j t  j ƒ t  j t  j ƒ t  j t  j ƒ t  j t  j ƒ t  j t  j ƒ t  j t  j t  j  ƒ t  j t  j! t  j  ƒ t  j" t  j t  j# ƒ t  j t  j$ ƒ t  j t  j% ƒ t  j& t  j' t  j( ƒ t  j) ƒ  t  j* t  j+ t  j, ƒ t- j. d ƒ |  _/ t0 j1 d d ƒ |  _2 t0 j1 d d ƒ |  _3 t0 j4 |  j3 ƒ |  _5 t	 j6 d ƒ } t	 j7 d d d ƒ } | | d <t  j8 t  j9 d ƒ t  j: t  j; t  j< t  j= ƒ t  j: t  j; t  j> t  j= ƒ t  j: t  j; t  j? t  j@ ƒ t  j: t  j; t  jA t  j@ ƒ d	 d  lB } | jC d
 |  j3 ƒ \ } } | jC d |  j3 ƒ \ } } | jC d |  j3 ƒ \ }	 } t0 jD jE | d ƒ t0 jD jE | d ƒ f |  _F t0 jD jE | d ƒ t0 jD jE | d ƒ f |  _G t0 jD jE |	 d ƒ t0 jD jE |	 d ƒ f |  _H t |  _I t |  _J tK jL d k rd	 d  lM }
 |
 jN ƒ  |  _J t  jO t  jP ƒ } t  jO t  jQ ƒ } d | k rd | k rtR |  _I qn  d  |  _T d  |  _U d  S(   Ni   i    s   Hello WorldRþ   i   i   g        gš™™™™™¹?iÿÿÿÿt   xR8  t   zt   win32t   Humpert   Chromium(V   R²   R.  R;   R/  R0  R1  t   glEnableClientStatet   GL_VERTEX_ARRAYt   GL_NORMAL_ARRAYR/   RV  RW  t	   GL_STEREORZ  t   stereoAvailableRA   t   drawTextt
   drawImagesRí   t   RenderQualityt   SetRenderQualityt   glLightModelit   GL_LIGHT_MODEL_LOCAL_VIEWERt   GL_TRUER³   t   GL_NORMALIZEt   GL_LIGHTINGt   glShadeModelt	   GL_SMOOTHt   GL_DEPTH_TESTt   glPolygonModet   GL_FRONTt   GL_FILLt   GL_BACKt   glColorMaterialt   GL_AMBIENT_AND_DIFFUSEt   GL_COLOR_MATERIALt   GL_BLENDt   glBlendFunct   GL_SRC_ALPHAt   GL_ONE_MINUS_SRC_ALPHAt   SetupFBOBlendingt   glHintt   GL_FOG_HINTt	   GL_NICESTR    t   QStringt   helloR   R  R  R  R  R  t   CartesianVectorR�   t   glPixelStoreit   GL_UNPACK_ALIGNMENTt   glTexParameterit   GL_TEXTURE_2Dt   GL_TEXTURE_WRAP_St   GL_CLAMPt   GL_TEXTURE_WRAP_Tt   GL_TEXTURE_MAG_FILTERt	   GL_LINEARt   GL_TEXTURE_MIN_FILTERRA  RB  t   QPixmapt	   fromImageR2  R3  R4  t   doMultiTextureBillboardst   multiTextureAvailablet   syst   platformt   glewInfot   check_GL_ARB_multitexturet   glGetStringt	   GL_VENDORt   GL_RENDERERR%   R3   t   circle_tex_idt   circle_tex_id2(   R   t   stereo_availablept   rqt   piccy_verticest   p1RA  R2  RH  R3  R4  R¦  t   vendort   renderer(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   initializeGL–  sn    1		

///				i   i2   i   t	   Helveticag      à?c	      	   C   sÔ   d d  l  }	 d d  l }
 |
 j | | | | | | | | ƒ } |	 j d d d d t t j ƒ  ƒ ƒ } | j } | j ƒ  | j	 | ƒ t
 j
 | ƒ } t j | t j ƒ |  _ t j | t j ƒ |  _ t j | ƒ d  S(   Niÿÿÿÿt   suffixs   .pngt   prefixt   ccp4mg(   t   tempfilet   CircleTexturest   getTextureImaget   NamedTemporaryFileR  t   ost   getpidt   namet   closet   savet
   image_infoR²   t   load_texturet   MIPMAPR«  R¬  t   unlink(   R   R   R   t
   line_widtht   circle_widtht
   fontFamilyt   boldt   italict   fontSizeR¸  R¹  t   imt   ft   fnt   ii(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   loadCircleTexturesà  s    $(	
c         C   s9  |  j  | j | j ƒ |  j | j | j ƒ |  j | j | j ƒ |  j	 | j
 | j ƒ |  j | j | j ƒ |  j | j | j ƒ |  j | j | j ƒ |  j | j | j ƒ |  j | j | j ƒ |  j | j | j ƒ |  j | j | j  | j! ƒ |  j" | j# ƒ  ƒ |  j$ | j% ƒ |  j& | j' ƒ |  j( ƒ  d  S(   N()   t   setShadowShaderRf   Rg   t   setSSAOShaderRd   Re   t   setCircleShaderRb   Rc   t   setCircleShadowShaderR`   Ra   t   setTextBackgroundShaderR^   R_   t   setDepthShaderR\   R]   t   setEdgeDetectShaderRW   RX   t   setNormalShaderRU   RV   t   setTextShaderRS   RT   t	   setShaderRQ   RR   t   setBlurShadersRY   RZ   R[   t   setShaderStatet   getShaderStatet   setShadowStateRl   t   setAmbientOcclusionStateRn   t   calculateShadowExtents(   R   t   otherGLWidget(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   copyShadersí  s    c         C   s   |  j  S(   N(   RP   (   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRÜ  þ  s    c         C   sº   t  | ƒ t k r! | \ } } n  | |  _ |  j rn |  j j |  j ƒ t |  d ƒ rn |  j j |  j ƒ qn n  |  j ƒ  |  j	 ƒ  } } |  j
 | | ƒ |  j t j d ƒ |  | f ƒ d  S(   NRT  t   ShaderStateChanged(   R    t   tupleRP   R*  R_  R)  R°   RT  R   R   R­   R†   R    R‡   (   R   RÓ   RÍ   R  R	  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRÛ    s    		c         C   s   |  j  |  j f S(   N(   RQ   RR   (   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt	   getShader  s    c         C   sJ   y7 d d  l  } | j | | ƒ |  _ | |  _ | |  _ Wn d GHn Xd  S(   Niÿÿÿÿs4   This version of ccp4mg does not have shader support.(   t	   glShaderst
   MGGLShadert   shadowShaderRf   Rg   (   R   RQ   RR   Rå  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRÐ    s    	c         C   sJ   y7 d d  l  } | j | | ƒ |  _ | |  _ | |  _ Wn d GHn Xd  S(   Niÿÿÿÿs4   This version of ccp4mg does not have shader support.(   Rå  Ræ  t
   ssaoShaderRd   Re   (   R   RQ   RR   Rå  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRÑ    s    	c         C   so   y\ d d  l  } | j | | ƒ |  _ |  j j d ƒ } |  j j | d ƒ | |  _ | |  _ Wn d GHn Xd  S(   Niÿÿÿÿt   nCustomClipPlanesi    s4   This version of ccp4mg does not have shader support.(   Rå  Ræ  RT  t   getUniformLocationt	   Uniform1iRb   Rc   (   R   RQ   RR   Rå  t   nCustomClipPlanesLoc(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRÒ  "  s    	c         C   sJ   y7 d d  l  } | j | | ƒ |  _ | |  _ | |  _ Wn d GHn Xd  S(   Niÿÿÿÿs4   This version of ccp4mg does not have shader support.(   Rå  Ræ  t   circleShadowShaderR`   Ra   (   R   RQ   RR   Rå  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRÓ  -  s    	c         C   sJ   y7 d d  l  } | j | | ƒ |  _ | |  _ | |  _ Wn d GHn Xd  S(   Niÿÿÿÿs4   This version of ccp4mg does not have shader support.(   Rå  Ræ  t   textBackgroundShaderR^   R_   (   R   RQ   RR   Rå  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRÔ  6  s    	c         C   sJ   y7 d d  l  } | j | | ƒ |  _ | |  _ | |  _ Wn d GHn Xd  S(   Niÿÿÿÿs4   This version of ccp4mg does not have shader support.(   Rå  Ræ  t   depthShaderR\   R]   (   R   RQ   RR   Rå  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRÕ  ?  s    	c         C   s¨   y• d d  l  } | j | | ƒ |  _ |  j j ƒ  |  j j ƒ  d d  l  } | j | | ƒ |  _ |  j j ƒ  |  j j ƒ  | |  _ | |  _ | |  _ Wn d GHn Xd  S(   Niÿÿÿÿs4   This version of ccp4mg does not have shader support.(	   Rå  Ræ  t   blurXShadert   setSamplerUniformst   turnOfft   blurYShaderRY   RZ   R[   (   R   RQ   RZ   R[   Rå  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRÚ  H  s    		c         C   sd   yQ d d  l  } | j | | ƒ |  _ |  j j ƒ  |  j j ƒ  | |  _ | |  _ Wn d GHn Xd  S(   Niÿÿÿÿs4   This version of ccp4mg does not have shader support.(   Rå  Ræ  t   edgeDetectShaderRñ  Rò  RW   RX   (   R   RQ   RR   Rå  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRÖ  X  s    	c         C   sd   yQ d d  l  } | j | | ƒ |  _ |  j j ƒ  |  j j ƒ  | |  _ | |  _ Wn d GHn Xd  S(   Niÿÿÿÿs4   This version of ccp4mg does not have shader support.(   Rå  Ræ  t   normalAsColourShaderRñ  Rò  RU   RV   (   R   RQ   RR   Rå  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR×  c  s    	c         C   sd   yQ d d  l  } | j | | ƒ |  _ |  j j ƒ  |  j j ƒ  | |  _ | |  _ Wn d GHn Xd  S(   Niÿÿÿÿs4   This version of ccp4mg does not have shader support.(   Rå  Ræ  t
   textShaderRñ  Rò  RS   RT   (   R   RQ   RR   Rå  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRØ  n  s    	c         C   sd   yQ d d  l  } | j | | ƒ |  _ |  j j ƒ  |  j j ƒ  | |  _ | |  _ Wn d GHn Xd  S(   Niÿÿÿÿs4   This version of ccp4mg does not have shader support.(   Rå  Ræ  R*  Rñ  Rò  RQ   RR   (   R   RQ   RR   Rå  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRÙ  y  s    	c         C   s   | |  _  d  S(   N(   Rq   (   R   t   planes(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setCustomClipPlanes„  s    c      	   C   s¶  t  j t  j ƒ t  j t  j ƒ |  j rt t  j t  j ƒ t  j t  j t  j d d d |  j |  j	 d d ƒ ƒ n  |  j sç t  j t  j t  j d d d |  j |  j	 d ƒ ƒ t  j t  j t  j d d d |  j |  j	 d ƒ ƒ n  g  } x\ |  j
 D]Q } t | d ƒ r÷ | j d ƒ r÷ | d r÷ | j d ƒ r÷ | j | d ƒ q÷ q÷ Wt j d d d ƒ } d } t  j t  j ƒ t  j t  j ƒ t  j t  j ƒ t  j t  j ƒ x�t t | ƒ ƒ D]‰} | | } t j | d | d | d	 ƒ } t | j ƒ  ƒ d
 k  rPn  | j ƒ  t  j t  j | d	 ƒ t  j t  j | d	 t  j | j ƒ  | j ƒ  | j ƒ  | d ƒ ƒ |  j r9t |  d ƒ r9t |  j d ƒ r9t j t j j  | | ƒ ƒ } d t! |  j" ƒ }	 t j# | ƒ |  j$ |  j% d | d |	 }
 t  j& | j ƒ  | j ƒ  | j ƒ  |
 ƒ } |  j j' | d	 | ƒ n  | d } qºW|  j rŠt |  j d ƒ rŠ|  j j( d ƒ } |  j j) | | ƒ n  |  j r²|  j* r²d t! |  j" ƒ }	 t  j& d d d |  j$ |  j% d |	 |  j |  j	 d ƒ } t  j& d d d |  j$ |  j% d |	 |  j |  j	 d ƒ } |  j* j+ | | ƒ t |  d ƒ r•|  j j+ | | ƒ |  j j, ƒ  |  j j( d ƒ } |  j j) | |  j- ƒ n  t  j. | ƒ t  j. | ƒ n  d  S(   Ni    iÿÿÿÿg       @g      à?i   R	   t   visiblet   planei   gñhãˆµøä>i   RT  Rê  g      N@Ré  t   clipCap(/   R²   R³   t   GL_CLIP_PLANE0t   GL_CLIP_PLANE1Rm   R[  t   glClipPlanet   newdv4RG   RF   Rq   R°   R	   RÌ   R/   R�   t   GL_CLIP_PLANE2t   GL_CLIP_PLANE3t   GL_CLIP_PLANE4t   GL_CLIP_PLANE5RY  t   lent   abst   lengtht	   normalizeRŽ   R�   R�   RP   RT  t   matht   acost
   DotProductt   floatR.   t   cosRD   RE   t   newfv4t   setClipPlaneRê  Rë  R*  t   setClipPlanesRò  RK   t   delcGLfp(   R   Rq   t   plRo  t   nplanest   iPlanet   thePlanet   myvect   anglet   glslMultRó   t	   otherClipRì  t   nearClipt   farClipt
   clipCapLoc(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setup_clipping‡  s`    	;	377
!
C*-+<=c         C   sž  |  j  |  _ |  j |  _ d |  j |  j } | d |  j |  j } | d |  j |  j } | | k ru | d } n  t j t j	 ƒ t
 |  d ƒ rò |  j d  k rò t j |  j j ƒ  d |  j j ƒ  d |  j j ƒ  d |  j j ƒ  d ƒ } nL t j |  j j ƒ  d |  j j ƒ  d |  j j ƒ  d |  j j ƒ  d ƒ } t j t j t j ƒ t j t j | ƒ t j t j | ƒ t j t j | ƒ t j | ƒ d  S(   Ng      à?g      N@gš™™™™™¹?t	   fogcolourg     ào@(   RD   t	   FOG_STARTRE   t   FOG_ENDRL   R.   RM   R²   R³   t   GL_FOGR°   R  R3   R  R   R€   R�   t   alphaR;   t   glFogit   GL_FOG_MODERž  t   glFogfvt   GL_FOG_COLORt   glFogft   GL_FOG_STARTt
   GL_FOG_ENDR  (   R   RG  RL   RM   R  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt	   setup_fogÁ  s      OLc         C   s'  d d  l  } t j d d ƒ } t | ƒ d k  r4 d  Sd } d d d g } d d d g } x(| D] } | j d | ƒ } | d	 d	 k r_ | d d	 k r_ d d  l } | d }	 | j d ƒ }
 |
 j | j | j	 j
 |	 ƒ ƒ ƒ } | d	 | d | d
 f | d | d | d f } } | d	 | d	 d | d | d d | d
 | d
 d f } t t | d	 | d	 ƒ t | d | d ƒ t | d
 | d
 ƒ ƒ } | d	 | d	 k  rÃ| d	 | d	 <n  | d | d k  rè| d | d <n  | d
 | d
 k  r| d
 | d
 <n  | d	 | d	 k r2| d	 | d	 <n  | d | d k rW| d | d <n  | d
 | d
 k r| d
 | d
 <qq_ q_ W| d	 | d	 d | d | d d | d
 | d
 d f } t t | d	 | d	 ƒ t | d | d ƒ t | d
 | d
 ƒ ƒ } | d |  _ | |  _ d  S(   Niÿÿÿÿt   object_typet   MolDatai   t   allgH¯¼šò×z>g    ÐcAt   commandi    i   i   i   i   g       @i
   (   t   mmdb2t   global_definitionst   get_dataobjR  t   parse_selectionR/   RÇ   t   frompointert   realtype_to_doublet   molHndt   Extentt   maxR  Ri   Rh   (   R   t   mmdbt   dobjt	   selectiont
   total_maxet
   total_mineRy   t   rvR/   t   selHndt   tmpt   rtdet   minet   maxet   midet   theSizet
   total_midet   theTotalSize(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRß  Õ  sB      
$7?H      BHc         C   sý   t  j t  j ƒ t  j ƒ  |  j d k sT |  j d k  sT |  j |  j d k  sT d rk d |  j |  j } n d } |  j r« t  j d d |  j d ƒ t  j	 d d d ƒ nN t  j d d | ƒ t  j	 d t
 |  j ƒ d t
 |  j ƒ d t
 |  j ƒ ƒ d  S(   Ni<   i   g      à?i    g       @g      N@(   R²   t   glMatrixModet   GL_MODELVIEWR]  RD   RE   Rm   t   glTranslatefRi   t   glScalefR  R.   (   R   RG  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setupModelviewCoreô  s    
:	c   	   	   C   sÏ  |  j  ƒ  |  j r  |  j ƒ  n"t |  d ƒ r� |  j d  k r� t j |  j j ƒ  d |  j j	 ƒ  d |  j j
 ƒ  d |  j j ƒ  d ƒ } nL t j |  j j ƒ  d |  j j	 ƒ  d |  j j
 ƒ  d |  j j ƒ  d ƒ } t j t j | ƒ t j t j ƒ t j t j t j ƒ t j t j |  j ƒ t j t j |  j d ƒ |  j rX|  j ƒ  nct j t j ƒ t j t j ƒ t j t j ƒ t j t j ƒ t j t j ƒ t j t j ƒ d t  |  j! ƒ } |  j" r|  j# j$ t j d d d |  j% |  j d | d ƒ t j d d d	 |  j% |  j d | d
 ƒ ƒ t |  d ƒ r®|  j& j$ t j d d d |  j% |  j d | d ƒ t j d d d	 |  j% |  j d | d
 ƒ ƒ n  |  j' j$ t j d d d |  j% |  j d | d ƒ t j d d d	 |  j% |  j d | d
 ƒ ƒ n¦ t j d d d |  j ƒ } t j d d d	 |  j% ƒ } t |  d ƒ r¡t |  j& d ƒ r¡t |  j& d ƒ r¡|  j& j$ | | ƒ |  j& j( ƒ  n  t j) | ƒ t j) | ƒ t* j+ |  j, ƒ } | j- |  j. ƒ |  j/ rùt j0 |  j/ ƒ n  | rt j0 | ƒ n  | r%| j- | ƒ n  | j1 ƒ  j2 ƒ  } t j0 | ƒ |  j3 ƒ  \ |  _4 |  _5 |  _6 |  j" r–t j7 |  j8 d |  j8 d |  j8 d ƒ n( t j7 |  j9 d |  j9 d |  j9 d ƒ t j: | ƒ d  S(   NR  g     ào@g      ð?g      N@i    i   g       @g     @@iÿÿÿÿg     @ÀRT  R  Rò  i   (;   RJ  RI   R)  R°   R  R3   R²   R  R   R€   R�   R!  R;   R$  R%  R[  R   R"  R#  Rž  R&  R'  RE   R(  RJ   R  Rü  Rý  R   R  R  R  R  R.   Rm   R*  R  RD   RT  Rç  Rò  R  R/   R0   R1   R‘   R2   R4   t   glMultMatrixdRŒ   t   to_dpRR  R  R  R   t   glTranslatedRh   R5   t   delcdp(	   R   R,  R+  R  R  R  R  R1   t   glrotmat(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   setupModelview  s^    
	OL		dgg3		+(c         C   s   d  S(   N(    (   R   t   message(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   showMessageA  s    c         C   s9   t  j t  j t  j Bƒ |  j ƒ  |  j ƒ  t  j ƒ  d  S(   N(   R²   t   glCleart   GL_COLOR_BUFFER_BITt   GL_DEPTH_BUFFER_BITRP  t   paintGLMaint   glFlush(   R   (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR
  D  s    

c         C   s!  t  } d } x|  j D]} |  j | j j d k r|  j | j j ƒ  d k r|  j | j j ƒ  | k rt j t j	 ƒ t
 |  j | d ƒ r…|  j r…t
 |  j | j d ƒ r…t |  j | j j ƒ r…t  } |  j | j j ƒ  r7| r7t
 |  j | j d ƒ r<t |  j | j j ƒ r<|  j | j j ƒ  } n  | rht j t j	 ƒ t j t j d ƒ n# t j t j ƒ t j t j d ƒ t
 |  j | j d ƒ rãt |  j | j j ƒ rã|  j | j j ƒ  } | d k r/t j ƒ  j | ƒ } t j | d | d | d	 d ƒ }	 | s0|  j r¬|  j r¬|  j rd|  j rd|  j j t | ƒ t  ƒ t  } n  t j t j t j  ƒ t j t j t j! ƒ t j" t j t j! |	 ƒ ns |  j rà|  j rà|  j j t | ƒ t  ƒ t  } n  t j t j t j# ƒ t j t j t j  ƒ t j$ t j% |	 ƒ t j& |	 ƒ nJ |  j rc|  j rc|  j j t | ƒ t' ƒ t' } n  t j t j( t j! ƒ | sã|  j r°|  j | j j ƒ  r°t j) | ƒ n  |  j | j j ƒ  rà|  j | j j* ƒ  qàqãn  | s7t j t j ƒ t j d
 d
 d
 d ƒ }
 t j$ t j% |
 ƒ t j& |
 ƒ q7n  | s‚t j t j t j  ƒ t j t j t j! ƒ t j t j d ƒ q‚q…n  |  j r³|  j r³| r³|  j j t' | ƒ n  |  j r:|  j | j j ƒ  r:|  j | j j* ƒ  |  j | j j+ d  d d |  j- ƒ |  j. r:|  j r:| r:t j t j/ ƒ q:n  t j0 d ƒ | sd|  j | j j1 ƒ  n  |  j | j j2 ƒ  r€|  j | j j3 ƒ  } t4 j5 |  j | j j6 ƒ } xÑt7 | ƒ D]À} |  j | j j8 | ƒ } t j9 ƒ  | | j: ƒ  j; ƒ  } t j< | ƒ t j= | ƒ |  j | j j> ƒ  r™| t? |  j@ ƒ k  rm| r–|  j | j j* |  j@ | d d ƒ q–q¶| r¶|  j | j j* |  jA d d ƒ q¶n | r¶|  j | j j* ƒ  n  |  j | j j> ƒ  rC| t? |  j@ ƒ k  r| s@|  j | j j+ |  j@ | d d ƒ q@qo| so|  j | j j+ |  jA d d |  j- ƒ qon, | so|  j | j j+ d  d d |  j- ƒ n  t jB ƒ  q¹Wn  |  j | j j ƒ  r|  j | j j2 ƒ  s½|  j | jC r| rÚ|  j | j j* ƒ  n  | s	|  j | j j+ d  d d |  j- ƒ q	qqn  | d } q Wd  S(   Ni    g®Gáz®ï?t   uit   isDoubleSidedt   insideShinyi   t   insideColourRÃ   i   gš™™™™™É?g       @(D   R%   R=   R<   Ry   Rù  Rœ   RK  R²   R³   t   GL_CULL_FACER°   Rm   RX  R±   RY  RZ  R[  R|  t   GL_LIGHT_MODEL_TWO_SIDEt
   glCullFaceR…  R[  Rí   Rî   t	   GetColourR  RP   R*  t   setBackSurfaceLightPropertiest   boolRˆ  R‡  t   GL_NONER‰  t   glMaterialfvR  t   glLightModelfvt   GL_LIGHT_MODEL_AMBIENTt   delGLfpRA   t   GL_FRONT_AND_BACKt
   glCallListRL  RM  R3   Rr   Rl   R™  t   glLineWidtht   DrawUnitCellRz   t   GetNumSymmetryMatricesR/   t   MatrixVectort   symm_matRY  t   GetSymmetryMatrixNumberR\  t	   TransposeRL  RK  RN  t   GetDrawSymmetryColouredR  RÉ   RÈ   R`  t   doCentralSymmetry(   R   t   solidst   anchoredt   defaultColourR}   R~   t   shinyt
   inside_colt   colvt	   insColourt	   ambColourt   nsymRm  t   isymt   colindexRO  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt
   drawOpaqueJ  sÀ    Q 222$			! !# 
 * &  * , &'  /c      	   C   sá  t  j |  j ƒ } d } xÂ|  j D]·} |  j | j j d k rÏ|  j | j j ƒ  d k  rÏ|  j | j j ƒ  | k rÏ|  j	 s• t
 j t
 j ƒ n  t |  j | d ƒ r¿|  j	 r¿t |  j | j d ƒ r¿t |  j | j j ƒ r¿|  j | j j ƒ  r¼| r¼t
 j t
 j ƒ t
 j t
 j d ƒ t |  j | j d ƒ r¹t |  j | j j ƒ r¹|  j | j j ƒ  } | d k rt j ƒ  j | ƒ } t
 j | d | d | d |  j | j j ƒ  ƒ } t
 j t
 j t
 j ƒ t
 j t
 j t
 j ƒ t
 j t
 j t
 j | ƒ t
 j | ƒ n t
 j t
 j  t
 j ƒ |  j! r¶|  j" r¶t# }	 t |  j | j d	 ƒ r‘t |  j | j j$ ƒ r‘|  j | j j$ ƒ  }	 n  |  j" j% t& |	 ƒ | d k ƒ q¶q¹q¼q¿n  |  j	 rð|  j | j j ƒ  rðt
 j' | ƒ n  t
 j t
 j t
 j ƒ t
 j t
 j t
 j ƒ t
 j t
 j d ƒ | sL|  j | j j( ƒ  n  |  j | j j) ƒ  r±|  j | j j* ƒ  }
 t  j+ |  j | j j, ƒ } xt- |
 ƒ D]	} |  j | j j. | ƒ } t
 j/ ƒ  | | j0 ƒ  j1 ƒ  } t
 j2 | ƒ t
 j3 | ƒ |  j! rFt |  d
 ƒ rFt |  j" d ƒ rFt |  j" j4 ƒ rF|  j" j4 ƒ  n  | rc|  j | j j5 ƒ  n  t |  d
 ƒ r¦t |  j" d ƒ r¦t |  j" j6 ƒ r¦|  j" j6 ƒ  n  |  j | j j7 | |  j8 |  j9 d |  j9 d |  j9 d ƒ |  j | j j: ƒ  rt| t; |  j< ƒ k  rB| sq|  j | j j= |  j< | d d |  j> ƒ qqq | s |  j | j j= |  j? d d |  j> ƒ q n, | s |  j | j j= d  d d |  j> ƒ n  t
 jA ƒ  q¡Wn  |  j | j j ƒ  rÏ|  j! rt |  d
 ƒ rt |  j" d ƒ rt |  j" j4 ƒ r|  j" j4 ƒ  n  |  j | j j) ƒ  s:|  j | jB rÌ| rW|  j | j j5 ƒ  n  t |  d
 ƒ ršt |  j" d ƒ ršt |  j" j6 ƒ rš|  j" j6 ƒ  n  | sÉ|  j | j j= d  d d |  j> ƒ qÉqÌqÏn  | d } q" Wd  S(   Ni    g®Gáz®ï?RX  RY  i   R[  RÃ   i   RZ  R*  t   turnOnRò  (C   R/   R0   R1   R=   R<   Ry   Rù  Rœ   RK  Rm   R²   R^  R‡  R°   RX  R±   RY  R[  R\  R|  R]  R[  Rí   Rî   R_  R  Rˆ  Rb  R…  R‰  Rc  Rf  Rg  RP   R*  R%   RZ  R`  Ra  Rh  Rj  Rz   Rk  Rl  Rm  RY  Rn  R\  Ro  RL  RK  RN  R~  RL  Rò  t   draw_billboardsR.   R5   Rp  R  RÉ   RM  Rr   RÈ   R3   R`  Rq  (   R   Rr  Rs  R1   R}   R~   Rv  Rw  Rx  Ru  Rz  Rm  R{  R|  RO  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   drawTransparent´  sŠ    Q	 2242.!  
< 3 ; 0 , &<' 3  /c         C   s‘	  t  j ƒ  } x} |  j D]r } | j j r | j j ƒ  } t  j t | ƒ ƒ } | | t | ƒ *| | t | ƒ t | ƒ t | ƒ +| } q q Wt |  d ƒ r>	|  j r;|  j	 r;d t
 |  j ƒ } t j t j ƒ t j t j ƒ t j d ƒ } t j t j | ƒ t j d ƒ } t j t j | ƒ t j ƒ  |  j ƒ  t j t
 |  j ƒ d t
 |  j ƒ d t
 |  j ƒ d ƒ | d d d t
 |  j ƒ | d <| d d d t
 |  j ƒ | d <t j t j | ƒ t j t j | ƒ t j d ƒ }	 t j t j ƒ t j t j ƒ t j t j ƒ t j t j ƒ t j ƒ  n  |  j rQ|  j ƒ  n"t |  d ƒ r¾|  j d  k r¾t j  |  j j! ƒ  d |  j j" ƒ  d |  j j# ƒ  d |  j j$ ƒ  d ƒ }
 nL t j  |  j% j! ƒ  d |  j% j" ƒ  d |  j% j# ƒ  d |  j% j$ ƒ  d ƒ }
 t j& t j' |
 ƒ t j t j( ƒ t j) t j* t j+ ƒ t j, t j- |  j. ƒ t j, t j/ |  j. d	 ƒ | j0 ƒ  t1 j2 d
 d d ƒ } | j0 ƒ  t1 j2 d d
 d ƒ } |  j	 sÃ|  j3 rÖ|  j4 j5 d
 ƒ n  |  j	 r;|  j3 r;|  j4 j5 |  j6 ƒ |  j4 j7 ƒ  |  j4 j8 d ƒ } |  j4 j8 d ƒ } |  j4 j8 d ƒ } |  j4 j9 | | j: ƒ  ƒ |  j4 j9 | | j; ƒ  ƒ |  j4 j9 | | j< ƒ  ƒ |  j4 j8 d ƒ } |  j4 j8 d ƒ } |  j4 j8 d ƒ } |  j4 j9 | | j: ƒ  ƒ |  j4 j9 | | j; ƒ  ƒ |  j4 j9 | | j< ƒ  ƒ |  j4 j8 d ƒ } |  j4 j9 | d |  j ƒ nW|  j	 r’t j= t j> ƒ |  j? j7 ƒ  |  j? j8 d ƒ } |  j? j8 d ƒ } |  j? j8 d ƒ } |  j? j9 | | j: ƒ  ƒ |  j? j9 | | j; ƒ  ƒ |  j? j9 | | j< ƒ  ƒ |  j? j8 d ƒ } |  j? j8 d ƒ } |  j? j8 d ƒ } |  j? j9 | | j: ƒ  ƒ |  j? j9 | | j; ƒ  ƒ |  j? j9 | | j< ƒ  ƒ |  j? j8 d ƒ } |  j? j9 | d |  j ƒ n  x©|  j D]›} | j j rœ| j j@ ƒ  g  } | j jA ƒ  r7	| j jB ƒ  } t1 jC | j jD ƒ } x=tE | ƒ D],} t j ƒ  | | jF ƒ  jG ƒ  } t jH | ƒ t jI | ƒ t1 jJ | ƒ } t1 jJ | | ƒ } t1 jJ ƒ  } | jK | ƒ | jK | ƒ | j0 ƒ  t1 j2 d
 d d ƒ } | j0 ƒ  t1 j2 d d
 d ƒ } |  j	 rt|  j3 rt|  j4 j9 | | j: ƒ  ƒ |  j4 j9 | | j; ƒ  ƒ |  j4 j9 | | j< ƒ  ƒ |  j4 j9 | | j: ƒ  ƒ |  j4 j9 | | j; ƒ  ƒ |  j4 j9 | | j< ƒ  ƒ n¢ |  j	 r	|  j? j9 | | j: ƒ  ƒ |  j? j9 | | j; ƒ  ƒ |  j? j9 | | j< ƒ  ƒ |  j? j9 | | j: ƒ  ƒ |  j? j9 | | j; ƒ  ƒ |  j? j9 | | j< ƒ  ƒ n  | j j@ ƒ  t j ƒ  qWq7	qœqœWn  t |  d ƒ r�	|  j	 rq	|  j3 rq	|  j4 jL ƒ  q�	|  j	 r�	|  j? jL ƒ  q�	n  d  S(   NRT  g      N@i   i   g     (@g     h@R  g     ào@g      ð?i   i    t   upXt   upYt   upZt   rightXt   rightYt   rightZt   scaling(M   Rí   t   BillboardPrimitivePointerVectorR<   Ry   Rù  t   GetImposterPrimitivesR  R°   RJ   Rm   R  R.   R²   R³   Rü  Rý  RÇ   t   glGetClipPlaneR\  RJ  RI  Rþ  R[  R   R  R  R  R`  RI   R)  R  R3   R  R   R€   R�   R!  R;   R$  R%  R   R"  R#  Rž  R&  R'  RE   R(  RŒ   R/   R�   Ro   RT  R_  R)  R~  Rê  t	   Uniform1fRŽ   R�   R�   R^  R‡  Rí  t   draw_impostersRz   Rk  Rl  Rm  RY  Ro  RL  RK  RN  R0   R‘   Rò  (   R   R1   t   prims2R<   t   pst   primsnewR  R  R  R  R  t   rightt   upR�  R‚  Rƒ  R„  R…  R†  R‡  Rm  Rz  R{  RO  t   qorigt   qsymt   q(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   drawSphereBillboardsû  sì    #

:##	OL	
		i   c   "   
   C   sñ  t  j t  j t  j ƒ t  j t  j t  j ƒ t  j t  j ƒ t  j t  j	 t  j
 ƒ t  j ƒ  t  j t  j ƒ t  j t  j ƒ t  j t  j ƒ t  j t  j ƒ d } |  j ƒ  rH|  j ƒ  d k rH|  j ƒ  } d d  l } | j ƒ  } x! |  j D] } | j | j ƒ qî Wt j ƒ  } |  j d k r5d } d |  _ n d } t |  j ƒ t |  j ƒ k r•g  |  _ d } x­ |  j D] }	 |  j j |	 j j ƒ qrWnƒ d }
 x> |  j D]3 }	 |  j |
 |	 j j k rÎd } Pn  |
 d }
 q¥W| rg  |  _ x* |  j D] }	 |  j j |	 j j ƒ qõWn  t |  j  ƒ t |  j ƒ k rug  |  _  d } xÅ |  j D] }	 |  j  j |	 j j! ƒ  ƒ qOWn˜ d }
 xP |  j D]E }	 |	 j j rÀ|  j  |
 |	 j j! ƒ  k rÀd } PqÀn  |
 d }
 q…W| rg  |  _  x- |  j D] }	 |  j  j |	 j j! ƒ  ƒ qçWn  t j" | d d d | | t# t$ | ƒ ƒ t  j t  j% ƒ n| r�t  j t  j	 t  j
 ƒ t  j ƒ  t  j& t  j' ƒ n t  j t  j' ƒ t  j t  j	 t  j
 ƒ t  j ƒ  t  j& t  j' ƒ t  j& t  j( ƒ |  j) sít  j* t  j ƒ n  t+ j, |  j- ƒ } t+ j, |  j. ƒ } | j/ | ƒ |  j0 ƒ  |  j1 k ri|  j2 t3 t# ƒ |  j4 r�t5 |  d ƒ r�t5 |  j6 d ƒ r�t7 |  j6 j8 ƒ r�|  j6 j8 ƒ  n  |  j9 r»t  j: t  j; ƒ t  j t  j ƒ n  |  j2 t3 ƒ |  j< | ƒ t5 |  d ƒ r|  j= r|  j) r|  j> |  j? |  j@ ƒ qn  |  j= r
g  } x\ |  jA D]Q } t5 | d ƒ r,| jB d ƒ r,| d r,| jB d	 ƒ r,| j | d	 ƒ q,q,Wx† tC t | ƒ ƒ D]o } | | } t+ jD | d | d | d
 ƒ } tE | jF ƒ  ƒ d k  ráPn  t  j& t  jG | d
 ƒ | d } q”Wn  |  j4 rMt5 |  jH d ƒ rM|  jH jI d ƒ } |  jH jJ | | ƒ n  |  j2 t# t# ƒ t5 |  d ƒ r t5 |  j6 d ƒ r t7 |  j6 jK ƒ r |  j6 jK ƒ  n  |  j2 t# ƒ |  jL t3 t# ƒ |  j4 r	t5 |  d ƒ r	t5 |  j6 d ƒ r	t7 |  j6 j8 ƒ r	|  j6 j8 ƒ  n  |  jL t3 ƒ t5 |  d ƒ rYt5 |  j6 d ƒ rYt7 |  j6 jK ƒ rY|  j6 jK ƒ  n  |  jL t# ƒ nä t |  j ƒ d k rMxÌ |  j D]¾ }	 |  j4 rÚt5 |  d ƒ rÚt5 |  j6 d ƒ rÚt7 |  j6 j8 ƒ rÚ|  j6 j8 ƒ  n  |	 j jM ƒ  t5 |  d ƒ r*t5 |  j6 d ƒ r*t7 |  j6 jK ƒ r*|  j6 jK ƒ  n  |	 j jN d  d d |  jP ƒ qˆWn  t# } x? |  j D]4 }	 |	 j j r]|	 j jQ ƒ  d k r‘t3 } Pq‘q]q]W|  j) s§|  jR r«d  St3 r6	t  j& t  j ƒ t  jS t  j d ƒ t  j t  j ƒ |  j9 r6	t  j: t  jT ƒ t  j& t  j ƒ t  jS t  j d ƒ t  j t  j ƒ q6	n  |  j9 r| r|  jU rt  j t  j% ƒ |  jV jW ƒ  d |  jV jX ƒ  d |  jV jY ƒ  d } |  jZ d  k s±	|  j[ d  k r¾	|  j\ ƒ  n  t  j: t  jT ƒ t  j& t  j ƒ t  jS t  j |  jZ ƒ t  j] t  j^ t  j_ t  j` ƒ | d k  rq
t  j: t  ja ƒ t  j& t  j ƒ t  jS t  j |  j[ ƒ t  j] t  j^ t  j_ t  jb ƒ n3 t  j: t  ja ƒ t  jS t  j d ƒ t  j t  j ƒ t jc ƒ  } x} |  j D]r }	 |	 j j rº
|	 j jd ƒ  } t jc t | ƒ ƒ } | | t | ƒ *| | t | ƒ t | ƒ t | ƒ +| } qº
qº
Wt je | | |  jf |  jg d |  jg d |  jg d
 ƒ t  j: t  jT ƒ t  j& t  j ƒ t  jS t  j d ƒ t  j t  j ƒ t  j: t  ja ƒ t  j& t  j ƒ t  jS t  j d ƒ t  j t  j ƒ t  j: t  jT ƒ t  j& t  j ƒ n  t  j t  jh ƒ t  j t  ji ƒ t  j t  jj ƒ t  j t  jk ƒ t  j& t  j% ƒ t  jl d |  jV jW ƒ  d |  jV jX ƒ  d |  jV jY ƒ  d ƒ t  j& t  j' ƒ t  j t  jm t  j
 ƒ t  j& t  j ƒ tn jo d ƒ } | jp d ƒ } | st  j t  jq ƒ n  | jp d ƒ } | rB|  jr rBt  j ƒ  t  j& t  js ƒ n t  j t  js ƒ |  jt t3 k rbt+ j, |  j- ƒ } | j/ |  j. ƒ xÜ|  j D]Î}	 |	 j j d k r�t  jl d |  jV jW ƒ  d |  jV jX ƒ  d |  jV jY ƒ  d ƒ t  ju t  jv d ƒ t  jw t  j t  jx t  jy ƒ t  jw t  j t  jz t  jy ƒ t  jw t  j t  j{ t  j| ƒ t  jw t  j t  j} t  j| ƒ t  j t  j% ƒ t5 |	 d ƒ rï|	 j~ rï|	 j~ j rït5 |	 j~ j d ƒ rï|	 j~ j j€ ƒ  sÍ|	 j~ j� r|  j‚ | | |	 | d | ƒqn |  j‚ | | |	 | d | ƒg  } t5 |	 d ƒ r†|	 j~ r†|	 j~ j r†t5 |	 j~ j d ƒ r†|	 j~ jƒ r†|	 j~ j j„ ƒ  } t+ j… |	 j~ j j† ƒ } q†n  t5 |	 d ƒ r×|	 j r×t5 |	 j d ƒ r×|	 j j„ ƒ  } t+ j… |	 j j† ƒ } n  x�| D]v} t  j‡ ƒ  | jˆ ƒ  j‰ ƒ  } t  jŠ | ƒ t  j‹ | ƒ t+ j, | ƒ } t+ j, | ƒ }  t+ j, ƒ  }! |! j/ |  ƒ |! j/ | ƒ t  jl d |  jV jW ƒ  d |  jV jX ƒ  d |  jV jY ƒ  d ƒ t  ju t  jv d ƒ t  jw t  j t  jx t  jy ƒ t  jw t  j t  jz t  jy ƒ t  jw t  j t  j{ t  j| ƒ t  jw t  j t  j} t  j| ƒ t  j t  j% ƒ |  j‚ |! | |	 | d | ƒt  jŒ ƒ  qÞWq�q�Wn  t5 |  d ƒ r�|  j� jK ƒ  n  t  j t  js ƒ |  jŽ ƒ  |  j� ƒ  |  j� t3 k ríx6 |  j D]( }	 |	 j j d k r¾|	 j j‘ ƒ  q¾q¾Wn  d  S(   Ni    iÿÿÿÿi   R*  R~  RT  R	   Rù  Rú  i   gñhãˆµøä>Rê  Ré  Rò  g‰A`åÐ"Ó?gbX9´Èâ?gÉv¾Ÿ/½?g      à?g      ð?t   miscell_prefst
   depth_textt   fog_textt   symmetry_dependentRk  t   nCustomPlanest   draw_symmetryRö  (’   R²   Rˆ  R‡  Rb  R…  R‰  t   glDepthFunct   GL_LESSRŒ  R�  RŽ  R�  R[  R™  Rs  Rt  Ru  t   GL_COLOR_ARRAYR™   Rž   RR  t   xmapviewt   DisplayobjectVectorR<   RÌ   Ry   Rí   t   DoubleDoubleVectorR'   R  R)   Rù  R*   Rœ   t   DrawSortedTransparentPrimitivesR%   Ra  R€  R³   R‹  R\  Rm   R^  R/   R0   R1   R2   R‘   Rw   R>   R}  RA   RP   R°   R*  R±   R~  R£  t   SetMyTextureUnitt   GL_TEXTURE2R•  RJ   RP  R+  R,  Rq   R	   RY  R�   R  R  Rü  RT  Rê  Rë  Rò  R€  RL  RM  R3   Rr   t   GetNumberOfBillboardPrimitivesRo   t   glBindTexturet   GL_TEXTURE0R¢  R;   R/  R0  R1  R«  R¬  RÏ  t	   glTexEnvft   GL_TEXTURE_ENVt   GL_TEXTURE_ENV_MODEt   GL_MODULATEt   GL_TEXTURE1t   GL_DECALRˆ  t   GetBillboardPrimitivesR  R.   R5   R   R  R  R  t	   glColor4ft   GL_ONER/  t   PMt   gett	   GL_ALWAYSRI   R   Rx  R–  R—  R˜  Rš  R›  Rœ  R�  Rž  RŸ  R™  R›  Rz   Rq  t   drawTheTextt   symmetry_labelsRk  Rl  Rm  R\  Ro  RL  RK  RN  R`  Rö  R5  RE  Ry  t   draw_images("   R   t   smooth_lineR  t   axesRŸ  t   cobjst   obt   vt   rebuiltR<   t   iobR1   R2   Rq   R  R  R  R  Rì  t   needDoMultiTextureBillboardsR8  t   primsRŽ  R�  t   miscoR—  R˜  Rm  Rz  t   matRO  R’  R“  R”  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRV  €  sÚ   
			 	 (

	<		7
!3 <3 <3 #	5#4=
=9"9*
= 

c   	      C   sO  | j  d ƒ } | r²| j  d ƒ } | r¦ | d k rc |  j j ƒ  |  j j ƒ  |  j j ƒ  f } n t j j | j d d ƒ ƒ } t	 j
 | d | d | d d ƒ n  t	 j t	 j ƒ | rä |  j rä t |  d	 ƒ rä |  j j ƒ  n  | j j | |  j |  j d |  j d |  j d |  j ƒ | rL|  j rLt |  d	 ƒ rL|  j j ƒ  n  t	 j t	 j ƒ t	 j
 d
 |  j j ƒ  d
 |  j j ƒ  d
 |  j j ƒ  d ƒ t	 j
 d
 d d d ƒ n  | rà|  j ràt |  d ƒ rà|  j j ƒ  n  | j j | |  j |  j d |  j d |  j d |  j | ƒ | rK|  j rKt |  d ƒ rK|  j j ƒ  n  d  S(   Nt   text_label_backgroundt   text_label_background_colourRÃ   t   _t    i    i   i   Rî  g      ð?Rö  (   R²  R;   R/  R0  R1  Rí   Rî   R_  t   replaceR²   R¯  R[  R™  RP   R°   Rî  R~  Ry   t   draw_text_backgroundR.   R5   RC   Rò  R³   Rö  t	   draw_text(	   R   R1   R˜  R<   RÀ  Rš  t   tlbRÃ  t   bgcol(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR´  ¢  s,    -% : = = c         C   sæ   | d k r d } n  | d k r* d } n  d | | } t  j t  j ƒ t  j ƒ  t  j d d | | ƒ t j d ƒ } t  j t  j | ƒ t  j	 |  j
 | |  j
 | |  j
 |  j
 |  j |  j ƒ t  j t  j ƒ t j ƒ  j ƒ  d  S(   Ni    i   g      ð?i   (   R²   RF  t   GL_PROJECTIONR]  t
   glViewportR/   t   intaRW  t   GL_VIEWPORTt   glOrthoR¬   RD   RE   RG  Rí   t   BillBoardTextt   SetMatrices(   R   R  R	  R#  t   viewport(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR­   ·  s    		
8c         C   s  |  j  | d | d ƒ |  j  | d | d ƒ |  j  | d | d ƒ |  j  | d | d ƒ g } t j ƒ  } | j | d d ƒ | j | d d ƒ | j | d d ƒ | j | d d ƒ | j | d d ƒ | j | d d ƒ | j | d d ƒ | j | d d ƒ | S(   Ni
   i    i   i   i   (   t   getxyzR/   R•  RÌ   (   R   Rn  R8  t   xyzst   xyzbox(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt	   GetXYZBoxÈ  s    b      c      
   C   sp  t  j d ƒ } t  j d ƒ } t  j d ƒ } t  j ƒ  } t  j ƒ  } t  j ƒ  } t j t j | ƒ t j t j | ƒ t j t j	 | ƒ | d | d }	 t j
 | |	 d | | | | | | ƒ	 t  j | j ƒ  | j ƒ  | j ƒ  ƒ }
 t j
 | |	 d | | | | | | ƒ	 t  j | j ƒ  | j ƒ  | j ƒ  ƒ } t  j ƒ  } | j |
 ƒ | j | ƒ ~ ~ ~ ~ ~ ~ | S(   sG   
        Work out world x,y,z at near and far clipping planes.
        i   i   i   i   g        g      ð?(   R/   RÍ  RÇ   t   doublepR²   RW  RÎ  t   glGetDoublevt   GL_PROJECTION_MATRIXt   GL_MODELVIEW_MATRIXt   gluUnProjectR�   RZ  R•  RÌ   (   R   Rn  R8  RÒ  t   mvmatrixt
   projmatrixt   wxt   wyt   wzt   realyt   cart1t   cart2t   cv(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRÓ  Ï  s0    %'%'c         C   sh   |  j  j ƒ  } | t j d d d ƒ } | t j d d d ƒ } | t j d d d ƒ } | | | f S(   s2   
        Return the eyes' x,y and z axes.
        i   i    (   R1   RŒ   R/   R�   (   R   RÁ  t   dumXt   dumYt   dumZ(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRR  î  s
    c         C   sF  |  j  ƒ  t j d ƒ } d | d <| d <| d <| d <t j d d t ƒ t j d d t ƒ t j d d t ƒ t j d d t ƒ t j d d t ƒ t j ƒ  } | j t j d d d ƒ ƒ | j t j d d d ƒ ƒ t j	 | d d d t ƒ t j	 | d d d t ƒ t j	 | d d	 d t ƒ t j	 | d d
 d t ƒ d  S(   Ni   g        i    i   i   i   g      ð?i   i   i    (
   R   R/   RÇ   Rí   t   sphereRA   R•  RÌ   R�   t   draw_cylinder(   R   R‚   t   carts(    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   BuildPrimitiveDisplayListù  s    
 "c         C   s   | |  _  g  |  _ | rq xV |  j  D]H } | r" t j d ƒ } |  j j | ƒ |  j | | ƒ |  j ƒ  q" q" Wn  |  j ƒ  d  S(   Ni   (   R<   R=   R²   RQ  RÌ   RJ  R   R{   (   R   Rö   R§   R<   RS  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR  	  s    		c         C   sü   |  j  ƒ  t j | t j ƒ | rî | j j ƒ  rî |  j r t |  d ƒ r t |  j d ƒ r t	 |  j j
 ƒ r |  j j
 ƒ  n  | j j ƒ  t |  d ƒ rÏ t |  j d ƒ rÏ t	 |  j j ƒ rÏ |  j j ƒ  n  | j j d  d d |  j ƒ n  t j ƒ  d  S(   NR*  R~  Rò  i    (   Rë  R²   t	   glNewListt   GL_COMPILE_AND_EXECUTERy   RK  RP   R°   R*  R±   R~  RL  Rò  RM  R3   Rr   t	   glEndList(   R   R<   RS  (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyRJ    s    
<3 (;   Rá   Râ   R   R   R3   R%   R    R   Ru   Rô   R|   R5  RE  RI  Rù   Rú   R÷   Rø   R  Rl  R  R³  RA   RÏ  Rá  RÜ  RÛ  Rä  RÐ  RÑ  RÒ  RÓ  RÔ  RÕ  RÚ  RÖ  R×  RØ  RÙ  Rø  R  R)  Rß  RJ  RP  RR  R
  R}  R€  R•  RV  R´  R­   RÖ  RÓ  RR  Rë  R  RJ  (    (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyR(  Ý  sj   		$								J!																						:			<		jG	…ÿ #					(   t   __doc__R¤  R¼  R  Rå   RÁ  t   argvRË   t   mgOSMesaR²   t   PyQt4R    R   R   R/   Rí   R/  R   Rÿ   Rê   R(  (    (    (    sA   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/qtgui/MGGLWidgetCore.pyt   <module>   s    ÿ Eu