Ë
    £èhÌ  ã                  óâ   — d dl mZ d dlmZmZmZ d dlZd dlmZ d dlm	Z	 erd dl
mZ ej                  j                  Z G d„ d«      Zd	dd
œ	 	 	 	 	 dd„Zd	dd
œ	 	 	 	 	 dd„Zd	dd
œ	 	 	 	 	 dd„Zy)é    )Úannotations)ÚTYPE_CHECKINGÚIterableÚOptionalN)Údisassemble)ÚBoundingBox)Ú	DXFEntityc                  óR   — e Zd ZdZd
dd„Zedd„«       Zd„ Zdd„Zdd„Z	dd„Z
dd„Zy	)ÚCachezyCaching object for :class:`ezdxf.math.BoundingBox` objects.

    Args:
        uuid: use UUIDs for virtual entities

    c                ó^   — t        «       | _        t        |«      | _        d| _        d| _        y )Nr   )ÚdictÚ_boxesÚboolÚ	_use_uuidÚhitsÚmisses)ÚselfÚuuids     ú*lib/python3.12/site-packages/ezdxf/bbox.pyÚ__init__zCache.__init__   s$   € Ü.2«fˆŒÜ˜d›ˆŒØˆŒ	Øˆ�ó    c                ó,   — t        | j                  «      S ©N)r   r   ©r   s    r   Úhas_datazCache.has_data   s   € ä�D—K‘KÓ Ð r   c                óh   — dt        | j                  «      › d| j                  › d| j                  › d�S )NzCache(n=z, hits=z	, misses=Ú))Úlenr   r   r   r   s    r   Ú__str__zCache.__str__"   s;   € à”s˜4Ÿ;™;Ó'Ð(ð )Ø—I‘I�;ð Ø—k‘k�] !ð%ð	
r   c                óò   — |€J ‚| j                  |«      }|€| xj                  dz  c_        y | j                  j                  |«      }|€| xj                  dz  c_        |S | xj                  dz  c_        |S )Né   )Ú_get_keyr   r   Úgetr   )r   ÚentityÚkeyÚboxs       r   r#   z	Cache.get)   sr   € ØÐ!Ð!Ð!Ø�m‰m˜FÓ#ˆØˆ;Ø�KŠK˜1Ñ�KØØ�k‰k�o‰o˜cÓ"ˆØˆ;Ø�KŠK˜1Ñ�Kð ˆ
ð �IŠI˜‰N�IØˆ
r   c                óR   — |€J ‚| j                  |«      }|€y || j                  |<   y r   )r"   r   )r   r$   r&   r%   s       r   ÚstorezCache.store6   s2   € ØÐ!Ð!Ð!Ø�m‰m˜FÓ#ˆØˆ;ØØˆ�‰�CÒr   c                ój   — |D ]  }	 | j                   | j                  |«      = Œ! y# t        $ r Y Œ.w xY w)a+  Invalidate cache entries for the given DXF `entities`.

        If entities are changed by the user, it is possible to invalidate
        individual entities. Use with care - discarding the whole cache is
        the safer workflow.

        Ignores entities which are not stored in cache.

        N)r   r"   ÚKeyError)r   Úentitiesr$   s      r   Ú
invalidatezCache.invalidate=   s<   € ó ˆFðØ—K‘K §¡¨fÓ 5Ñ6ñ øô ò Ùðús   ‡&¦	2±2c                ó®   — |j                  «       dk(  ry |j                  j                  }|�|dk(  r#| j                  rt	        |j
                  «      S d S |S )NÚHATCHÚ0)ÚdxftypeÚdxfÚhandler   Ústrr   )r   r$   r%   s      r   r"   zCache._get_keyM   sO   € Ø�>‰>Ó˜wÒ&ð
 à�j‰j×ÑˆØˆ;˜# š*Ø'+§~¢~”3�v—{‘{Ó#Ð?¸4Ð?àˆJr   N)F)ÚreturnÚNone)r4   r   )r$   r	   r4   zOptional[BoundingBox])r$   r	   r&   r   r4   r5   )r+   úIterable[DXFEntity]r4   r5   )r$   r	   r4   zOptional[str])Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   r   r#   r(   r,   r"   © r   r   r   r      s9   „ ñôð ò!ó ð!ò
