
    h,m                    Z   % S SK Jr  S SKJrJrJrJrJr  S SKrSSK	J
r
JrJrJr  SSKJr  SSKJrJrJr  SSKJr  S S	KJrJrJr  \\/S
4   r0 rS\S'   \" S5      rSGS jr\R>                  4     SHS jjr \RB                  4     SIS jjr"SJS jr#S r$ " S S5      r%\%" 5       r&S\S'    " S S
\%5      r'        SKS jr(\$ " S S\'5      5       r)\$ " S S\'5      5       r* " S S\'5      r+\$ " S S \+5      5       r,\$ " S! S"\+5      5       r-\$ " S# S$\'5      5       r.\$ " S% S&\+5      5       r/\$ " S' S(\+5      5       r0\$ " S) S*\+5      5       r1\$ " S+ S,\+5      5       r2\$ " S- S.\+5      5       r3\$ " S/ S0\35      5       r4\$ " S1 S2\+5      5       r5\$ " S3 S4\+5      5       r6\$ " S5 S6\+5      5       r7\$ " S7 S8\+5      5       r8\$ " S9 S:\+5      5       r9\$ " S; S<\+5      5       r:\$ " S= S>\:5      5       r;\$ " S? S@\+5      5       r< " SA SB\Rz                  5      r> " SC SD\>5      r? " SE SF\>5      r@g)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                    [        U [        [        45      (       a  [        R	                  U 5      $ [
        R	                  U 5      $ )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    E/var/www/html/env/lib/python3.13/site-packages/ezdxf/acis/entities.pyr   r      s4     $	*++~~d##>>$    c                   U[         R                  :  a  [         R                  " SU 35      e[        R                  " [        U5      5      nSUR                  l        U  H  nUR                  U5        M     UR                  5       $ )a@  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      sp     )))"8	 BCC3G<=H%*HOO" r"   c                   U[         R                  :  a  [         R                  " SU 35      e[        R                  " [        U5      5      nSUR                  l        U  H  nUR                  U5        M     UR                  5       $ )a:  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   sp     )))"8	 BCC3G<=H%)HOO" r"   c                    [         R                  " U 5      (       d  [         R                  " SU  35      e[        R                  " 5       nUR                  U 5        U$ )Nzinvalid export version: )r   is_valid_export_versionr&   r   
