
    Og,m                    L   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dGdZej>                  f	 	 	 	 	 dHdZ ejB                  f	 	 	 	 	 dIdZ"dJdZ#d Z$ G d d      Z% e%       Z&ded<    G d d
e%      Z'	 	 	 	 	 	 	 	 dKdZ(e$ G d de'             Z)e$ G d de'             Z* G d de'      Z+e$ G d d e+             Z,e$ G d! d"e+             Z-e$ G d# d$e'             Z.e$ G d% d&e+             Z/e$ G d' d(e+             Z0e$ G d) d*e+             Z1e$ G d+ d,e+             Z2e$ G d- d.e+             Z3e$ G d/ d0e3             Z4e$ G d1 d2e+             Z5e$ G d3 d4e+             Z6e$ G d5 d6e+             Z7e$ G d7 d8e+             Z8e$ G d9 d:e+             Z9e$ G d; d<e+             Z:e$ G d= d>e:             Z;e$ G d? d@e+             Z< G dA dBejz                        Z> G dC dDe>      Z? G dE dFe>      Z@y)L    )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infc                    t        | t        t        f      rt        j	                  |       S t
        j	                  |       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)datas    X/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/acis/entities.pyr   r      s1     $	*+~~d##>>$    c                   |t         j                  k  rt        j                  d|       t        j                  t        |            }d|j                  _        | D ]  }|j                  |        |j                         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bodiesversionexporterbodys       r!   
export_satr2      su     )))"8	 BCC3G<=H%*HOO" r"   c                   |t         j                  k  rt        j                  d|       t        j                  t        |            }d|j                  _        | D ]  }|j                  |        |j                         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(   r)   r*   r+   dump_sabr-   s       r!   
export_sabr6   4   su     )))"8	 BCC3G<=H%)HOO" r"   c                    t        j                  |       st        j                  d|        t        j                         }|j                  |        |S )Nzinvalid export version: )r   is_valid_export_versionr&   r   
AcisHeaderset_version)r/   r)   s     r!   r(   r(   K   sH    ((1":7) DEE^^F
wMr"   c                ,    | t         | j                  <   | S N)r   type)clss    r!   registerr?   S   s     LJr"   c                  B    e Zd ZU ej                  Zded<   edd       Zy)
NoneEntitystrr=   c                <    | j                   t        j                  k(  S r<   )r=   r   NONE_ENTITY_NAMEselfs    r!   is_nonezNoneEntity.is_none[   s    yyE2222r"   N)returnbool)	__name__
__module____qualname__r   rD   r=   __annotations__propertyrG    r"   r!   rA   rA   X   s$    &&D#&3 3r"   rA   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y)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-entityrB   r=   intid
attributesc                :    | j                    d| j                   dS )N())r=   rT   rE   s    r!   __str__zAcisEntity.__str__s   s    ))AdggYa((r"   c                J    | j                  ||       | j                  |       y)z+Load the ACIS entity content from `loader`.N)restore_commonrestore_datarF   loaderentity_factorys      r!   r   zAcisEntity.loadv   s     FN3&!r"   c                     y)z'Load the common part of an ACIS entity.NrO   r]   s      r!   r[   zAcisEntity.restore_common{       r"   c                     y)z%Load the data part of an ACIS entity.NrO   rF   r^   s     r!   r\   zAcisEntity.restore_data   ra   r"   c                H    | j                  |       | j                  |       y)z,Write the ACIS entity content to `exporter`.N)write_common
write_datarF   r0   s     r!   r+   zAcisEntity.export   s    (#!r"   c                F    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&   r=   rg   s     r!   re   zAcisEntity.write_common   s!     ";DII; GHHr"   c                     y)z'Write the data part of the ACIS entity.NrO   rg   s     r!   rf   zAcisEntity.write_data   ra   r"   c              #  r   K   t        |       j                         D ]  }t        |t              s|  yw)z7Yield all attributes of this entity of type AcisEntity.N)varsvaluesr   r   rF   es     r!   entitieszAcisEntity.entities   s1     d""$ 	A!Z(	s   -77N)rH   rB   r^   r   r_   FactoryrH   Noner^   r   rH   rr   r0   r   rH   rr   )rH   zIterator[AcisEntity])rJ   rK   rL   __doc__r=   rM   rT   rP   rU   rY   r   r[   r\   r+   re   rf   ro   rO   r"   r!   r   r   c   sO    	 %D#$BL%J
%)"
"
Ir"   c                    |j                         }|j                  rt        S |j                  j	                  |       r ||      S t        j                  d|  d|j                   d      )Nzexpected entity type 'z', got '')read_ptris_null_ptrrP   nameendswithr   ParsingError)expected_typer^   r_   
raw_entitys       r!   restore_entityr      se     "J.j))  $]O8JOO;LAN
 	
r"   c                  :    e Zd ZU dZded<    e       ZddZddZy)		Transform	transformrB   r=   c                    |j                         }|j                  dd       |j                  dd       |j                  dd       |j                  d       t        |      | _        y )N                 g      ?)read_transforminsertappendr   matrix)rF   r^   r    s      r!   r\   zTransform.restore_data   sQ    $$&AsAsBCtnr"   c                   d
fd}g | j                   j                         D ]#  } ||d           ||d           ||d          % t        ddd      }| j                   j                  |      } |t	        |j
                  d             |j                         j                  |       }j                  |rdnd       j                  d       j                  d	       |j                         y )Nc                ,    j                  | d       y )Ng)r   )valuer    s    r!   write_doublez,Transform.write_common.<locals>.write_double   s    KK5)%r"   r   r	         rotate	no_rotate
