
    e                     b    d Z ddlmZmZ ddlmZ ddlmZm	Z	m
Z
  G d de
j                        Zy)	z
Vector.py -  Extension of QVector3D which adds a few missing methods.
Copyright 2010  Luke Campagnola
Distributed under MIT/X11 license. See license.txt for more information.
    )acosdegrees   )	functions)QT_LIBQtCoreQtGuic                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
Vectorz8Extension of QVector3D which adds a few helpful methods.c                    |}t        |      dk(  rt        |d   t        j                        r;t	        |d   j                               t	        |d   j                               df}ngt        |d   t        j                        st        |d   t        j                        r:t	        |d   j                               t	        |d   j                               df}nt        |d   d      rut        |d   t        j                        sXt        |d         }t        |      dk(  r|j                  d       t        |      dk7  rt!        dt        |d         z        |}not        |d   t        j                        rR|d   j                         |d   j                         |d   j#                         f}nt        |      dk(  r|d   |d   df}t        j                  j$                  | g|  y)a  
        Handle additional constructions of a Vector

        ==============  ================================================================================================
        **Arguments:**
        *args*          Could be any of:

                         * 3 numerics (x, y, and z)
                         * 2 numerics (x, y, and `0` assumed for z)
                         * Either of the previous in a list-like collection
                         * 1 QSizeF (`0` assumed for z)
                         * 1 QPointF (`0` assumed for z)
                         * Any other valid QVector3D init args.
        ==============  ================================================================================================
        r   r   __getitem__      z-Cannot init Vector with sequence of length %dN)len
isinstancer   QSizeFfloatwidthheightQPointQPointFxyhasattrr	   	QVector3Dlistappend	Exceptionz__init__)selfargsinitArgsvalss       2/usr/lib/python3/dist-packages/pyqtgraph/Vector.pyr    zVector.__init__   s     t9>$q'6==1!$q'--/2E$q'..:J4KQODGV]]3z$q'6>>7Z!$q'))+.d1giik0BAFa-0DGU__9]DG}t9>KKNt9>#$SVYZ^_`ZaVb$bccDGU__5799;Q		T!WYY[@Y!^Qa!,H  11    c                      y)Nr    r!   s    r%   __len__zVector.__len__3   s    r&   c                     |dk(  r| j                         S |dk(  r| j                         S |dk(  r| j                         S t        dt	        |      z        Nr   r   r   zPoint has no index %s)r   r   r   
IndexErrorstr)r!   is     r%   r   zVector.__getitem__6   sM    6668O!V668O!V668O4s1v=>>r&   c                     |dk(  r| j                  |      S |dk(  r| j                  |      S |dk(  r| j                  |      S t        dt	        |      z        r,   )setXsetYsetZr-   r.   )r!   r/   r   s      r%   __setitem__zVector.__setitem__@   sV    699Q<!V99Q<!V99Q<4s1v=>>r&   c              #   x   K   | j                          | j                          | j                          y wN)r   r   r   r)   s    r%   __iter__zVector.__iter__J   s'     ffhffhffhs   8:c                     | j                         }|j                         }|dk(  s|dk(  ryt        t        j                  t        j
                  j                  | |      ||z  z  dd            }t        |      S )zBReturns the angle in degrees between this vector and the vector a.g        Ng      g      ?)lengthr   fnclip_scalarr	   r   
dotProductr   )r!   an1n2radss        r%   anglezVector.angleO   sg    [[]XXZ8rRxBNN5??#=#=dA#F"r'#RTXZ]^_ t}r&   c                     t        t        | j                               t        | j                               t        | j	                                     S r6   )r   absr   r   r   r)   s    r%   __abs__zVector.__abs__\   s/    c$&&(mS]CMBBr&   N)__name__
__module____qualname____doc__r    r*   r   r4   r7   rA   rD   r(   r&   r%   r   r      s*    B"2H??
Cr&   r   N)rH   mathr   r    r   r:   Qtr   r   r	   r   r   r(   r&   r%   <module>rL      s,   
   % %QCU__ QCr&   