
    'j,m                    &   U 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mZ ddlmZ ddlmZmZmZ ddlmZ d d	lmZmZmZ eegd
f         Zi Zded<    ed          ZdXdZej        fdYdZ ej!        fdZdZ"d[dZ#d Z$ G d d          Z% e%            Z&d ed!<    G d" d
e%          Z'd\d)Z(e$ G d* d+e'                      Z)e$ G d, d-e'                      Z* G d. d/e'          Z+e$ G d0 d1e+                      Z,e$ G d2 d3e+                      Z-e$ G d4 d5e'                      Z.e$ G d6 d7e+                      Z/e$ G d8 d9e+                      Z0e$ G d: d;e+                      Z1e$ G d< d=e+                      Z2e$ G d> d?e+                      Z3e$ G d@ dAe3                      Z4e$ G dB dCe+                      Z5e$ G dD dEe+                      Z6e$ G dF dGe+                      Z7e$ G dH dIe+                      Z8e$ G dJ dKe+                      Z9e$ G dL dMe+                      Z:e$ G dN dOe:                      Z;e$ G dP dQe+                      Z< G dR dSej=                  Z> G dT dUe>          Z? G dV dWe>          Z@dS )]    )annotations)CallableTypeAnySequenceIteratorN   )sabsatconsthdr)Features)
DataLoaderAbstractEntityDataExporter)EncodedData)Matrix44Vec3NULLVEC
AcisEntityzdict[str, Type[AcisEntity]]ENTITY_TYPESinfdatar   return
list[Body]c                    t          | t          t          f          rt                              |           S t
                              |           S )zReturns a list of :class:`Body` entities from :term:`SAT` or :term:`SAB`
    data. Accepts :term:`SAT` data as a single string or a sequence of strings
    and :term:`SAB` data as bytes or bytearray.

    )
isinstancebytes	bytearray	SabLoaderload	SatLoader)r   s    M/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/acis/entities.pyr!   r!      s?     $	*++ $~~d###>>$    bodiesSequence[Body]versionint	list[str]c                   |t           j        k     rt          j        d|           t          j        t          |                    }d|j        _        | D ]}|                    |           |	                                S )aX  Export one or more :class:`Body` entities as text based :term:`SAT` data.

    ACIS version 700 is sufficient for DXF versions R2000, R2004, R2007 and
    R2010, later DXF versions require :term:`SAB` data.

    Raises:
        ExportError: ACIS structures contain unsupported entities
        InvalidLinkStructure: corrupt link structure

    invalid ACIS version: F)
r   MIN_EXPORT_VERSIONExportErrorr   SatExporter_setup_export_headerheaderasm_end_markerexportdump_satr%   r'   exporterbodys       r#   
export_satr7      s     ))) B B BCCC3G<<==H%*HO"  r$   r   c                   |t           j        k     rt          j        d|           t          j        t          |                    }d|j        _        | D ]}|                    |           |	                                S )aV  Export one or more :class:`Body` entities as binary encoded :term:`SAB`
    data.

    ACIS version 21800 is sufficient for DXF versions R2013 and R2018, earlier
    DXF versions require :term:`SAT` data.

    Raises:
        ExportError: ACIS structures contain unsupported entities
        InvalidLinkStructure: corrupt link structure

    r+   T)
r   r,   r-   r
   SabExporterr/   r0   r1   r2   dump_sabr4   s       r#   