no_reflectno_shear)r   float)
r   rowsr   transform_directionround	magnitude	normalizeiscloser   write_transform)rF   r0   r   rowtest_vectorresult
is_rotatedr    s          @r!   re   zTransform.write_common   s    	& ;;##% 	!CQ Q Q 	! 1am00=U6++Q/0))+33K@@

H<L!J  &r"   Nrs   rt   )	rJ   rK   rL   r=   rM   r   r   r\   re   rO   r"   r!   r   r      s    D#ZF%'r"   r   c                  6    e Zd ZU dZded<   dd	dZd
dZddZy)	AsmHeader	asmheaderrB   r=   c                    || _         y r<   )r/   rF   r/   s     r!   __init__zAsmHeader.__init__   s	    r"   c                .    |j                         | _        y r<   )read_strr/   r]   s      r!   r[   zAsmHeader.restore_common   s    (r"   c                :    |j                  | j                         y r<   )	write_strr/   rg   s     r!   re   zAsmHeader.write_common       4<<(r"   N) )r/   rB   rp   rt   )rJ   rK   rL   r=   rM   r   r[   re   rO   r"   r!   r   r      s    D#))r"   r   c                  ,    e Zd ZU eZded<   ddZddZy)SupportsPatternPatternpatternc                d    |j                   t        j                  k\  rt        d||      | _        y y )Nr   )r/   r   PATTERNr   r   r]   s      r!   r[   zSupportsPattern.restore_common   s)    >>X---))V^LDL .r"   c                :    |j                  | j                         y r<   )	write_ptrr   rg   s     r!   re   zSupportsPattern.write_common   r   r"   Nrp   rt   )rJ   rK   rL   rP   r   rM   r[   re   rO   r"   r!   r   r      s    GW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 )Bodyr1   rB   r=   r   r   LumplumpWirewirer   r   c                    t         |   ||       t        d||      | _        t        d||      | _        t        d||      | _        y )Nr   r   r   )superr[   r   r   r   r   rF   r^   r_   	__class__s      r!   r[   zBody.restore_common   sB    v~6"66>B	"66>B	'V^Lr"   c                    t         |   |       |j                  | j                         |j                  | j                         |j                  | j
                         y r<   )r   re   r   r   r   r   rF   r0   r   s     r!   re   zBody.write_common   sF    X&499%499%4>>*r"   c                    | |_         | j                  j                  r|| _        y| j                  }|j                  j                  s#|j                  }|j                  j                  s#||_        y)z+Append a :class:`Lump` entity as last lump.N)r1   r   rG   	next_lump)rF   r   current_lumps      r!   append_lumpzBody.append_lump   Y    	99DI99L",,44+55 #,,44%)L"r"   c                    g }| j                   }|j                  s*|j                  |       |j                  }|j                  s*|S )z4Returns all linked :class:`Lump` entities as a list.)r   rG   r   r   )rF   lumpsr   s      r!   r   z
