;ip jddlmZmZddlZddlmZddlmZddl m Z ddl m Z Gdd e Z dS) )atan2degreesN SRTTransform)QtGui) Transform3D)VectorceZdZdZddZdZdZdZdZdZ d Z d Z d Z dd Z ddZdZdZdZdZdZdZddZdZdS)SRTTransform3Dz4x4 Transform matrix that can always be represented as a combination of 3 matrices: scale * rotate * translate This transform has no shear; angles are always preserved. Nctj|||dS|jtjurt j|}t|tr| |dSt|trut|j dt|j d|j dt|j dd|_ | dSt|t jr|t|j dt|j d|j dtdddd|_ d|j dd <| dSt|tjr||dSt!d t#|) Nposscaleangleaxisrrrrrr?z/Cannot build SRTTransform3D from argument type:)r __init__reset __class__r QTransformr isinstancedict restoreStater r _stateupdate QMatrix4x4 setFromMatrix Exceptiontype)selfinits LC:\PYTHON\MyICR_Workspace\venv\Lib\site-packages\pyqtgraph/SRTTransform3D.pyrzSRTTransform3D.__init__sT""" < F >U- - -,T22D dD ! ! [   d # # # # # n - - [dk%011 G 455W-t{6233 DK KKMMMMM l7 8 8 [dk%011 G 455W-q!Q DK '*DK  # KKMMMMM e. / / [   t $ $ $ $ $MtTXzzZZ Zc6t|jdS)Nrr rr"s r$getScalezSRTTransform3D.getScale0sdk'*+++r%cP|jdt|jdfS)z Return (angle, axis) of rotationrr)rr r(s r$ getRotationzSRTTransform3D.getRotation3s#{7#VDK,?%@%@@@r%c6t|jdS)Nrr'r(s r$getTranslationzSRTTransform3D.getTranslation7sdk%()))r%ctdddtdddddd|_|dS)Nrrrrrrr rrr(s r$rzSRTTransform3D.reset:sC!Aa==Aa]]    r%c^t|}||jd|zdS)z(Adjust the translation of this transformrN)r setTranslater)r"argsts r$ translatezSRTTransform3D.translateCs1 DM $+e,Q./////r%cPt||jd<|dS)z%Set the translation of this transformrNr1r"r4s r$r3zSRTTransform3D.setTranslateHs##T] E r%ct|dkrt|ddr|d}t|dkr|dz}t|}||jd|zdS)z"adjust the scale of this transformrr__len__rrrN)lenhasattrr setScaler)r"r4ss r$rzSRTTransform3D.scaleMss t99>>gd1gy99>7D t99>>$;D DM dk'*Q./////r%ct|dkrt|ddr|d}t|dkr|dz}t||jd<|dS)zSet the scale of this transformrrr:rr;rN)r<r=r rrr8s r$r>zSRTTransform3D.setScaleXse t99>>gd1gy99>7D t99>>$;D%t} G r%r0c|jd}|d|dkrI|d|dkr7|d|dkr%||jd|zdStj}|j|jd|j|jdg|jdR|j|g|R|j|jd||dS) z%Adjust the rotation of this transformrrrrrrrN)r setRotaterrr6rotaterr)r"rrorigAxisms r$rCzSRTTransform3D.rotateas;v& 7hqk ! !d1g!&<&<aHUVKAWAW NN4;w/%7 8 8 8 8 8 ""A AKU+ , , AHT[) @DK,? @ @ @ @ AHU "T " " " " AGT[) * *   q ! ! ! ! !r%cp||jd<t||jd<|dS)z5Set the transformation rotation to angle (in degrees)rrN)rr r)r"rrs r$rBzSRTTransform3D.setRotatens3 % G$Tll F r%c ddl}tdD]+}||||,|dd}|dddf|jd<|ddddfdzddz}tj |dddf|d ddf}tj ||dddfdkr|d xxd zcc<||jd <|ddddf|tj ddfz } |j |\}}nc#td t|ztd t|ztdt|zxYwtjtj|d z dk} t%| d krtdt|ztdt|ztdt| dt|d z t'd|dd| dfj} | | dzdzz} | |jd<|d z dz} tjtj| } gd| \} }||jz | d|z| | zz }t1t3|| |jd<|jddkr d|jd<dSdS)z Set this transform based on the elements of *m* The input matrix must be affine AND have no shear, otherwise the conversion will most likely fail. rNrr)rg?rrzRotation matrix: %sz Scale: %szOriginal matrix: %sgư>zeigenvalues: %szeigenvectors: %szindex: z, z"Could not determine rotation axis.)rrr)))rrrJ))rrr))rrrJg@rr0) numpy.linalgrangesetRowrowmatrixreshapersumnpcrossdotnewaxislinalgeigprintstrargwhereabsr<r realtraceargmaxTrr)r"rEnumpyirzrevalsevecseigIndexrcosaxisIndrIndsignsins r$rzSRTTransform3D.setFromMatrixusN q % %A KK15588 $ $ $ $ KKMM ! !!A & &rr!tW E2A2bqb51!!q!))3. HQq"1"uXqBQBx ( ( 6!Qq"1"uX   " " !HHHNHHH$ G bqb"1"fIbj!!!m, ,  <++A..LE55  '#a&&0 1 1 1 +E * + + + '#a&&0 1 1 1 ;rveAg566 x==1   #c%jj0 1 1 1 $s5zz1 2 2 2 ES]]]]CaLLLA B B B@AA AQQQx}_%* $'3&&" Fwwyy{C)BF4LL)):::7C TudmrDy4=89 'uS#77 G ;w 1 $ $")DK    % $s 0EA F.c*tj|S)zPReturn a QTransform representing the x,y portion of this transform (if possible)rr(s r$as2DzSRTTransform3D.as2Ds(...r%c|jd}|jd}|jd}|d|d|df|d|d|df|jd|d|d|dfdS) Nrrrrrrrr)r)r"pr?axs r$ saveStatezSRTTransform3D.saveStates K  K  [ aD!A$!%dAaD!A$'[)UBqE2a5)    r%ct|dd|jd<|dd}t|ddt |z zz}t||jd<|dd|jd<|d d |jd <|dS) Nr)r/r/r/r)rrr)rrIrr/rr0)r getrtupler<r)r"staters r$rzSRTTransform3D.restoreStates#EIIeZ$@$@AA E ':..e u#e** 55%e}} G$yy"55 G#ii :: F r%ctj|tj|g|jdRtj||jdg|jdRtj|g|jdRdS)Nrrrr)r setToIdentityr6rrCrr(s r$rzSRTTransform3D.updates!$'''d8T[%788884W!5L F8KLLLL$6W!5666666r%cDt|SN)rYrqr(s r$__repr__zSRTTransform3D.__repr__s4>>##$$$r%rIcx|dkr:tj|ddS|dkrftj|dd}|d|d<|dddf|dddf<|ddddfSt d)NrIrHrzArgument 'nd' must be 2 or 3)rRarray copyDataTorPr )r"ndrEs r$rOzSRTTransform3D.matrixs 778DOO--..66q;; ; 1WW**++33Aa88AQ4AaDqqqsVAaaacFRaRU8O:;; ;r%c:t|ffSry)r rqr(s r$ __reduce__zSRTTransform3D.__reduce__s 0 0222r%ry)r0)rI)__name__ __module__ __qualname____doc__rr)r+r-rr6r3rr>rCrBrrmrqrrrzrOrr%r$r r sX[[[[B,,,AAA***000  0 0 0 " " " "7*7*7*r///    777%%% < < < <33333r%r ) mathrrr`rRrQtrr r r rr%r$rs$$$$$$[3[3[3[3[3[[3[3[3[3[3r%