export_sabr;   4   s     ))) B B BCCC3G<<==H%)HO"  r$   hdr.AcisHeaderc                    t          j        |           st          j        d|            t          j                    }|                    |            |S )Nzinvalid export version: )r   is_valid_export_versionr-   r   
AcisHeaderset_version)r'   r0   s     r#   r/   r/   K   sV    (11 F D7 D DEEE^F
wMr$   c                $    | t           | j        <   | S N)r   type)clss    r#   registerrE   S   s     LJr$   c                  @    e Zd ZU ej        Zded<   edd            ZdS )
NoneEntitystrrC   r   boolc                ,    | j         t          j        k    S rB   )rC   r   NONE_ENTITY_NAMEselfs    r#   is_nonezNoneEntity.is_none[   s    yE222r$   N)r   rI   )	__name__
__module____qualname__r   rK   rC   __annotations__propertyrN    r$   r#   rG   rG   X   sH         &D&&&&3 3 3 X3 3 3r$   rG   r   NONE_REFc                  ~    e Zd ZU dZdZded<   dZded<   eZd ed<   dd
Z	ddZ
ddZddZddZddZddZddZdS ) r   au  Base ACIS entity which also represents unsupported entities.

    Unsupported entities are entities whose internal structure are not fully
    known or user defined entity types.

    The content of these unsupported entities is not loaded and lost by
    exporting such entities, therefore exporting unsupported entities raises
    an :class:`ExportError` exception.

    zunsupported-entityrH   rC   r(   id
attributesr   c                &    | j          d| j         dS )N())rC   rX   rL   s    r#   __str__zAcisEntity.__str__s   s    )((dg((((r$   loaderr   entity_factoryFactoryNonec                \    |                      ||           |                     |           dS )z+Load the ACIS entity content from `loader`.N)restore_commonrestore_datarM   r^   r_   s      r#   r!   zAcisEntity.loadv   s2    FN333&!!!!!r$   c                    dS )z'Load the common part of an ACIS entity.NrT   re   s      r#   rc   zAcisEntity.restore_common{       r$   c                    dS )z%Load the data part of an ACIS entity.NrT   rM   r^   s     r#   rd   zAcisEntity.restore_data   rg   r$   r5   r   c                Z    |                      |           |                     |           dS )z,Write the ACIS entity content to `exporter`.N)write_common
write_datarM   r5   s     r#   r2   zAcisEntity.export   s.    (###!!!!!r$   c                :    t          j        d| j                   )zWrite the common part of the ACIS entity.

        It is not possible to export :class:`Body` entities including
        unsupported entities, doing so would cause data loss or worse data
        corruption!

        zunsupported entity type: )r   r-   rC   rm   s     r#   rk   zAcisEntity.write_common   s       GDI G GHHHr$   c                    dS )z'Write the data part of the ACIS entity.NrT   rm   s     r#   rl   zAcisEntity.write_data   rg   r$   Iterator[AcisEntity]c              #     K   t          |                                           D ]}t          |t                    r|V  dS )z7Yield all attributes of this entity of type AcisEntity.N)varsvaluesr   r   )rM   es     r#   entitieszAcisEntity.entities   sM      d""$$ 	 	A!Z(( 	 	r$   N)r   rH   r^   r   r_   r`   r   ra   r^   r   r   ra   r5   r   r   ra   )r   rp   )rO   rP   rQ   __doc__rC   rR   rX   rU   rY   r]   r!   rc   rd   r2   rk   rl   ru   rT   r$   r#   r   r   c   s         	 	 %D$$$$BLLLL%J%%%%) ) ) )" " " "
      " " " "