Body.lumps  B    yy&&LL&'11L && r"   rp   rt   )r   r   rH   rr   )rH   z
list[Lump])rJ   rK   rL   r=   rM   rP   r   r   r   r   r[   re   r   r   __classcell__r   s   @r!   r   r      sJ    D#GWD$D$#Iy#M+	*r"   r   c                      e Zd ZU dZded<   y)r   r   rB   r=   NrJ   rK   rL   r=   rM   rO   r"   r!   r   r     s    D#r"   r   c                      e Zd ZU dZded<   y)r   r   rB   r=   Nr   rO   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   rB   r=   r   Shellshellr   r1   c                    t         |   ||       t        d||      | _        t        d||      | _        t        d||      | _        y )Nr   r   r1   )r   r[   r   r   r   r1   r   s      r!   r[   zLump.restore_common   sB    v~6'G#GV^D
"66>B	r"   c                    t         |   |       |j                  | j                         |j                  | j                         |j                  | j
                         y r<   )r   re   r   r   r   r1   r   s     r!   re   zLump.write_common&  sF    X&4>>*4::&499%r"   c                    | |_         | j                  j                  r|| _        y| j                  }|j                  j                  s#|j                  }|j                  j                  s#||_        y)z-Append a :class:`Shell` entity as last shell.N)r   r   rG   
next_shell)rF   r   current_shells      r!   append_shellzLump.append_shell,  sY    
::DJ JJM#..66 - 8 8 $..66',M$r"   c                    g }| j                   }|j                  s*|j                  |       |j                  }|j                  s*|S )z5Returns all linked :class:`Shell` entities as a list.)r   rG   r   r   )rF   shellsr   s      r!   r   zLump.shells7  sB    

''MM-()44M  '' r"   rp   rt   )r   r   rH   rr   )rH   zlist[Shell])rJ   rK   rL   r=   rM   rP   r   r   r1   r[   re   r   r   r   r   s   @r!   r   r     s@    D#ItE5D$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   rB   r=   r   SubshellsubshellFacefacer   r   r   r   c                    t         |   ||       t        d||      | _        t        d||      | _        t        d||      | _        t        d||      | _        t        d||      | _        y )Nr   r   r   r   r   )r   r[   r   r   r   r   r   r   r   s      r!   r[   zShell.restore_commonJ  sb    v~6(v~N&z6>J"66>B	"66>B	"66>B	r"   c                2   t         |   |       |j                  | j                         |j                  | j                         |j                  | j
                         |j                  | j                         |j                  | j                         y r<   )r   re   r   r   r   r   r   r   r   s     r!   re   zShell.write_commonR  sj    X&4??+4==)499%499%499%r"   c                    | |_         | j                  j                  r|| _        y| j                  }|j                  j                  s#|j                  }|j                  j                  s#||_        y)z+Append a :class:`Face` entity as last face.N)r   r   rG   	next_face)rF   r   current_faces      r!   append_facezShell.append_faceZ  sY    
99DI99L",,44+55 #,,44%)L"r"   c                    g }| j                   }|j                  s*|j                  |       |j                  }|j                  s*|S )z4Returns all linked :class:`Face` entities as a list.)r   rG   r   r   )rF   facesr   s      r!   r   zShell.facese  r   r"   rp   rt   )r   r   rH   rr   )rH   z
list[Face])rJ   rK   rL   r=   rM   rP   r   r   r   r   r   r[   re   r   r   r   r   s   @r!   r   r   A  sT    D# J !Hh!D$D$D$C&	*r"   r   c                      e Zd ZU dZded<   y)r   r   rB   r=   Nr   rO   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   rB   r=   z'Face'r   Looploopr   r   r   r   SurfacesurfaceFc                ~   t         |   ||       t        d||      | _        t        d||      | _        t        d||      | _        t        d||      | _        t        d||      | _        |j                  dd      | _	        |j                  dd	      | _
        | j                  r|j                  d
d      | _        y y )Nr   r   r   r   r   reversedforwarddoublesingleinout)r   r[   r   r   r   r   r   r   	read_boolsensedouble_sidedcontainmentr   s      r!   r[   zFace.restore_common  s    v~6'G"66>B	#GV^D
&z6>J%iH%%j)<
",,Xx@%//e<D r"   c                   t         |   |       |j                  | j                         |j                  | j                         |j                  | j
                         |j                  | j                         |j                  | j                         |j                  | j                  dd       |j                  | j                  dd       | j                  r|j                  | j                  dd       y y )Nr   r   r   r   r   r   )r   re   r   r   r   r   r   r   