AcisHeaderset_version)r/   r)   s     r!   r(   r(   K   sK    ((11":7) DEE^^F
wMr"   c                ,    U [         U R                  '   U $ N)r   type)clss    r!   registerr?   S   s     LJr"   c                  L    \ rS rSr% \R
                  rS\S'   \SS j5       r	Sr
g)
NoneEntityX   strr=   c                <    U R                   [        R                  :H  $ r<   )r=   r   NONE_ENTITY_NAMEselfs    r!   is_noneNoneEntity.is_none[   s    yyE2222r"    N)returnbool)__name__
__module____qualname____firstlineno__r   rE   r=   __annotations__propertyrH   __static_attributes__rJ   r"   r!   rA   rA   X   s$    &&D#&3 3r"   rA   r   NONE_REFc                      \ rS rSr% SrSrS\S'   SrS\S'   \r	S \S	'   SS
 jr
SS jrSS jrSS jrSS jrSS jrSS jrSS jrSrg)r   c   a]  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-entityrC   r=   intid
attributesc                :    U R                    SU R                   S3$ )N())r=   rY   rF   s    r!   __str__AcisEntity.__str__s   s    ))AdggYa((r"   c                H    U R                  X5        U R                  U5        g)z+Load the ACIS entity content from `loader`.N)restore_commonrestore_datarG   loaderentity_factorys      r!   r   AcisEntity.loadv   s    F3&!r"   c                    g)z'Load the common part of an ACIS entity.NrJ   rc   s      r!   ra   AcisEntity.restore_common{       r"   c                    g)z%Load the data part of an ACIS entity.NrJ   rG   rd   s     r!   rb   AcisEntity.restore_data   ri   r"   c                H    U R                  U5        U R                  U5        g)z,Write the ACIS entity content to `exporter`.N)write_common
write_datarG   r0   s     r!   r+   AcisEntity.export   s    (#!r"   c                H    [         R                  " SU R                   35      e)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=   rp   s     r!   rn   AcisEntity.write_common   s!     ";DII; GHHr"   c                    g)z'Write the data part of the ACIS entity.NrJ   rp   s     r!   ro   AcisEntity.write_data   ri   r"   c              #     #    [        U 5      R                  5        H  n[        U[        5      (       d  M  Uv   M      g7f)z7Yield all attributes of this entity of type AcisEntity.N)varsvaluesr   r   rG   es     r!   entitiesAcisEntity.entities   s.     d""$A!Z(( %s   0?	?rJ   N)rK   rC   rd   r   re   FactoryrK   Nonerd   r   rK   r   r0   r   rK   r   )rK   zIterator[AcisEntity])rM   rN   rO   rP   __doc__r=   rQ   rY   rT   rZ   r^   r   ra   rb   r+   rn   ro   r{   rS   rJ   r"   r!   r   r   c   sO    	 %D#$BL%J
%)"
"
Ir"   c                    UR                  5       nUR                  (       a  [        $ UR                  R	                  U 5      (       a  U" U5      $ [
        R                  " SU  SUR                   S35      e)Nzexpected entity type 'z', got '')read_ptris_null_ptrrT   nameendswithr   ParsingError)expected_typerd   re   
raw_entitys       r!   restore_entityr      sh     "J..j))  $]O8JOO;LAN
 	
r"   c                  F    \ rS rSr% SrS\S'   \" 5       rS	S jrS
S jr	Sr
g)	Transform   	transformrC   r=   c                    UR                  5       nUR                  SS5        UR                  SS5        UR                  SS5        UR                  S5        [        U5      U l        g )N                 g      ?)read_transforminsertappendr   matrix)rG   rd   r    s      r!   rb   Transform.restore_data   sQ    $$&AsAsBCtnr"   c                  ^ S
U4S jjn/ mU R                   R                  5        H$  nU" US   5        U" US   5        U" US   5        M&     [        SSS5      nU R                   R                  U5      nU" [	        UR
                  S5      5        UR                  5       R                  U5      (       + nTR                  U(       a  SOS5        TR                  S5        TR                  S	5        UR                  T5        g )Nc                ,   > TR                  U S 5        g )Ng)r   )valuer    s    r!   write_double,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)rG   r0   r   rowtest_vectorresult
is_rotatedr    s          @r!   rn   Transform.write_common   s    	& ;;##%CQ Q Q  & 1am00=U6++Q/0))+33K@@

H<L!J  &r"   )r   Nr   r   )rM   rN   rO   rP   r=   rQ   r   r   rb   rn   rS   rJ   r"   r!   r   r      s    D#ZF%'r"   r   c                  F    \ rS rSr% SrS\S'   S
SS jjrSS jrSS jrSr	g	)	AsmHeader   	asmheaderrC   r=   c                    Xl         g r<   r/   rG   r/   s     r!   __init__AsmHeader.__init__   s    r"   c                .    UR                  5       U l        g r<   )read_strr/   rc   s      r!   ra   AsmHeader.restore_common   s    (r"   c                :    UR                  U R                  5        g r<   )	write_strr/   rp   s     r!   rn   AsmHeader.write_common       4<<(r"   r   N) )r/   rC   r}   r   )
rM   rN   rO   rP   r=   rQ   r   ra   rn   rS   rJ   r"   r!   r   r      s    D#))r"   r   c                  8    \ rS rSr% \rS\S'   SS jrS	S jrSr	g)
SupportsPattern   Patternpatternc                d    UR                   [        R                  :  a  [        SX5      U l        g g )Nr   )r/   r   PATTERNr   r   rc   s      r!   ra   SupportsPattern.restore_common   s'    >>X---))VLDL .r"   c                :    UR                  U R                  5        g r<   )	write_ptrr   rp   s     r!   rn   SupportsPattern.write_common   r   r"   )r   Nr}   r   )
rM   rN   rO   rP   rT   r   rQ   ra   rn   rS   rJ   r"   r!   r   r      s    GWM)r"   r   c                     ^  \ rS rSr% SrS\S'   \rS\S'   \rS\S'   \r	S	\S
'   \r
S\S'   SU 4S jjrSU 4S jjrSS jrSS jrSrU =r$ )Body   r1   rC   r=   r   r   LumplumpWirewirer   r   c                   > [         TU ]  X5        [        SX5      U l        [        SX5      U l        [        SX5      U l        g )Nr   r   r   )superra   r   r   r   r   rG   rd   re   	__class__s      r!   ra   Body.restore_common   s:    v6"66B	"66B	'VLr"   c                   > [         TU ]  U5        UR                  U R                  5        UR                  U R                  5        UR                  U R
                  5        g r<   )r   rn   r   r   r   r   rG   r0   r   s     r!   rn   Body.write_common   sF    X&499%499%4>>*r"   c                    Xl         U R                  R                  (       a  Xl        gU R                  nUR                  R                  (       d)  UR                  nUR                  R                  (       d  M)  Xl        g)z+Append a :class:`Lump` entity as last lump.N)r1   r   rH   	next_lump)rG   r   current_lumps      r!   append_lumpBody.append_lump   V    	99I99L",,44+55 #,,444%)"r"   c                    / nU R                   nUR                  (       d0  UR                  U5        UR                  nUR                  (       d  M0  U$ )z4Returns all linked :class:`Lump` entities as a list.)r   rH   r   r   )rG   lumpsr   s      r!   r   