I I I I        r$   expected_typerH   r^   r   r_   r`   c                    |                                 }|j        rt          S |j                            |           r ||          S t          j        d|  d|j         d          )Nzexpected entity type 'z', got '')read_ptris_null_ptrrU   nameendswithr   ParsingError)rz   r^   r_   
raw_entitys       r#   restore_entityr      sx     ""J .. 
~j))) N]NNJONNN
 
 	
r$   c                  B    e Zd ZU dZded<    e            ZddZddZdS )	Transform	transformrH   rC   r^   r   r   ra   c                   |                                 }|                    dd           |                    dd           |                    dd           |                    d           t          |          | _        d S )N                 g      ?)read_transforminsertappendr   matrix)rM   r^   r   s      r#   rd   zTransform.restore_data   sr    $$&&AsAsBCtnnr$   r5   r   c                H   dfd}g | j                                         D ]5} ||d                     ||d                     ||d                    6t          ddd          }| j                             |          } |t	          |j        d                     |                                                    |           }                    |rdnd	                               d
                               d           |	                               d S )Nvaluefloatc                6                         | d           d S )Ng)r   )r   r   s    r#   write_doublez,Transform.write_common.<locals>.write_double   s    KK5%%%%%r$   r   r	         rotate	no_rotate
no_reflectno_shear)r   r   )
r   rowsr   transform_directionround	magnitude	normalizeiscloser   write_transform)rM   r5   r   rowtest_vectorresult
is_rotatedr   s          @r#   rk   zTransform.write_common   s@   	& 	& 	& 	& 	& 	& ;##%% 	! 	!CLQ   LQ   LQ    1amm00==U6+Q//000))++33K@@@

;HH<<<L!!!J  &&&&&r$   Nrw   rx   )	rO   rP   rQ   rC   rR   r   r   rd   rk   rT   r$   r#   r   r      sZ         DXZZF% % % %' ' ' ' ' 'r$   r   c                  8    e Zd ZU dZded<   dddZddZddZdS )	AsmHeader	asmheaderrH   rC    r'   c                    || _         d S rB   )r'   rM   r'   s     r#   __init__zAsmHeader.__init__   s    r$   r^   r   r_   r`   r   ra   c                8    |                                 | _        d S rB   )read_strr'   re   s      r#   rc   zAsmHeader.restore_common   s    ((r$   r5   r   c                :    |                     | j                   d S rB   )	write_strr'   rm   s     r#   rk   zAsmHeader.write_common       4<(((((r$   N)r   )r'   rH   rv   rx   )rO   rP   rQ   rC   rR   r   rc   rk   rT   r$   r#   r   r      sh         D    ) ) ) )) ) ) ) ) )r$   r   c                  .    e Zd ZU eZded<   dd	ZddZdS )SupportsPatternPatternpatternr^   r   r_   r`   r   ra   c                `    |j         t          j        k    rt          d||          | _        d S d S )Nr   )r'   r   PATTERNr   r   re   s      r#   rc   zSupportsPattern.restore_common   s1    >X---))V^LLDLLL .-r$   r5   r   c                :    |                     | j                   d S rB   )	write_ptrr   rm   s     r#   rk   zSupportsPattern.write_common   r   r$   Nrv   rx   )rO   rP   rQ   rU   r   rR   rc   rk   rT   r$   r#   r   r      sS         GM M M M) ) ) ) ) )r$   r   c                       e Zd ZU dZded<   eZded<   eZded<   eZded	<   eZ	d
ed<   d fdZ
d fdZddZddZ xZS )Bodyr6   rH   rC   r   r   LumplumpWirewirer   r   r^   r   r_   r`   r   ra   c                    t                                          ||           t          d||          | _        t          d||          | _        t          d||          | _        d S )Nr   r   r   )superrc   r   r   r   r   rM   r^   r_   	__class__s      r#   rc   zBody.restore_common   sZ    v~666"66>BB	"66>BB	'V^LLr$   r5   r   c                    t                                          |           |                    | j                   |                    | j                   |                    | j                   d S rB   )r   rk   r   r   r   r   rM   r5   r   s     r#   rk   zBody.write_common   sc    X&&&49%%%49%%%4>*****r$   c                    | |_         | j        j        r	|| _        dS | j        }|j        j        s|j        }|j        j        ||_        dS )z+Append a :class:`Lump` entity as last lump.N)r6   r   rN   	next_lump)rM   r   current_lumps      r#   append_lumpzBody.append_lump   \    	9 	*DIII9L",4 6+5 #,4 6%)L"""r$   
list[Lump]c                l    g }| j         }|j        s#|                    |           |j        }|j        #|S )z4Returns all linked :class:`Lump` entities as a list.)r   rN   r   r   )rM   lumpsr   s      r#   r   z
Body.lumps  G    y& 	2LL&&&'1L & 	2 r$   rv   rx   )r   r   r   ra   )r   r   )rO   rP   rQ   rC   rR   rU   r   r   r   r   rc   rk   r   r   __classcell__r   s   @r#   r   r      s         DGDD#I####M M M M M M+ + + + + +	* 	* 	* 	*       r$   r   c                      e Zd ZU dZded<   dS )r   r   rH   rC   NrO   rP   rQ   rC   rR   rT   r$   r#   r   r     s#         Dr$   r   c                      e Zd ZU dZded<   dS )r   r   rH   rC   Nr   rT   r$   r#   r   r     s#         Dr$   r   c                  v     e Zd ZU dZded<   eZd ed<   eZded<   eZded<   d fdZ	d fdZ
ddZddZ xZS )r   r   rH   rC   r   Shellshellr   r6   r^   r   r_   r`   r   ra   c                    t                                          ||           t          d||          | _        t          d||          | _        t          d||          | _        d S )Nr   r   r6   )r   rc   r   r   r   r6   r   s      r#   rc   zLump.restore_common   sZ    v~666'GG#GV^DD
"66>BB			r$   r5   r   c                    t                                          |           |                    | j                   |                    | j                   |                    | j                   d S rB   )r   rk   r   r   r   r6   r   s     r#   rk   zLump.write_common&  sc    X&&&4>***4:&&&49%%%%%r$   c                    | |_         | j        j        r	|| _        dS | j        }|j        j        s|j        }|j        j        ||_        dS )z-Append a :class:`Shell` entity as last shell.N)r   r   rN   
next_shell)rM   r   current_shells      r#   append_shellzLump.append_shell,  s\    
: 	-DJJJ JM#.6 9 - 8 $.6 9',M$$$r$   list[Shell]c                l    g }| j         }|j        s#|                    |           |j        }|j        #|S )z5Returns all linked :class:`Shell` entities as a list.)r   rN   r   r   )rM   shellsr   s      r#   r   zLump.shells7  sG    
' 	5MM-((()4M  ' 	5 r$   rv   rx   )r   r   r   ra   )r   r   )rO   rP   rQ   rC   rR   rU   r   r   r6   rc   rk   r   r   r   r   s   @r#   r   r     s         DIEDC C C C C C& & & & & &	- 	- 	- 	-       r$   r   c                       e Zd ZU dZded<   eZd ed<   eZded<   eZded<   eZ	d	ed
<   eZ
ded<   d fdZd fdZddZddZ xZS )r   r   rH   rC   r   SubshellsubshellFacefacer   r   r   r   r^   r   r_   r`   r   ra   c                (   t                                          ||           t          d||          | _        t          d||          | _        t          d||          | _        t          d||          | _        t          d||          | _        d S )Nr   r   r   r   r   )r   rc   r   r   r   r   r   r   r   s      r#   rc   zShell.restore_commonJ  s    v~666(v~NN&z6>JJ"66>BB	"66>BB	"66>BB			r$   r5   r   c                N   t                                          |           |                    | j                   |                    | j                   |                    | j                   |                    | j                   |                    | j                   d S rB   )r   rk   r   r   r   r   r   r   r   s     r#   rk   zShell.write_commonR  s    X&&&4?+++4=)))49%%%49%%%49%%%%%r$   c                    | |_         | j        j        r	|| _        dS | j        }|j        j        s|j        }|j        j        ||_        dS )z+Append a :class:`Face` entity as last face.N)r   r   rN   	next_face)rM   r   current_faces      r#   append_facezShell.append_faceZ  s\    
9 	*DIII9L",4 6+5 #,4 6%)L"""r$   
list[Face]c                l    g }| j         }|j        s#|                    |           |j        }|j        #|S )z4Returns all linked :class:`Face` entities as a list.)r   rN   r   r   )rM   facesr   s      r#   r   zShell.facese  r   r$   rv   rx   )r   r   r   ra   )r   r   )rO   rP   rQ   rC   rR   rU   r   r   r   r   r   rc   rk   r   r   r   r   s   @r#   r   r   A  s         D J    !H!!!!DDDC C C C C C& & & & & &	* 	* 	* 	*       r$   r   c                      e Zd ZU dZded<   dS )r   r   rH   rC   Nr   rT   r$   r#   r   r   o  s#         Dr$   r   c                       e Zd ZU dZded<   eZded<   eZded<   eZded	<   eZ	d
ed<   eZ
ded<   dZdZdZd fdZd fdZddZddZ xZS ) r   r   rH   rC   z'Face'r   Looploopr   r   r   r   SurfacesurfaceFr^   r   r_   r`   r   ra   c                   t                                          ||           t          d||          | _        t          d||          | _        t          d||          | _        t          d||          | _        t          d||          | _        |                    dd          | _	        |                    dd	          | _
        | j
        r|                    d
