
    'jJ                       d dl mZ d dlmZmZ d dlmZ d dlZd dlm	Z	m
Z
mZ d dlmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZ d d	lm Z  d
dgZ!dMdZ"dNdZ#e	 Z$dOdZ%dOdZ&dPdZ'dQdZ(dRd!Z)dSd"Z*dSd#Z+edMd$            Z,e,-                    e          dTd'            Z.e,-                    e          dUd*            Z/e,-                    e          dVd-            Z0e,-                    e          dWd0            Z1e,-                    e          dXd3            Z2e,-                    e          dYd6            Z3dZd7Z4e,-                    e          d[d9            Z5e,-                    e          d\d<            Z6ed]d=            Z7e7-                    e          d^d?            Z8e7-                    e          d_dB            Z9ed]dC            Z:e:-                    e          d`dF            Z;e:-                    e          dadH            Z<e:-                    e          dbdJ            Z=e:-                    e          dcdL            Z>dS )d    )annotations)IterableSequence)singledispatchN)Z_AXISVec3Vec2)	
DXFGraphicDXFNamespaceCircleArcEllipseSolidInsert
LWPolylinePolyline)
DXFPolygon)PolylinePathEdgePathLineEdgeArcEdgeEllipseEdge
SplineEdge)constuprightupright_allentityr
   returnNonec                "   t          | t                    r!| j        r| j                            d          sdS t          | j        j                                                  }|                    t                    rt          |            dS dS )al  Flips an inverted :ref:`OCS` defined by extrusion vector (0, 0, -1) into
    a :ref:`WCS` aligned :ref:`OCS` defined by extrusion vector (0, 0, 1).
    DXF entities with other extrusion vectors and unsupported DXF entities will
    be silently ignored. For more information about the limitations read the
    documentation of the :mod:`ezdxf.upright` module.

    	extrusionN)