write_boolr   r   r   r   s     r!   re   zFace.write_common  s    X&4>>*499%4::&4==)4<<(DJJ
I>D--xB 0 0$> r"   c                    | |_         | j                  j                  r|| _        y| j                  }|j                  j                  s#|j                  }|j                  j                  s#||_        y)z+Append a :class:`Loop` entity as last loop.N)r   r   rG   	next_loop)rF   r   current_loops      r!   append_loopzFace.append_loop  r   r"   c                    g }| j                   }|j                  s*|j                  |       |j                  }|j                  s*|S )z4Returns all linked :class:`Loop` entities as a list.)r   rG   r   r   )rF   loopsr   s      r!   r   z
Face.loops  r   r"   rp   rt   )r   r   rH   rr   )rH   z
list[Loop])rJ   rK   rL   r=   rM   rP   r   r   r   r   r   r   r   r   r[   re   r   r   r   r   s   @r!   r   r   t  sb    D# Iv D$E5!Hh!GWELK
=
?	*r"   r   c                  b    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y)r   r   rB   r=   c                    |j                         |j                         f| _        |j                         |j                         f| _        y r<   )read_intervalu_boundsv_boundsrc   s     r!   r\   zSurface.restore_data  s>    ,,.0D0D0FF,,.0D0D0FFr"   c                    |j                  | j                  d          |j                  | j                  d          |j                  | j                  d          |j                  | j                  d          y Nr   r	   )write_intervalr  r  rg   s     r!   rf   zSurface.write_data  s^    a 01a 01a 01a 01r"   c                     y)znReturns the spatial location at the parametric surface for the given
        parameters `u` and `v`.

        NrO   rF   uvs      r!   evaluatezSurface.evaluate       	r"   Nrs   )r0   r   r  r   r  r   rH   r   )rJ   rK   rL   r=   rM   INFr  r  r\   rf   abcabstractmethodr  rO   r"   r!   r   r     sC    D#CxHCxHG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-surfacerB   r=   r   r	   Fc                (   t         |   ||       t        |j                               | _        t        |j                               | _        t        |j                               | _        |j                  dd      | _        | j                          y N	reverse_v	forward_v)
r   r[   r   	read_vec3originnormalu_dirr   r  update_v_dirr   s      r!   r[   zPlane.restore_common  sq    v~66++-.6++-.&**,-
))+{Cr"   c                    t         |   |       |j                  | j                         |j	                  | j
                         |j	                  | j                         |j                  | j                  dd       y r  )	r   re   write_loc_vec3r  write_dir_vec3r  r  r   r  r   s     r!   re   zPlane.write_common  s\    X&,,