d          | _        d S d S )Nr   r   r   r   r   reversedforwarddoublesingleinout)r   rc   r   r   r   r   r   r   	read_boolsensedouble_sidedcontainmentr   s      r#   rc   zFace.restore_common  s    v~666'GG"66>BB	#GV^DD
&z6>JJ%iHH%%j)<<
",,Xx@@ 	=%//e<<D	= 	=r$   r5   r   c                   t                                          |           |                    | j                   |                    | j                   |                    | j                   |                    | j                   |                    | j                   |                    | j	        dd           |                    | j
        dd           | j
        r|                    | j        dd           d S d S )Nr   r   r   r   r   r   )r   rk   r   r   r   r   r   r   
write_boolr   r   r   r   s     r#   rk   zFace.write_common  s    X&&&4>***49%%%4:&&&4=)))4<(((DJ
I>>>D-xBBB 	? 0$>>>>>	? 	?r$   c                    | |_         | j        j        r	|| _        dS | j        }|j        j        s|j        }|j        j        ||_        dS )z+Append a :class:`Loop` entity as last loop.N)r   r   rN   	next_loop)rM   r   current_loops      r#   append_loopzFace.append_loop  r   r$   
list[Loop]c                l    g }| j         }|j        s#|                    |           |j        }|j        #|S )z4Returns all linked :class:`Loop` entities as a list.)r   rN   r   r  )rM   loopsr  s      r#   r  z
Face.loops  r   r$   rv   rx   )r   r   r   ra   )r   r  )rO   rP   rQ   rC   rR   rU   r   r   r   r   r   r   r   r   rc   rk   r  r  r   r   s   @r#   r   r   t  s         D I    DE!H!!!!GELK
= 
= 
= 
= 
= 
=
? 
? 
? 
? 
? 
?	* 	* 	* 	*       r$   r   c                  `    e Zd ZU dZded<   eefZeefZddZddZ	e
j        dd            ZdS )r   r   rH   rC   r^   r   r   ra   c                    |                                 |                                 f| _        |                                 |                                 f| _        d S rB   )read_intervalu_boundsv_boundsri   s     r#   rd   zSurface.restore_data  sN    ,,..0D0D0F0FF,,..0D0D0F0FFr$   r5   r   c                   |                     | j        d                    |                     | j        d                    |                     | j        d                    |                     | j        d                    d S Nr   r	   )write_intervalr  r  rm   s     r#   rl   zSurface.write_data  st    a 0111a 0111a 0111a 011111r$   ur   vr   c                    dS )znReturns the spatial location at the parametric surface for the given
        parameters `u` and `v`.

        NrT   rM   r  r  s      r#   evaluatezSurface.evaluate  	     	r$   Nrw   )r5   r   r  r   r  r   r   r   )rO   rP   rQ   rC   rR   INFr  r  rd   rl   abcabstractmethodr  rT   r$   r#   r   r     s         DCxHCxHG G G G2 2 2 2 	     r$   r   c                       e Zd ZU dZded<    eddd          Z eddd          Z eddd          Z eddd          Z	dZ
d fdZd fdZd ZddZ xZS )Planezplane-surfacerH   rC   r   r	   Fr^   r   r_   r`   r   ra   c                   t                                          ||           t          |                                          | _        t          |                                          | _        t          |                                          | _        |                    dd          | _        | 	                                 d S N	reverse_v	forward_v)
r   rc   r   	read_vec3originnormalu_dirr   r  update_v_dirr   s      r#   rc   zPlane.restore_common  s    v~6666++--..6++--..&**,,--
))+{CCr$   r5   r   c                   t                                          |           |                    | j                   |                    | j                   |                    | j                   |                    | j        dd           d S r  )	r   rk   write_loc_vec3r"  write_dir_vec3r#  r$  r  r  r   s     r#   rk   zPlane.write_common  s}    X&&&,,,,,,
+++DNKEEEEEr$   c                f    | j                             | j                  }| j        r| }|| _        d S rB   )r#  crossr$  r  v_dir)rM   r+  s     r#   r%  zPlane.update_v_dir  s5    !!$*--> 	FE