Body.lumps  E    yy&&LL&'11L &&& r"   )r   r   r   r}   r   )r   r   rK   r   )rK   z
list[Lump])rM   rN   rO   rP   r=   rQ   rT   r   r   r   r   ra   rn   r   r   rS   __classcell__r   s   @r!   r   r      sO    D#GWD$D$#Iy#M+	* r"   r   c                  $    \ rS rSr% SrS\S'   Srg)r   i  r   rC   r=   rJ   NrM   rN   rO   rP   r=   rQ   rS   rJ   r"   r!   r   r     s    D#r"   r   c                  $    \ rS rSr% SrS\S'   Srg)r   i  r   rC   r=   rJ   Nr   rJ   r"   r!   r   r     s    D#r"   r   c                     ^  \ rS rSr% SrS\S'   \rS \S'   \rS\S'   \r	S\S	'   SU 4S
 jjr
SU 4S jjrSS jrSS jrSrU =r$ )r   i  r   rC   r=   r   Shellshellr   r1   c                   > [         TU ]  X5        [        SX5      U l        [        SX5      U l        [        SX5      U l        g )Nr   r   r1   )r   ra   r   r   r   r1   r   s      r!   ra   Lump.restore_common   s:    v6'G#GVD
"66B	r"   c                   > [         TU ]  U5        UR                  U R                  5        UR                  U R                  5        UR                  U R
                  5        g r<   )r   rn   r   r   r   r1   r   s     r!   rn   Lump.write_common&  sF    X&4>>*4::&499%r"   c                    Xl         U R                  R                  (       a  Xl        gU R                  nUR                  R                  (       d)  UR                  nUR                  R                  (       d  M)  Xl        g)z-Append a :class:`Shell` entity as last shell.N)r   r   rH   
next_shell)rG   r   current_shells      r!   append_shellLump.append_shell,  sV    
::J JJM#..66 - 8 8 $..666',$r"   c                    / nU R                   nUR                  (       d0  UR                  U5        UR                  nUR                  (       d  M0  U$ )z5Returns all linked :class:`Shell` entities as a list.)r   rH   r   r   )rG   shellsr   s      r!   r   Lump.shells7  sE    