+DNNKEr"   c                z    | j                   j                  | j                        }| j                  r| }|| _        y r<   )r  crossr  r  v_dir)rF   r#  s     r!   r  zPlane.update_v_dir  s/    !!$**->>FE
r"   c                Z    | j                   | j                  |z  z   | j                  |z  z   S r<   )r  r  r#  r
  s      r!   r  zPlane.evaluate  s&    {{djj1n-a@@r"   rp   rt   r  )rJ   rK   rL   r=   rM   r   r  r  r  r#  r  r[   re   r  r  r   r   s   @r!   r  r    s^    D#!Q]F!Q]FAqMEAqME IF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   rB   r=   r   Coedgecoedger   r   c                    t         |   ||       t        d||      | _        t        d||      | _        t        d||      | _        y )Nr   r'  r   )r   r[   r   r   r'  r   r   s      r!   r[   zLoop.restore_common  sB    v~6'G$Xv~F"66>B	r"   c                    t         |   |       |j                  | j                         |j                  | j                         |j                  | j
                         y r<   )r   re   r   r   r'  r   r   s     r!   re   zLoop.write_common  sF    X&4>>*4;;'499%r"   c                P   t        |      dkD  sJ |d   | _        |dd }|dd }|r*|j                  |d          |j                  d|d          n+|j                  t               |j                  dt               t        |||      D ]  \  }}}| |_        ||_        ||_         y)z"Set all coedges of a loop at once.r   r	   NrR   )	lenr'  r   r   rP   zipr   prev_coedgenext_coedge)rF   coedgesclosenext_coedgesprev_coedgesr'  nextprevs           r!   set_coedgeszLoop.set_coedges   s    7|aajqr{s|
+72;/)8,"%g|\"J 	&FD$FK!%F!%F	&r"   c                    g }| j                   }|j                  s;|j                  |       |j                  }|| j                   u r	 |S |j                  s;|S )z6Returns all linked :class:`Coedge` entities as a list.)r'  rG   r   r.  )rF   r/  current_coedges      r!   r/  zLoop.coedges  sV     ((NN>*+77N, !((
 r"   rp   rt   )T)r/  list[Coedge]rH   rr   rH   r8  )rJ   rK   rL   r=   rM   rP   r   r'  r   r[   re   r5  r/  r   r   s   @r!   r   r     s@    D#ItFFD$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'  rB   r=   r.  r-  partner_coedgeEdgeedgeTrI   r   r   r   r   rS   unknownPCurvepcurvec                Z   t         |   ||       t        d||      | _        t        d||      | _        t        d||      | _        t        d||      | _        |j                  dd      | _        t        d||      | _	        |j                  d      | _        t        d||      | _        y )	Nr'  r=  r   r   r   r   skip_satr@  )r   r[   r   r.  r-  r;  r=  r   r   r   read_intr>  r@  r   s      r!   r[   zCoedge.restore_common1  s    v~6)(FNK)(FNK,Xv~N"66>B	%%j)<
"66>B	2$Xv~Fr"   c                   t         |   |       |j                  | j                         |j                  | j                         |j                  | j
                         |j                  | j                         |j                  | j                  dd       |j                  | j                         |j                  dd       |j                  | j                         y )Nr   r   r   TrB  )r   re   r   r.  r-  r;  r=  r   r   r   	write_intr@  r   s     r!   re   zCoedge.write_common<  s    X&4++,4++,4../499%DJJ
I>499%1t,4;;'r"   c                    |j                   j                  sJ | j                   }|j                  r| }|| _         ||_         | j                          y r<   )r;  rG   order_partner_coedges)rF   r'  r;  s      r!   add_partner_coedgezCoedge.add_partner_coedgeH  sL    $$,,,,,,!!!N$ .""$r"   c                     y r<   rO   rE   s    r!   rH  zCoedge.order_partner_coedgesR  s     	r"   c                    g }| j                   }|j                  r|S 	 |j                  |       |j                   }|j                  s|| u r	 |S 1)z:Returns all partner coedges of this coedge without `self`.)r;  rG   r   )rF   r/  r;  s      r!   partner_coedgeszCoedge.partner_coedgesW  sW     ",,!!NNN>*+::N%%4)? r"   rp   rt   )r'  r&  rH   rr   )rH   rr   r9  )rJ   rK   rL   r=   rM   rP   r.  r-  r;  r=  r   r   r>  r@  r[   re   rI  rH  rL  r   r   s   @r!   r&  r&    s{    D#"K""K"
 &NF%D$ E4D$GSFF	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 )r<  r=  rB   r=   Vertexstart_vertexr   r   start_param