r$   r  r   r  r   c                <    | j         | j        |z  z   | j        |z  z   S rB   )r"  r$  r+  r  s      r#   r  zPlane.evaluate  s     {dj1n-a@@r$   rv   rx   r  )rO   rP   rQ   rC   rR   r   r"  r#  r$  r+  r  rc   rk   r%  r  r   r   s   @r#   r  r    s         DT!Q]]FT!Q]]FDAqMMEDAqMME I     F F F F F F  A A A A A A A Ar$   r  c                  x     e Zd ZU dZded<   eZd ed<   eZded<   eZded<   d fdZ	d fdZ
dddZddZ xZS )r   r   rH   rC   r  Coedgecoedger   r   r^   r   r_   r`   r   ra   c                    t                                          ||           t          d||          | _        t          d||          | _        t          d||          | _        d S )Nr   r/  r   )r   rc   r   r  r/  r   r   s      r#   rc   zLoop.restore_common  sZ    v~666'GG$Xv~FF"66>BB			r$   r5   r   c                    t                                          |           |                    | j                   |                    | j                   |                    | j                   d S rB   )r   rk   r   r  r/  r   r   s     r#   rk   zLoop.write_common  sc    X&&&4>***4;'''49%%%%%r$   Tcoedgeslist[Coedge]c                   t          |          dk    sJ |d         | _        |dd         }|dd         }|r8|                    |d                    |                    d|d                    n5|                    t                     |                    dt                     t          |||          D ]\  }}}| |_        ||_        ||_        dS )z"Set all coedges of a loop at once.r   r	   NrW   )	lenr/  r   r   rU   zipr   prev_coedgenext_coedge)rM   r2  closenext_coedgesprev_coedgesr/  nextprevs           r#   set_coedgeszLoop.set_coedges   s    7||aajqrr{ss| 	-
+++72;////)))8,,,"%g|\"J"J 	& 	&FD$FK!%F!%F	& 	&r$   c                    g }| j         }|j        s-|                    |           |j        }|| j         u rn|j        -|S )z6Returns all linked :class:`Coedge` entities as a list.)r/  rN   r   r8  )rM   r2  current_coedges      r#   r2  zLoop.coedges  sW     ( 	NN>***+7N,,	 !( 	
 r$   rv   rx   )T)r2  r3  r   ra   r   r3  )rO   rP   rQ   rC   rR   rU   r  r/  r   rc   rk   r>  r2  r   r   s   @r#   r   r     s         DIFDC C C C C C& & & & & && & & & &$
 
 
 
 
 
 
 
r$   r   c                       e Zd ZU dZded<   eZd ed<   eZd ed<   eZd ed<   eZ	ded<   d	Z
d
ed<   eZded<   dZded<   eZded<   d! fdZd" fdZd#dZd$dZd%d Z xZS )&r.  r/  rH   rC   r8  r7  partner_coedgeEdgeedgeTrI   r   r   r   r   r(   unknownPCurvepcurver^   r   r_   r`   r   ra   c                   t                                          ||           t          d||          | _        t          d||          | _        t          d||          | _        t          d||          | _        |                    dd          | _        t          d||          | _	        |
                    d          | _        t          d||          | _        d S )	Nr/  rE  r   r   r   r   skip_satrH  )r   rc   r   r8  r7  rC  rE  r   r   r   read_intrF  rH  r   s      r#   rc   zCoedge.restore_common1  s    v~666)(FNKK)(FNKK,Xv~NN"66>BB	%%j)<<