isinstancer
   is_alivedxfhasattrr   r!   	normalizeiscloseFLIPPED_Z_AXIS_flip_dxf_graphic)r   r!   s     G/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/upright.pyr   r   0   s     	6:&&O J{++
 	VZ)**4466I(( "&!!!!!" "    entitiesIterable[DXFGraphic]c                .    | D ]}t          |           dS )z|Call function :func:`upright` for all DXF entities in iterable
    `entities`::

        upright_all(doc.modelspace())

    N)r   )r,   es     r*   r   r   C   s*       



 r+   anglefloatc                    | dk    rdnd| z
  S )N        g     f@g     f r0   s    r*   _flip_deg_angler6   Q   s    c\\EEv66r+   c                F    | dk    rt           j        nt           j         | z
  S )Nr3   )mathpir5   s    r*   _flip_rad_angler:   U   s    ||DGG$'U::r+   vertexr   c                F    t          | j         | j        | j                   S N)r   xyzr;   s    r*   _flip_vertexrB   Y   s    	68fhY///r+   r	   c                8    t          | j         | j                  S r=   )r	   r>   r?   rA   s    r*   _flip_2d_vertexrD   ]   s    	68$$$r+   r$   r   namestrc                    |                      |          r:t          |                     |                    }|                     ||           d S d S r=   )r%   rB   getset)r$   rE   r;   s      r*   _flip_existing_vertexrJ   a   sQ    
{{4 cggdmm,,f r+   c                N    |                      d          r| j         | _        d S d S )N	thickness)r%   rL   r$   s    r*   _flip_thicknessrN   g   s/    
{{; '' 'r+   c                N    |                      d          r| j         | _        d S d S )N	elevation)r%   rP   rM   s    r*   _flip_elevationrQ   l   s/    
{{; '' 'r+   c                    d S r=   r4   )r   s    r*   r)   r)   r   s    Dr+   circler   c                |    | j         }t          |d           t          |           |                    d           d S )Ncenterr!   )r$   rJ   rN   discard)rS   r$   s     r*   _flip_circlerW   w   s?    
*C#x(((CKKr+   arcr   c                    t          |            | j        }|j        }t          |j                  |_        t          |          |_        d S r=   )rW   r$   	end_angler6   start_angle)rX   r$   rZ   s      r*   	_flip_arcr\      sB    
'CI#CO44CM%i00COOOr+   solidr   c                    | j         }t          j        D ]}t          ||           t	          |           |                    d           d S Nr!   )r$   r   VERTEXNAMESrJ   rN   rV   )r]   r$   rE   s      r*   _flip_solidra      sT    
)C! ) )c4((((CKKr+   insertr   c                    | j         }t          |d           |j         |_        |j         |_        |j         |_        |                    d           d S )Nrb   r!   )r$   rJ   rotationxscalezscalerV   )rb   r$   s     r*   _flip_insertrg      sT     *C#x(((L=CL*CJ*CJKKr+   ellipser   c                v    | j         }|j         }|j         |_        ||_        |                    d           d S r_   )r$   	end_paramstart_paramrV   )rh   r$   rj   s      r*   _flip_ellipserl      s?     +CI_$CMCOKKr+   polyliner   c                   g }| j         D ]L\  }}}}}| }t          t          ||                    }|                    |j        |j        |||f           M|                     |d           t          | j                   d S )Nxyseb)format)	lwpointsrD   r	   appendr>   r?   
set_points_finalize_polyliner$   )rm   flipped_pointsr>   r?   start_width	end_widthbulgevs           r*   _flip_lwpolylinerz      s    ,.N/7/@ I I+1k9eDAJJ''qsACiGHHHHw777x|$$$$$r+   c                l    t          |            t          |            |                     d           d S r_   )rN   rQ   rV   rM   s    r*   rt   rt      s6    CCKKr+   r   c                    | j         sd S | j        D ];}|j        }t          |d           |                    d          r|j         |_        <t          | j                   d S )Nlocationrx   )is_2d_polylineverticesr$   rJ   r%   rx   rt   )rm   r;   r$   s      r*   _flip_polyline2dr      sq    " # # #jc:...;;w 	#
CIx|$$$$$r+   polygonr   c                    | j         D ]}t          |           t          | j                   | j                            d           d S r_   )paths_flip_boundary_pathrQ   r$   rV   )r   ps     r*   _flip_polygonr      sP    ]  AGK   K$$$$$r+   c                &    t          d|           )Nzunsupported path type: 	TypeError)paths    r*   r   r          
6d66
7
77r+   r   c                    g }| j         D ]H\  }}}| }t          t          ||                    }|                    |j        |j        |f           I|| _         d S r=   )r   rD   r	   rr   r>   r?   )rm   flipped_verticesr>   r?   rx   ry   s         r*   _flip_polyline_pathr      sl    9;( 3 31eDAJJ''ac5 12222(Hr+   edgesr   c                .    | D ]}t          |           d S r=   )
_flip_edge)r   edges     r*   _flip_edge_pathr      s.       4 r+   c                &    t          d|           )Nzunsupported edge type: r   r   s    r*   r   r      r   r+   r   r   c                j    t          | j                  | _        t          | j                  | _        d S r=   )rD   startendr   s    r*   _flip_line_edger      s(     ,,DJtx((DHHHr+   r   c                    t          | j                  | _        | j        }t          | j                  | _        t          |          | _        | j         | _        d S r=   )rD   rU   rZ   r6   r[   ccw)r   rZ   s     r*   _flip_arc_edger      sK    !$+..DKI$T%566DN&y11D8|DHHHr+   r   c                    t          | j                  | _        t          | j                  | _        t          | j                  | _        t          | j                  | _        | j         | _        d S r=   )rD   rU   
major_axisr6   r[   rZ   r   r   s    r*   _flip_ellipse_edger      sY    !$+..DK%do66DO 't'788D$T^44DN8|DHHHr+   r   c                    t           | j         | j                  | _        | j         | j                  | _        fd| j        D             | _        fd| j        D             | _        d S )Nc                &    g | ]} |          S r4   r4   .0ry   flip_2d_vertexs     r*   
<listcomp>z%_flip_spline_edge.<locals>.<listcomp>  s#    JJJ>>!,,JJJr+   c                &    g | ]} |          S r4   r4   r   s     r*   r   z%_flip_spline_edge.<locals>.<listcomp>  s#    BBBQ~~a((BBBr+   )rD   start_tangentend_tangentcontrol_points
fit_points)r   r   s    @r*   _flip_spline_edger     s    $N%+^D,>??#)>$*:;;JJJJd6IJJJDBBBB$/BBBDOOOr+   )r   r
   r   r   )r,   r-   r   r   )r0   r1   r   r1   )r;   r   r   r   )r;   r	   r   r	   )r$   r   rE   rF   r   r   )r$   r   r   r   )rS   r   r   r   )rX   r   r   r   )r]   r   r   r   )rb   r   r   r   )rh   r   r   r   )rm   r   r   r   )r$   r   )rm   r   r   r   )r   r   r   r   )r   r   )rm   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )?
__future__r   typingr   r   	functoolsr   r8   
ezdxf.mathr   r   r	   ezdxf.entitiesr
   r   r   r   r   r   r   r   r   ezdxf.entities.polygonr   ezdxf.entities.boundary_pathsr   r   r   r   r   r   ezdxf.lldxfr   __all__r   r   r(   r6   r:   rB   rD   rJ   rN   rQ   r)   registerrW   r\   ra   rg   rl   rz   rt   r   r   r   r   r   r   r   r   r   r   r4   r+   r*   <module>r      s-  $ # " " " " " % % % % % % % % $ $ $ $ $ $  ) ) ) ) ) ) ) ) ) )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 . - - - - -                     m
$" " " "&    7 7 7 7; ; ; ;0 0 0 0% % % %   ' ' ' '
' ' ' ' 	 	 	 	 F##   $# C  1 1 1 ! 1 E""   #" F##   $# G$$   %$ J''% % % ('%    H%%% % % &%% J''% % % ('% 8 8 8 8 l++) ) ) ,+) h''   (' 8 8 8 8 X) ) ) )
 W    [!!   "! Z  C C C ! C C Cr+   