end_vertex	end_paramr&  r'  CurvecurveFrI   r   r>  	convexityc                   t         |   ||       t        d||      | _        |j                  t
        j                  k\  r|j                         | _        t        d||      | _	        |j                  t
        j                  k\  r|j                         | _
        t        d||      | _        t        d||      | _        |j                  dd      | _        |j                  t
        j                  k\  r|j                         | _        y y )Nvertexr'  rT  r   r   )r   r[   r   rO  r/   r   TOL_MODELINGread_doublerP  rQ  rR  r'  rT  r   r   r   rU  r   s      r!   r[   zEdge.restore_commonw  s    v~6*8V^L>>X222%113D(6>J>>X222#//1DN$Xv~F#GV^D
%%j)<
>>X222#__.DN 3r"   c                   t         |   |       |j                  | j                         |j	                  | j
                         |j                  | j                         |j	                  | j                         |j                  | j                         |j                  | j                         |j                  | j                  dd       |j                  | j                         y )Nr   r   )r   re   r   rO  r   rP  rQ  rR  r'  rT  r   r   r   rU  r   s     r!   re   zEdge.write_common  s    X&4,,-d../4??+dnn-4;;'4::&DJJ
I>4>>*r"   rp   rt   )rJ   rK   rL   r=   rM   rP   rO  rP  rQ  rR  r'  rT  r   rU  r[   re   r   r   s   @r!   r<  r<  e  sr    D# $L&#K "J!IuFFE5 E4Is/
+ 
+r"   r<  c                      e Zd ZU dZded<   y)r?  r@  rB   r=   Nr   rO   r"   r!   r?  r?    s    D#r"   r?  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 )rN  rW  rB   r=   r<  r=  r   rS   	ref_countPointpointc                    t         |   ||       t        d||      | _        |j	                  d      | _        t        d||      | _        y )Nr=  r   rB  r_  )r   r[   r   r=  rD  r]  r_  r   s      r!   r[   zVertex.restore_common  sD    v~6"66>B	!4#GV^D
r"   c                    t         |   |       |j                  | j                         |j	                  | j
                  d       |j                  | j                         y )NTrB  )r   re   r   r=  rF  r]  r_  r   s     r!   re   zVertex.write_common  sK    X&499%4>>D94::&r"   rp   rt   )rJ   rK   rL   r=   rM   rP   r=  r]  r_  r[   re   r   r   s   @r!   rN  rN    s;    D#D$IsE5E' 'r"   rN  c                  Z    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y)rS  rT  rB   r=   c                N    |j                         |j                         f| _        y r<   )r  boundsrc   s     r!   r\   zCurve.restore_data  s     **,f.B.B.DDr"   c                |    |j                  | j                  d          |j                  | j                  d          y r  )r  rd  rg   s     r!   rf   zCurve.write_data  s.    A/A/r"   c                     y)z_Returns the spatial location at the parametric curve for the given
        parameter.

        NrO   rF   params     r!   r  zCurve.evaluate  r  r"   Nrs   rt   rh  r   rH   r   )rJ   rK   rL   r=   rM   r  rd  r\   rf   r  r  r  rO   r"   r!   rS  rS    s:    D##XFE0 	 r"   rS  c                  l     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-curverB   r=   r   r	   c                    t        |j                               | _        t        |j                               | _        t        |   |       y r<   )r   r  r  	directionr   r\   )rF   r^   r   s     r!   r\   zStraightCurve.restore_data  s:    6++-.f..01V$r"   c                    |j                  | j                         |j                  | j                         t        |   |       y r<   )r  r  r   rm  r   rf   r   s     r!   rf   zStraightCurve.write_data  s4    ,/8$r"   c                :    | j                   | j                  |z  z   S r<   )r  rm  rg  s     r!   r  zStraightCurve.evaluate  s    {{dnnu455r"   rs   rt   ri  )rJ   rK   rL   r=   rM   r   r  rm  r\   rf   r  r   r   s   @r!   rk  rk    s6     D# !Q]FQ1I%
