
    'j*                    z    d dl mZ d dlmZmZmZmZmZ d dlZd dl	m
Z
mZmZ dgZerd dl	mZ  G d d          ZdS )    )annotations)IterableOptionalIteratorTYPE_CHECKINGoverloadN)Vec2UVecMatrix44Shape2d)BoundingBox2dc                      e Zd ZdZd0d1dZed2d            Zed3d
            Zd4dZeZ	d5dZ
d6d7dZd8dZd0d9dZd0d9dZd:d;d Zd4d!Zd<d#Zed=d&            Zed>d(            Zd?d+Zd@d-ZdAd/ZdS )Br   zConstruction tools for 2D shapes.

    A 2D geometry object as list of :class:`Vec2` objects, vertices can be
    moved, rotated and scaled.

    Args:
        vertices: iterable of :class:`Vec2` compatible objects.

    NverticesOptional[Iterable[UVec]]c                b    ddl m} d }|t          j        |          } ||          | _        d S )Nr   NumpyPoints2d)ezdxf.npshapesr   r	   generatenp_vertices)selfr   r   _vec2s       J/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/math/shape.py__init__zShape2d.__init__   sF    000000'+M(++E(=//    return
list[Vec2]c                4    | j                                         S N)r   r   r   s    r   r   zShape2d.vertices"   s    ((***r   r   c                4    | j                                         S )z&Returns the bounding box of the shape.)r   bboxr    s    r   bounding_boxzShape2d.bounding_box&   s     $$&&&r   c                j    |                                  }| j                                        |_        |S r   )	__class__r   clone)r   r&   s     r   copyzShape2d.copy+   s-       ,2244r   vectorr
   Nonec                    t          |          }| j                            t          j        |j        |j        d                     dS )zTranslate shape about `vector`.r   N)r	   r   transform_inplacer   	translatexy)r   r(   offsets      r   r,   zShape2d.translate2   s>    f**8+=fhRS+T+TUUUUUr         ?sxfloatsyc                b    | j                             t          j        ||d                     dS )z4Scale shape about `sx` in x-axis and `sy` in y-axis.   Nr   r+   r   scale)r   r1   r3   s      r   r7   zShape2d.scale7   s-    **8>"b!+D+DEEEEEr   r7   c                b    | j                             t          j        ||d                     dS )z3Scale shape uniform about `scale` in x- and y-axis.r5   Nr6   )r   r7   s     r   scale_uniformzShape2d.scale_uniform;   s-    **8>%+J+JKKKKKr   anglecenterOptional[UVec]c                V    |                      t          j        |          |           dS )z?Rotate shape around rotation `center` about `angle` in degrees.N)
rotate_radmathradians)r   r:   r;   s      r   rotatezShape2d.rotate?   s&    U++V44444r   c                   t          j        |          }|Ut          |          }t          j        |j         |j         d          |z  t          j        |j        |j        d          z  }| j                            |           dS )z?Rotate shape around rotation `center` about `angle` in radians.Nr   )r   z_rotater	   r,   r-   r.   r   r+   )r   r:   r;   mps        r   r>   zShape2d.rotate_radC   s    e$$VA"AC4!#q11$QS!#q112 
 	**1-----r   Fr/   closedboolc                ~    ddl m} |                      || j                                        ||                    S )a  Returns a new offset shape, for more information see also
        :func:`ezdxf.math.offset_vertices_2d` function.

        Args:
            offset: line offset perpendicular to direction of shape segments
                defined by vertices order, offset > ``0`` is 'left' of line
                segment, offset < ``0`` is 'right' of line segment
            closed: ``True`` to handle as closed shape

        r   )offset_vertices_2d)r/   rF   )ezdxf.math.offset2drI   r%   r   r   )r   r/   rF   rI   s       r   r/   zShape2d.offsetO   sW     	;:::::~~ ))++F6  
 
 	
r   c                x    ddl m} |                      || j                                                            S )z!Returns convex hull as new shape.r   )convex_hull_2d)ezdxf.math.construct2drL   r%   r   r   )r   rL   s     r   convex_hullzShape2d.convex_hullb   s?    999999~~nnT-=-F-F-H-HIIJJJr   intc                *    t          | j                  S )zReturns `count` of vertices.)lenr   r    s    r   __len__zShape2d.__len__i   s    4#$$$r   itemr	   c                    d S r    r   rS   s     r   __getitem__zShape2d.__getitem__m   s    .1cr   slicec                    d S r   rU   rV   s     r   rW   zShape2d.__getitem__o   s    69cr   int | sliceVec2 | list[Vec2]c                    | j                                          }t          |t                    rt          ||                   S t          j        ||                   S )z;Get vertex by index `item`, supports ``list`` like slicing.)r   
isinstancerO   r	   list)r   rS   r   s      r   rW   zShape2d.__getitem__q   sP    &2244dC   	0D)***9[.///r   vertexc                2    |                      |f           dS )zoAppend single `vertex`.

        Args:
             vertex: vertex as :class:`Vec2` compatible object

        N)extend)r   r_   s     r   appendzShape2d.appendy   s     	VIr   Iterable[UVec]c                    ddl m} | j                                        t	          j        |          z   } ||          | _        dS )zAppend multiple `vertices`.

        Args:
             vertices: iterable of vertices as :class:`Vec2` compatible objects

        r   r   N)r   r   r   r   r	   r^   )r   r   r   new_verticess       r   ra   zShape2d.extend   sQ     	100000'0022TYx5H5HH(=66r   r   )r   r   )r   r   )r   r   )r   r   )r(   r
   r   r)   )r0   r0   )r1   r2   r3   r2   r   r)   )r7   r2   r   r)   )r:   r2   r;   r<   r   r)   )F)r/   r2   rF   rG   r   r   )r   rO   )rS   rO   r   r	   )rS   rX   r   r   )rS   rZ   r   r[   )r_   r
   r   r)   )r   rc   r   r)   )__name__
__module____qualname____doc__r   propertyr   r#   r'   __copy__r,   r7   r9   rA   r>   r/   rN   rR   r   rW   rb   ra   rU   r   r   r   r      s        0 0 0 0 0 + + + X+ ' ' ' X'   
 HV V V V
F F F F FL L L L5 5 5 5 5
. 
. 
. 
. 
.
 
 
 
 
&K K K K% % % % 111 X1999 X90 0 0 0   
7 
7 
7 
7 
7 
7r   )
__future__r   typingr   r   r   r   r   r?   
ezdxf.mathr	   r
   r   __all__r   r   rU   r   r   <module>rp      s    # " " " " " H H H H H H H H H H H H H H  + + + + + + + + + + + )((((((}7 }7 }7 }7 }7 }7 }7 }7 }7 }7r   