"66>BB	22$Xv~FFr$   r5   r   c                   t                                          |           |                    | j                   |                    | j                   |                    | j                   |                    | j                   |                    | j        dd           |                    | j	                   |
                    dd           |                    | j                   d S )Nr   r   r   TrJ  )r   rk   r   r8  r7  rC  rE  r  r   r   	write_intrH  r   s     r#   rk   zCoedge.write_common<  s    X&&&4+,,,4+,,,4.///49%%%DJ
I>>>49%%%1t,,,4;'''''r$   c                    |j         j        sJ | j         }|j        r| }|| _         ||_         |                                  d S rB   )rC  rN   order_partner_coedges)rM   r/  rC  s      r#   add_partner_coedgezCoedge.add_partner_coedgeH  sT    $,,,,,! 	"!N$ .""$$$$$r$   c                    d S rB   rT   rL   s    r#   rP  zCoedge.order_partner_coedgesR  s	     	r$   r3  c                ~    g }| j         }|j        r|S 	 |                    |           |j         }|j        s|| u rn)|S )z:Returns all partner coedges of this coedge without `self`.)rC  rN   r   )rM   r2  rC  s      r#   partner_coedgeszCoedge.partner_coedgesW  sb     ",! 	N	NN>***+:N% 4)?)?		
 r$   rv   rx   )r/  r.  r   ra   )r   ra   rA  )rO   rP   rQ   rC   rR   rU   r8  r7  rC  rE  r   r   rF  rH  rc   rk   rQ  rP  rT  r   r   s   @r#   r.  r.    s<        D"K"""""K""""
 &N%%%%D EDGF	G 	G 	G 	G 	G 	G
( 
( 
( 
( 
( 
(% % % %   
       r$   r.  c                       e Zd ZU dZded<   eZded<   dZded<   eZded	<   dZ	ded
<   eZ
ded<   eZded<   dZded<   dZded<   d fdZd fdZ xZS ) rD  rE  rH   rC   Vertexstart_vertexr   r   start_param
end_vertex	end_paramr.  r/  CurvecurveFrI   r   rF  	convexityr^   r   r_   r`   r   ra   c                J   t                                          ||           t          d||          | _        |j        t
          j        k    r|                                | _        t          d||          | _	        |j        t
          j        k    r|                                | _
        t          d||          | _        t          d||          | _        |                    dd          | _        |j        t
          j        k    r|                                | _        d S d S )Nvertexr/  r\  r   r   )r   rc   r   rW  r'   r   TOL_MODELINGread_doublerX  rY  rZ  r/  r\  r   r   r   r]  r   s      r#   rc   zEdge.restore_commonw  s    v~666*8V^LL>X222%1133D(6>JJ>X222#//11DN$Xv~FF#GV^DD
%%j)<<
>X222#__..DNNN 32r$   r5   r   c                   t                                          |           |                    | j                   |                    | j                   |                    | j                   |                    | j                   |                    | j                   |                    | j	                   |
                    | j        dd           |                    | j                   d S )Nr   r   )r   rk   r   rW  r   rX  rY  rZ  r/  r\  r  r   r   r]  r   s     r#   rk   zEdge.write_common  s    X&&&4,---d.///4?+++dn---4;'''4:&&&DJ