%
6r"   rk  c                  :    e Zd ZU dZded<   eZded<   d	dZd
dZy)r^  r_  rB   r=   r   locationc                @    t        |j                               | _        y r<   )r   r  rq  rc   s     r!   r\   zPoint.restore_data  s    V--/0r"   c                :    |j                  | j                         y r<   )r  rq  rg   s     r!   rf   zPoint.write_data  s    .r"   Nrs   rt   )	rJ   rK   rL   r=   rM   r   rq  r\   rf   rO   r"   r!   r^  r^    s     D#Hd1/r"   r^  c                  \    e Zd ZU ded<   d	dZd
dZddZd Zej                  dd       Z
y)
FileLoaderz'Sequence[sat.SatEntity | sab.SabEntity]recordsc                     i | _         || _        y r<   )ro   r/   r   s     r!   r   zFileLoader.__init__  s    /1#r"   c                    t        |      }	 | j                  |   S # t        $ r< t        j	                  |j
                  t                     }|| j                  |<   |cY S w xY wr<   )rT   ro   KeyErrorr   getrz   r   )rF   r~   uidentitys       r!   r_   zFileLoader.entity_factory  sZ    n	==%% 	!%%joozBDF!'DMM#M	s    AA! A!c                ~    | j                   j                         D cg c]  }t        |t              s| c}S c c}w r<   )ro   rl   r   r   rm   s     r!   r.   zFileLoader.bodies  s,    ==//1IaZ45HIIIs   ::c                   | j                   }| j                  D ]m  } ||      }|j                  |_        |j                  }|j                  s ||      |_        | j                  |j                        }|j                  ||       o y r<   )r_   rv  rT   rU   ry   make_data_loaderr    r   )rF   r_   r~   r|  rU   data_loaders         r!   load_entitieszFileLoader.load_entities  sx    ,,,, 	5J#J/F"FI#..J))$2:$>!//
@KKK^4	5r"   c                     y r<   rO   rF   r    s     r!   r  zFileLoader.make_data_loader   ra   r"   N)r/   rS   )r~   r   rH   r   )rH   
list[Body]r    z	list[Any]rH   r   )rJ   rK   rL   rM   r   r_   r.   r  r  r  r  rO   r"   r!   ru  ru    s7    44$J
5 	 r"   ru  c                  :     e Zd Zd fdZddZedd       Z xZS )r   c                    t        j                  |      }t        |   |j                  j
                         |j                  | _        y r<   )r
   	parse_sabr   r   r)   r/   ro   rv  rF   r    builderr   s      r!   r   zSabLoader.__init__  5    --%//0''r"   c                B    t        j                  || j                        S r<   )r
   SabDataLoaderr/   r  s     r!   r  zSabLoader.make_data_loader        t||44r"   c                R     | |      }|j                          |j                         S r<   r  r.   r>   r    r^   s      r!   r   zSabLoader.load  #    T}}r"   )r    bytes | bytearrayr  )r    r  rH   r  rJ   rK   rL   r   r  classmethodr   r   r   s   @r!   r   r     !    (
5  r"   r   c                  :     e Zd Zd fdZddZedd       Z xZS )r   c                    t        j                  |      }t        |   |j                  j
                         |j                  | _        y r<   )r   	parse_satr   r   r)   r/   ro   rv  r  s      r!   r   zSatLoader.__init__  r  r"   c                B    t        j                  || j                        S r<   )r   SatDataLoaderr/   r  s     r!   r  zSatLoader.make_data_loader  r  r"   c                R     | |      }|j                          |j                         S r<   r  r  s      r!   r   zSatLoader.load  r  r"   )r    str | Sequence[str]r  )r    r  rH   r  r  r   s   @r!   r   r     r  r"   r   )r    r   rH   r  )r.   Sequence[Body]r/   rS   rH   z	list[str])r.   r  r/   rS   rH   r   )rH   zhdr.AcisHeader)r}   rB   r^   r   r_   rq   rH   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   rq   r   rM   r   r  r   DEFAULT_SAT_VERSIONr2   DEFAULT_SAB_VERSIONr6   r(   r?   rA   rP   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r&  r<  r?  rN  rS  rk  r^  ABCru  r   r   rO   r"   r!   <module>r     s?   # : : 
 " "  > > # . .
N#\1
2,.) .El  ,1+D+D%(. ,1+D+D%(
.
3 3 # 7 7t

 *
<C

 
'
 ' 
'B 

)
 
) 

))j ) 
%? % 
%P 
?  
 
j  
 
$? $ 
$N 
*O * 
*Z 
  
 
6? 6 
6r 
o  
0 
"AG "A 
"AJ 
.? . 
.b 
B_ B 
BJ 
)+? )+ 
)+X 
_  
 
'_ ' 
'& 
O  
( 
6E 6 
6& 
/O / 
/" "J
  
 r"   