''MM-()44M  ''' r"   )r1   r   r   r}   r   )r   r   rK   r   )rK   zlist[Shell])rM   rN   rO   rP   r=   rQ   rT   r   r   r1   ra   rn   r   r   rS   r   r   s   @r!   r   r     sE    D#ItE5D$C&	- r"   r   c                     ^  \ rS rSr% SrS\S'   \rS \S'   \rS\S'   \r	S\S	'   \r
S
\S'   \rS\S'   SU 4S jjrSU 4S jjrSS jrSS jrSrU =r$ )r   iA  r   rC   r=   r   SubshellsubshellFacefacer   r   r   r   c                   > [         TU ]  X5        [        SX5      U l        [        SX5      U l        [        SX5      U l        [        SX5      U l        [        SX5      U l        g )Nr   r   r  r   r   )r   ra   r   r   r   r  r   r   r   s      r!   ra   Shell.restore_commonJ  sV    v6(vN&z6J"66B	"66B	"66B	r"   c                2  > [         TU ]  U5        UR                  U R                  5        UR                  U R                  5        UR                  U R
                  5        UR                  U R                  5        UR                  U R                  5        g r<   )r   rn   r   r   r   r  r   r   r   s     r!   rn   Shell.write_commonR  sj    X&4??+4==)499%499%499%r"   c                    Xl         U R                  R                  (       a  Xl        gU R                  nUR                  R                  (       d)  UR                  nUR                  R                  (       d  M)  Xl        g)z+Append a :class:`Face` entity as last face.N)r   r  rH   	next_face)rG   r  current_faces      r!   append_faceShell.append_faceZ  sV    
99I99L",,44+55 #,,444%)"r"   c                    / nU R                   nUR                  (       d0  UR                  U5        UR                  nUR                  (       d  M0  U$ )z4Returns all linked :class:`Face` entities as a list.)r  rH   r   r  )rG   facesr  s      r!   r  Shell.facese  r   r"   )r  r   r   r   r   r}   r   )r  r   rK   r   )rK   z
list[Face])rM   rN   rO   rP   r=   rQ   rT   r   r   r  r   r   ra   rn   r	  r  rS   r   r   s   @r!   r   r   A  sY    D# J !Hh!D$D$D$C&	* r"   r   c                  $    \ rS rSr% SrS\S'   Srg)r   io  r   rC   r=   rJ   Nr   rJ   r"   r!   r   r   o  s    D#r"   r   c                     ^  \ rS rSr% SrS\S'   \rS\S'   \rS\S'   \r	S	\S
'   \r
S\S'   \rS\S'   SrSrSrSU 4S jjrSU 4S jjrSS jrSS jrSrU =r$ )r   it  r  rC   r=   z'Face'r  Looploopr   r   r   r   SurfacesurfaceFc                |  > [         TU ]  X5        [        SX5      U l        [        SX5      U l        [        SX5      U l        [        SX5      U l        [        SX5      U l        UR                  SS5      U l	        UR                  SS	5      U l
        U R                  (       a  UR                  S
S5      U l        g g )Nr  r  r   r   r  reversedforwarddoublesingleinout)r   ra   r   r  r  r   r   r  	read_boolsensedouble_sidedcontainmentr   s      r!   ra   Face.restore_common  s    v6'G"66B	#GVD
&z6J%iH%%j)<
",,Xx@%//e<D r"   c                  > [         TU ]  U5        UR                  U R                  5        UR                  U R                  5        UR                  U R
                  5        UR                  U R                  5        UR                  U R                  5        UR                  U R                  SS5        UR                  U R                  SS5        U R                  (       a  UR                  U R                  SS5        g g )Nr  r  r  r  r  r  )r   rn   r   r  r  r   r   r  
write_boolr  r  r  r   s     r!   rn   Face.write_common  s    X&4>>*499%4::&4==)4<<(DJJ
I>D--xB 0 0$> r"   c                    Xl         U R                  R                  (       a  Xl        gU R                  nUR                  R                  (       d)  UR                  nUR                  R                  (       d  M)  Xl        g)z+Append a :class:`Loop` entity as last loop.N)r  r  rH   	next_loop)rG   r  current_loops      r!   append_loopFace.append_loop  r   r"   c                    / nU R                   nUR                  (       d0  UR                  U5        UR                  nUR                  (       d  M0  U$ )z4Returns all linked :class:`Loop` entities as a list.)r  rH   r   r$  )rG   loopsr%  s      r!   r)  
Face.loops  r   r"   )r  r  r  r  r  r   r   r  r}   r   )r  r  rK   r   )rK   z
list[Loop])rM   rN   rO   rP   r=   rQ   rT   r  r  r   r   r  r  r  r  ra   rn   r&  r)  rS   r   r   s   @r!   r   r   t  sg    D# Iv D$E5!Hh!GWELK
=
?	* r"   r   c                  p    \ rS rSr% SrS\S'   \\4r\\4rS
S jr	SS jr
\R                  SS j5       rSrg	)r  i  r  rC   r=   c                    UR                  5       UR                  5       4U l        UR                  5       UR                  5       4U l        g r<   )read_intervalu_boundsv_boundsrk   s     r!   rb   Surface.restore_data  s>    ,,.0D0D0FF,,.0D0D0FFr"   c                    UR                  U R                  S   5        UR                  U R                  S   5        UR                  U R                  S   5        UR                  U R                  S   5        g Nr   r	   )write_intervalr.  r/  rp   s     r!   ro   Surface.write_data  s^    a 01a 01a 01a 01r"   c                    g)z^Returns the spatial location at the parametric surface for the given
parameters `u` and `v`.

NrJ   rG   uvs      r!   evaluateSurface.evaluate       	r"   )r.  r/  Nr   )r0   r   r7  r   r8  r   rK   r   )rM   rN   rO   rP   r=   rQ   INFr.  r/  rb   ro   abcabstractmethodr9  rS   rJ   r"   r!   r  r    sC    D#CxHCxHG2 	 r"   r  c                     ^  \ rS rSr% SrS\S'   \" SSS5      r\" SSS5      r\" SSS5      r	\" SSS5      r
SrSU 4S jjrSU 4S	 jjrS
 rSS jrSrU =r$ )Planei  zplane-surfacerC   r=   r   r	   Fc                &  > [         TU ]  X5        [        UR                  5       5      U l        [        UR                  5       5      U l        [        UR                  5       5      U l        UR                  SS5      U l        U R                  5         g N	reverse_v	forward_v)
r   ra   r   	read_vec3originnormalu_dirr  rD  update_v_dirr   s      r!   ra   Plane.restore_common  so    v66++-.6++-.&**,-
))+{Cr"   c                   > [         TU ]  U5        UR                  U R                  5        UR	                  U R
                  5        UR	                  U R                  5        UR                  U R                  SS5        g rC  )	r   rn   write_loc_vec3rG  write_dir_vec3rH  rI  r!  rD  r   s     r!   rn   Plane.write_common  s\    X&,,

+DNNKEr"   c                    U R                   R                  U R                  5      nU R                  (       a  U* nXl        g r<   )rH  crossrI  rD  v_dir)rG   rR  s     r!   rJ  Plane.update_v_dir  s-    !!$**->>FE
r"   c                Z    U R                   U R                  U-  -   U R                  U-  -   $ r<   )rG  rI  rR  r6  s      r!   r9  Plane.evaluate  s&    {{djj1n-a@@r"   )rH  rG  rD  rI  rR  r}   r   r<  )rM   rN   rO   rP   r=   rQ   r   rG  rH  rI  rR  rD  ra   rn   rJ  r9  rS   r   r   s   @r!   rA  rA    sd    D#!Q]F!Q]FAqMEAqME IFA Ar"   rA  c                     ^  \ rS rSr% SrS\S'   \rS \S'   \rS\S'   \r	S\S	'   SU 4S
 jjr
SU 4S jjrSSS jjrSS jrSrU =r$ )r  i  r  rC   r=   r$  Coedgecoedger   r  c                   > [         TU ]  X5        [        SX5      U l        [        SX5      U l        [        SX5      U l        g )Nr  rX  r  )r   ra   r   r$  rX  r  r   s      r!   ra   Loop.restore_common  s:    v6'G$XvF"66B	r"   c                   > [         TU ]  U5        UR                  U R                  5        UR                  U R                  5        UR                  U R
                  5        g r<   )r   rn   r   r$  rX  r  r   s     r!   rn   Loop.write_common  sF    X&4>>*4;;'499%r"   c                V   [        U5      S:  d   eUS   U l        USS nUSS nU(       a*  UR                  US   5        UR                  SUS   5        O+UR                  [        5        UR                  S[        5        [        XU5       H  u  pVnXl        Xul        Xel        M     g)z"Set all coedges of a loop at once.r   r	   NrW   )	lenrX  r   r   rT   zipr  prev_coedgenext_coedge)rG   coedgesclosenext_coedgesprev_coedgesrX  nextprevs           r!   set_coedgesLoop.set_coedges   s    7|aajqr{s|
+72;/)8,"%g\"JF$K!%!% #Kr"   c                    / nU R                   nUR                  (       dA  UR                  U5        UR                  nX R                   L a   U$ UR                  (       d  MA  U$ )z6Returns all linked :class:`Coedge` entities as a list.)rX  rH   r   ra  )rG   rb  current_coedges      r!   rb  Loop.coedges  sW     ((NN>*+77N, !(((
 r"   )rX  r  r$  r}   r   )T)rb  list[Coedge]rK   r   rK   rm  )rM   rN   rO   rP   r=   rQ   rT   r$  rX  r  ra   rn   rh  rb  rS   r   r   s   @r!   r  r    sE    D#ItFFD$C&&$
 
r"   r  c                     ^  \ rS rSr% SrS\S'   \rS \S'   \rS \S'   \r	S \S'   \r
S\S	'   S
rS\S'   \rS\S'   SrS\S'   \rS\S'   SU 4S jjrSU 4S jjrSS jrSS jrSS jrSrU =r$ )rW  i  rX  rC   r=   ra  r`  partner_coedgeEdgeedgeTrL   r  r  r  r   rX   unknownPCurvepcurvec                F  > [         TU ]  X5        [        SX5      U l        [        SX5      U l        [        SX5      U l        [        SX5      U l        UR                  SS5      U l        [        SX5      U l	        UR                  SS9U l        [        SX5      U l        g )	NrX  rr  r  r  r  r   skip_satru  )r   ra   r   ra  r`  rp  rr  r  r  r  read_intrs  ru  r   s      r!   ra   Coedge.restore_common1  s    v6)(FK)(FK,XvN"66B	%%j)<
"66B	2$XvFr"   c                  > [         TU ]  U5        UR                  U R                  5        UR                  U R                  5        UR                  U R
                  5        UR                  U R                  5        UR                  U R                  SS5        UR                  U R                  5        UR                  SSS9  UR                  U R                  5        g )Nr  r  r   Trw  )r   rn   r   ra  r`  rp  rr  r!  r  r  	write_intru  r   s     r!   rn   Coedge.write_common<  s    X&4++,4++,4../499%DJJ
I>499%1t,4;;'r"   c                    UR                   R                  (       d   eU R                   nUR                  (       a  U nXl         X!l         U R                  5         g r<   )rp  rH   order_partner_coedges)rG   rX  rp  s      r!   add_partner_coedgeCoedge.add_partner_coedgeH  sH    $$,,,,,,!!!N$ .""$r"   c                    g r<   rJ   rF   s    r!   r  Coedge.order_partner_coedgesR  s     	r"   c                    / nU R                   nUR                  (       a  U$  UR                  U5        UR                   nUR                  (       d  X L a   U$ M7  )z:Returns all partner coedges of this coedge without `self`.)rp  rH   r   )rG   rb  rp  s      r!   partner_coedgesCoedge.partner_coedgesW  sU     ",,!!NNN>*+::N%%)? r"   )rr  r  ra  rp  ru  r`  r  rs  r}   r   )rX  rW  rK   r   )rK   r   rn  )rM   rN   rO   rP   r=   rQ   rT   ra  r`  rp  rr  r  r  rs  ru  ra   rn   r  r  r  rS   r   r   s   @r!   rW  rW    s    D#"K""K"
 &NF%D$ E4D$GSFF	G
(%
 r"   rW  c                     ^  \ rS rSr% SrS\S'   \rS\S'   SrS\S	'   \r	S\S
'   Sr
S\S'   \rS\S'   \rS\S'   SrS\S'   SrS\S'   SU 4S jjrSU 4S jjrSrU =r$ )rq  ie  rr  rC   r=   Vertexstart_vertexr   r   start_param
end_vertex	end_paramrW  rX  CurvecurveFrL   r  rs  	convexityc                  > [         TU ]  X5        [        SX5      U l        UR                  [
        R                  :  a  UR                  5       U l        [        SX5      U l	        UR                  [
        R                  :  a  UR                  5       U l
        [        SX5      U l        [        SX5      U l        UR                  SS5      U l        UR                  [
        R                  :  a  UR                  5       U l        g g )NvertexrX  r  r  r  )r   ra   r   r  r/   r   TOL_MODELINGread_doubler  r  r  rX  r  r  r  r   r  r   s      r!   ra   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U ]  U5        UR                  U R                  5        UR	                  U R
                  5        UR                  U R                  5        UR	                  U R                  5        UR                  U R                  5        UR                  U R                  5        UR                  U R                  SS5        UR                  U R                  5        g )Nr  r  )r   rn   r   r  r   r  r  r  rX  r  r!  r  r   r  r   s     r!   rn   Edge.write_common  s    X&4,,-d../4??+dnn-4;;'4::&DJJ
I>4>>*r"   )rX  r  r  r  r  r  r  r  r}   r   )rM   rN   rO   rP   r=   rQ   rT   r  r  r  r  rX  r  r  r  ra   rn   rS   r   r   s   @r!   rq  rq  e  sr    D# $L&#K "J!IuFFE5 E4Is/
+ 
+r"   rq  c                  $    \ rS rSr% SrS\S'   Srg)rt  i  ru  rC   r=   rJ   Nr   rJ   r"   r!   rt  rt    s    D#r"   rt  c                  v   ^  \ rS rSr% SrS\S'   \rS\S'   SrS\S	'   \r	S
\S'   SU 4S jjr
SU 4S jjrSrU =r$ )r  i  r  rC   r=   rq  rr  r   rX   	ref_countPointpointc                   > [         TU ]  X5        [        SX5      U l        UR	                  SS9U l        [        SX5      U l        g )Nrr  r   rw  r  )r   ra   r   rr  ry  r  r  r   s      r!   ra   Vertex.restore_common  s>    v6"66B	!4#GVD
r"   c                   > [         TU ]  U5        UR                  U R                  5        UR	                  U R
                  SS9  UR                  U R                  5        g )NTrw  )r   rn   r   rr  r|  r  r  r   s     r!   rn   Vertex.write_common  sK    X&499%4>>D94::&r"   )rr  r  r  r}   r   )rM   rN   rO   rP   r=   rQ   rT   rr  r  r  ra   rn   rS   r   r   s   @r!   r  r    s;    D#D$IsE5E' 'r"   r  c                  h    \ rS rSr% SrS\S'   \\4rS
S jrSS jr	\
R                  SS j5       rSrg	)r  i  r  rC   r=   c                N    UR                  5       UR                  5       4U l        g r<   )r-  boundsrk   s     r!   rb   Curve.restore_data  s     **,f.B.B.DDr"   c                |    UR                  U R                  S   5        UR                  U R                  S   5        g r2  )r3  r  rp   s     r!   ro   Curve.write_data  s.    A/A/r"   c                    g)zOReturns the spatial location at the parametric curve for the given
parameter.

NrJ   rG   params     r!   r9  Curve.evaluate  r;  r"   )r  Nr   r   r  r   rK   r   )rM   rN   rO   rP   r=   rQ   r=  r  rb   ro   r>  r?  r9  rS   rJ   r"   r!   r  r    s:    D##XFE0 	 r"   r  c                  ~   ^  \ rS rSr% SrS\S'   \" SSS5      r\" SSS5      rSU 4S jjr	SU 4S jjr
SS	 jrS
rU =r$ )StraightCurvei  zstraight-curverC   r=   r   r	   c                   > [        UR                  5       5      U l        [        UR                  5       5      U l        [        TU ]  U5        g r<   )r   rF  rG  	directionr   rb   )rG   rd   r   s     r!   rb   StraightCurve.restore_data  s:    6++-.f..01V$r"   c                   > UR                  U R                  5        UR                  U R                  5        [        TU ]  U5        g r<   )rM  rG  rN  r  r   ro   r   s     r!   ro   StraightCurve.write_data  s4    ,/8$r"   c                :    U R                   U R                  U-  -   $ r<   )rG  r  r  s     r!   r9  StraightCurve.evaluate  s    {{dnnu455r"   )r  rG  r   r   r  )rM   rN   rO   rP   r=   rQ   r   rG  r  rb   ro   r9  rS   r   r   s   @r!   r  r    s;     D# !Q]FQ1I%
%
6 6r"   r  c                  F    \ rS rSr% SrS\S'   \rS\S'   SS jrSS jr	S	r
g
)r  i  r  rC   r=   r   locationc                @    [        UR                  5       5      U l        g r<   )r   rF  r  rk   s     r!   rb   Point.restore_data  s    V--/0r"   c                :    UR                  U R                  5        g r<   )rM  r  rp   s     r!   ro   Point.write_data  s    .r"   )r  Nr   r   )rM   rN   rO   rP   r=   rQ   r   r  rb   ro   rS   rJ   r"   r!   r  r    s     D#Hd1/r"   r  c                  l    \ rS rSr% S\S'   SS jrSS jrSS jrS r\	R                  SS j5       rS	rg
)
FileLoaderi  z'Sequence[sat.SatEntity | sab.SabEntity]recordsc                    0 U l         Xl        g r<   r{   r/   r   s     r!   r   FileLoader.__init__  s    /1#r"   c                    [        U5      n U R                  U   $ ! [         a<    [        R	                  UR
                  [        5      " 5       nX0R                  U'   Us $ f = fr<   )rY   r{   KeyErrorr   getr   r   )rG   r   uidentitys       r!   re   FileLoader.entity_factory  sX    n	==%% 	!%%joozBDF!'MM#M	s    AA"!A"c                    U R                   R                  5        Vs/ s H  n[        U[        5      (       d  M  UPM     sn$ s  snf r<   )r{   rx   r   r   ry   s     r!   r.   FileLoader.bodies  s2    ==//1I1aZ45H1IIIs
   AAc                    U R                   nU R                   Hr  nU" U5      nUR                  Ul        UR                  nUR                  (       d  U" U5      Ul        U R                  UR                  5      nUR                  XQ5        Mt     g r<   )re   r  rY   rZ   r   make_data_loaderr    r   )rG   re   r   r  rZ   data_loaders         r!   load_entitiesFileLoader.load_entities  sq    ,,,,J#J/F"FI#..J))$2:$>!//
@KKK4 'r"   c                    g r<   rJ   rG   r    s     r!   r  FileLoader.make_data_loader   ri   r"   r  N)r/   rX   )r   r   rK   r   )rK   
list[Body]r    z	list[Any]rK   r   )rM   rN   rO   rP   rQ   r   re   r.   r  r>  r?  r  rS   rJ   r"   r!   r  r    s7    44$J
5 	 r"   r  c                  J   ^  \ rS rSrSU 4S jjrSS jr\SS j5       rSrU =r	$ )	r   i  c                   > [         R                  " U5      n[        TU ]  UR                  R
                  5        UR                  U l        g r<   )r
   	parse_sabr   r   r)   r/   r{   r  rG   r    builderr   s      r!   r   SabLoader.__init__  5    --%//0''r"   c                B    [         R                  " XR                  5      $ r<   )r
   SabDataLoaderr/   r  s     r!   r  SabLoader.make_data_loader        ||44r"   c                R    U " U5      nUR                  5         UR                  5       $ r<   r  r.   r>   r    rd   s      r!   r   SabLoader.load  #    T}}r"   r  )r    bytes | bytearrayr  )r    r  rK   r  
rM   rN   rO   rP   r   r  classmethodr   rS   r   r   s   @r!   r   r     !    (
5  r"   r   c                  J   ^  \ rS rSrSU 4S jjrSS jr\SS j5       rSrU =r	$ )	r   i  c                   > [         R                  " U5      n[        TU ]  UR                  R
                  5        UR                  U l        g r<   )r   	parse_satr   r   r)   r/   r{   r  r  s      r!   r   SatLoader.__init__  r  r"   c                B    [         R                  " XR                  5      $ r<   )r   SatDataLoaderr/   r  s     r!   r  SatLoader.make_data_loader  r  r"   c                R    U " U5      nUR                  5         UR                  5       $ r<   r  r  s      r!   r   SatLoader.load  r  r"   r  )r    str | Sequence[str]r  )r    r  rK   r  r  r   s   @r!   r   r     r  r"   r   )r    r   rK   r  )r.   Sequence[Body]r/   rX   rK   z	list[str])r.   r  r/   rX   rK   r   )rK   zhdr.AcisHeader)r   rC   rd   r   re   r~   rK   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   rQ   r   r=  r   DEFAULT_SAT_VERSIONr2   DEFAULT_SAB_VERSIONr6   r(   r?   rA   rT   r   r   r   r   r   r   r   r   r   r   r   r   r  rA  r  rW  rq  rt  r  r  r  r  ABCr  r   r   rJ   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"   