I>>>4>*****r$   rv   rx   )rO   rP   rQ   rC   rR   rU   rW  rX  rY  rZ  r/  r\  r   r]  rc   rk   r   r   s   @r#   rD  rD  e  s         D $L####K "J!!!!IFE EI/ / / / / /
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+r$   rD  c                      e Zd ZU dZded<   dS )rG  rH  rH   rC   Nr   rT   r$   r#   rG  rG    s#         Dr$   rG  c                  f     e Zd ZU dZded<   eZded<   dZded<   eZd	ed
<   d fdZ	d fdZ
 xZS )rV  r_  rH   rC   rD  rE  r   r(   	ref_countPointpointr^   r   r_   r`   r   ra   c                    t                                          ||           t          d||          | _        |                    d          | _        t          d||          | _        d S )NrE  r   rJ  rg  )r   rc   r   rE  rL  re  rg  r   s      r#   rc   zVertex.restore_common  s\    v~666"66>BB	!44#GV^DD


r$   r5   r   c                    t                                          |           |                    | j                   |                    | j        d           |                    | j                   d S )NTrJ  )r   rk   r   rE  rN  re  rg  r   s     r#   rk   zVertex.write_common  sh    X&&&49%%%4>D9994:&&&&&r$   rv   rx   )rO   rP   rQ   rC   rR   rU   rE  re  rg  rc   rk   r   r   s   @r#   rV  rV    s         DDIEE E E E E E' ' ' ' ' ' ' ' ' 'r$   rV  c                  X    e Zd ZU dZded<   eefZddZddZe	j
        dd            ZdS )r[  r\  rH   rC   r^   r   r   ra   c                `    |                                 |                                 f| _        d S rB   )r  boundsri   s     r#   rd   zCurve.restore_data  s*    **,,f.B.B.D.DDr$   r5   r   c                    |                     | j        d                    |                     | j        d                    d S r  )r  rl  rm   s     r#   rl   zCurve.write_data  s<    A///A/////r$   paramr   r   c                    dS )z_Returns the spatial location at the parametric curve for the given
        parameter.

        NrT   rM   rn  s     r#   r  zCurve.evaluate  r  r$   Nrw   rx   rn  r   r   r   )rO   rP   rQ   rC   rR   r  rl  rd   rl   r  r  r  rT   r$   r#   r[  r[    s         D#XFE E E E0 0 0 0 	     r$   r[  c                  x     e Zd ZU dZded<    eddd          Z eddd          Zd fd
Zd fdZ	ddZ
 xZS )StraightCurvezstraight-curverH   rC   r   r	   r^   r   r   ra   c                    t          |                                          | _        t          |                                          | _        t	                                          |           d S rB   )r   r!  r"  	directionr   rd   )rM   r^   r   s     r#   rd   zStraightCurve.restore_data  sW    6++--..f..0011V$$$$$r$   r5   r   c                    |                     | j                   |                    | j                   t	                                          |           d S rB   )r'  r"  r(  ru  r   rl   r   s     r#   rl   zStraightCurve.write_data  sM    ,,,///8$$$$$r$   rn  r   r   c                &    | j         | j        |z  z   S rB   )r"  ru  rp  s     r#   r  zStraightCurve.evaluate  s    {dnu455r$   rw   rx   rq  )rO   rP   rQ   rC   rR   r   r"  ru  rd   rl   r  r   r   s   @r#   rs  rs    s          D    T!Q]]FQ1I% % % % % %
% % % % % %
6 6 6 6 6 6 6 6r$   rs  c                  <    e Zd ZU dZded<   eZded<   dd
ZddZdS )rf  rg  rH   rC   r   locationr^   r   r   ra   c                R    t          |                                          | _        d S rB   )r   r!  ry  ri   s     r#   rd   zPoint.restore_data  s!    V--//00r$   r5   r   c                :    |                     | j                   d S rB   )r'  ry  rm   s     r#   rl   zPoint.write_data  s    .....r$   Nrw   rx   )	rO   rP   rQ   rC   rR   r   ry  rd   rl   rT   r$   r#   rf  rf    s`         DH1 1 1 1/ / / / / /r$   rf  c                  Z    e Zd ZU ded<   ddZdd
ZddZd Zej	        dd            Z
dS )
FileLoaderz'Sequence[sat.SatEntity | sab.SabEntity]recordsr'   r(   c                "    i | _         || _        d S rB   )ru   r'   r   s     r#   r   zFileLoader.__init__  s    /1#r$   r   r   r   r   c                    t          |          }	 | j        |         S # t          $ r; t                              |j        t                                }|| j        |<   |cY S w xY wrB   )rX   ru   KeyErrorr   getr   r   )rM   r   uidentitys       r#   r_   zFileLoader.entity_factory  sl    nn	=%% 	 	 	!%%jozBBDDF!'DM#MMM	s    AA#"A#r   c                H    d | j                                         D             S )Nc                <    g | ]}t          |t                    |S rT   )r   r   ).0rt   s     r#   
<listcomp>z%FileLoader.bodies.<locals>.<listcomp>  s'    IIIaZ45H5HIIIIr$   )ru   rs   rL   s    r#   r%   zFileLoader.bodies  s$    II4=//11IIIIr$   c                    | j         }| j        D ]g} ||          }|j        |_        |j        }|j        s ||          |_        |                     |j                  }|                    ||           hd S rB   )r_   r~  rX   rY   r~   make_data_loaderr   r!   )rM   r_   r   r  rY   data_loaders         r#   load_entitieszFileLoader.load_entities  s    ,, 	5 	5J#^J//F"FI#.J) ?$2N:$>$>!//
@@KKK^4444	5 	5r$   r   	list[Any]r   c                    d S rB   rT   rM   r   s     r#   r  zFileLoader.make_data_loader   rg   r$   N)r'   r(   )r   r   r   r   )r   r   r   r  r   r   )rO   rP   rQ   rR   r   r_   r%   r  r  r  r  rT   r$   r#   r}  r}    s         4444$ $ $ $   J J J J
5 
5 
5 	     r$   r}  c                  @     e Zd Zd
 fdZddZedd	            Z xZS )r    r   bytes | bytearrayc                    t          j        |          }t                                          |j        j                   |j        | _        d S rB   )r
   	parse_sabr   r   r0   r'   ru   r~  rM   r   builderr   s      r#   r   zSabLoader.__init__  =    -%%/000'r$   r  r   r   c                6    t          j        || j                  S rB   )r
   SabDataLoaderr'   r  s     r#   r  zSabLoader.make_data_loader       t|444r$   r   c                h     | |          }|                                  |                                S rB   r  r%   rD   r   r^   s      r#   r!   zSabLoader.load  /    T}}r$   )r   r  r  )r   r  r   r   rO   rP   rQ   r   r  classmethodr!   r   r   s   @r#   r    r      q        ( ( ( ( ( (