óóóô r   r   F©ÚfastÚcachec             #  ór  K  — t        j                  | «      }t        j                  |«      }|D ]„  }|j                  rŒ|j                  }|�D|j                  |«      }|€C|j                  |¬«      }|j                  r%|j                  ||«       n|j                  |¬«      }|j                  sŒ�|–— Œ† y­w)u±  Yields all bounding boxes for the given `entities` **or** all bounding
    boxes for their sub entities. If an entity (INSERT) has sub entities, only
    the bounding boxes of these sub entities will be yielded, **not** the
    bounding box of the entity (INSERT) itself.

    If argument `fast` is ``True`` the calculation of BÃ©zier curves is based on
    their control points, this may return a slightly larger bounding box.

    N)r>   )	r   Úrecursive_decomposeÚto_primitivesÚis_emptyr$   r#   Úbboxr   r(   )r+   r>   r?   Úflat_entitiesÚ
primitivesÚ	primitiver$   r&   s           r   Úmulti_recursiverH   \   s£   è ø€ ô  ×3Ñ3°HÓ=€MÜ×*Ñ*¨=Ó9€JÛˆ	Ø×ÒØà×!Ñ!ˆØÐØ—)‘)˜FÓ#ˆCØˆ{Ø—n‘n¨$�nÓ/�Ø—<’<Ø—K‘K ¨Õ,à—.‘. d�.Ó+ˆCà�<‹<Ø‹Iñ  ùs   ‚B-B7Â0B7c               ób   — t        «       }t        | ||¬«      D ]  }|j                  |«       Œ |S )uÙ   Returns a single bounding box for all given `entities`.

    If argument `fast` is ``True`` the calculation of BÃ©zier curves is based on
    their control points, this may return a slightly larger bounding box.

    r=   )r   Ú
multi_flatÚextend)r+   r>   r?   Ú_extendsr&   s        r   ÚextentsrM      s/   € ô ‹}€HÜ˜(¨°U×;ˆØ�‰˜Õð <à€Or   c             #  ó¶   ‡‡K  — dˆˆfd„}| D ]G  }d}‰r‰j                  |«      }|€ ||g«      }‰r‰j                  ||«       |j                  sŒD|–— ŒI y­w)uÙ   Yields a bounding box for each of the given `entities`.

    If argument `fast` is ``True`` the calculation of BÃ©zier curves is based on
    their control points, this may return a slightly larger bounding box.

    c                ód   •— t        «       }t        | ‰‰¬«      D ]  }|j                  |«       Œ |S )Nr=   )r   rH   rK   )Ú	entities_rL   Ú_boxr?   r>   s      €€r   Úextends_zmulti_flat.<locals>.extends_ž   s/   ø€ Ü“=ˆÜ# I°DÀ×FˆDØ�O‰O˜DÕ!ð Gàˆr   N)rP   r6   r4   r   )r#   r(   r   )r+   r>   r?   rR   r$   r&   s    ``   r   rJ   rJ   ‘   s\   ùè ø€ öó ˆØˆÙØ—)‘)˜FÓ#ˆCàˆ;Ù˜F˜8Ó$ˆCÙØ—‘˜F CÔ(à�<‹<Ø‹Iñ ùs   „AAÁA)r+   r6   r?   úOptional[Cache]r4   zIterable[BoundingBox])r+   r6   r?   rS   r4   r   )Ú
__future__r   Útypingr   r   r   Úezdxfr   Ú
ezdxf.mathr   Úezdxf.entitiesr	   Ú	PrimitiveÚmax_flattening_distanceÚMAX_FLATTENING_DISTANCEr   rH   rM   rJ   r<   r   r   Ú<module>r\      sº   ðõ #ß 4Ñ 4ã Ý Ý "áÝ(à%×/Ñ/×GÑGÐ ÷Iñ Ið^ 
Ø!ñ	 Ø!ð ð ð	 ð
 ó ðL 
Ø!ñ	Ø!ðð ð	ð
 óð* 
Ø!ñ	Ø!ðð ð	ð
 ôr   