5 5 5 5    [    r$   r    c                  @     e Zd Zd
 fdZddZedd	            Z xZS )r"   r   str | Sequence[str]c                    t          j        |          }t                                          |j        j                   |j        | _        d S rB   )r   	parse_satr   r   r0   r'   ru   r~  r  s      r#   r   zSatLoader.__init__  r  r$   r  r   r   c                6    t          j        || j                  S rB   )r   SatDataLoaderr'   r  s     r#   r  zSatLoader.make_data_loader  r  r$   r   c                h     | |          }|                                  |                                S rB   r  r  s      r#   r!   zSatLoader.load  r  r$   )r   r  r  )r   r  r   r   r  r   s   @r#   r"   r"     r  r$   r"   )r   r   r   r   )r%   r&   r'   r(   r   r)   )r%   r&   r'   r(   r   r   )r   r<   )rz   rH   r^   r   r_   r`   r   r   )A
__future__r   typingr   r   r   r   r   r  r   r
   r   r   r   r   abstractr   r   r   
type_hintsr   
ezdxf.mathr   r   r   r`   r   rR   r   r  r!   DEFAULT_SAT_VERSIONr7   DEFAULT_SAB_VERSIONr;   r/   rE   rG   rU   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r.  rD  rG  rV  r[  rs  rf  ABCr}  r    r"   rT   r$   r#   <module>r     s   # " " " " " " : : : : : : : : : : : : : : 



 " " " " " " " " " " " "       > > > > > > > > > > # # # # # # . . . . . . . . . .
N#\1
2,. . . . .eEll        ,1+D    . ,1+D    .     
3 3 3 3 3 3 3 3 
    7 7 7 7 7 7 7 7t
 
 
 
 
' ' ' ' '
 ' ' 
'B 

) 
) 
) 
) 
)
 
) 
) 

)) ) ) ) )j ) ) ) 
% % % % %? % % 
%P 
    ?   
 
    j   
 
$ $ $ $ $? $ $ 
$N 
* * * * *O * * 
*Z 
       
 
6 6 6 6 6? 6 6 
6r 
    o   
0 
"A "A "A "A "AG "A "A 
"AJ 
. . . . .? . . 
.b 
B B B B B_ B B 
BJ 
)+ )+ )+ )+ )+? )+ )+ 
)+X 
    _   
 
' ' ' ' '_ ' ' 
'& 
    O   
( 
6 6 6 6 6E 6 6 
6& 
/ / / / /O / / 
/" " " " " " " "J    
        
     r$   