
    Og'                    H   d Z ddlmZ ddlmZmZmZmZmZ ddl	Z	ddl
mZ ddlmZmZ ddlmZ ddlmZmZ erdd	lmZ dd
lmZ  G d de	j0                        Z G d d      Z G d de      Z G d de      Z G d de      ZddZddZddZ d dZ!d!dZ"deiZ#dZ$d"dZ%y)#a$  
ACDSDATA entities have NO handles, therefore they can not be stored in the
drawing entity database.

section structure (work in progress):
0 <str> SECTION
2 <str> ACDSDATA
70 <int> 2 # flag?
71 <int> 6 # count of following ACDSSCHEMA entities ??? no, just another flag

0 <str> ACDSSCHEMA           # dxftype: schema definition
90 <int> 0                   # schema number 0, 1, 2, 3 ...
1 <str> AcDb3DSolid_ASM_Data # schema name

2 <str> AcDbDs::ID           # subsection name
280 <int> 10                 # subsection type 10 = ???
91 <int> 8                   # data ???

2 <str> ASM_Data             # subsection name
280 <int> 15                 # subsection type
91 <int> 0                   # data ???
101 <str> ACDSRECORD         # data
95 <int> 0
90 <int> 2
...

0 <str> ACDSSCHEMA
90 <int> 1
1 <str> AcDb_Thumbnail_Schema
...

0 <str> ACDSSCHEMA
90 <int> 2
1 <str> AcDbDs::TreatedAsObjectDataSchema
...

0 <str> ACDSSCHEMA
90 <int> 3
1 <str> AcDbDs::LegacySchema
2 <str> AcDbDs::Legacy
280 <int> 1
91 <int> 0

0 <str> ACDSSCHEMA
90 <int> 4
1 <str> AcDbDs::IndexedPropertySchema
2 <str> AcDs:Indexable
280 <int> 1
91 <int> 0

0 <str> ACDSSCHEMA
90 <int> 5
1 <str> AcDbDs::HandleAttributeSchema
2 <str> AcDbDs::HandleAttribute
280 <int> 7
91 <int> 1
284 <int> 1

0 <str> ACDSRECORD               # dxftype: data record
90 <int> 0                       # ??? flag
2 <str> AcDbDs::ID               # subsection name
280 <int> 10                     # subsection type 10 = handle to owner entity, 3DSOLID/REGION
320 <str> 339                    # handle
2 <str> ASM_Data                 # subsection name
280 <int> 15                     # subsection type 15 = binary data
94 <int> 1088                    # size of data
310 <binary encoded data>        # data
310 <binary encoded data>        # data
...

0 <str> ENDSEC
    )annotations)TYPE_CHECKINGIteratorIterableAnyOptionalN)islice)
group_tagsTags)dxftag)DXFKeyErrorDXFStructureError)Drawing)AbstractTagWriterc                  X    e Zd Zej                  dd       Zej                  dd       Zy)
AcDsEntityc                     y N self	tagwriters     \/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/sections/acdsdata.py
export_dxfzAcDsEntity.export_dxf[           c                     y r   r   r   s    r   dxftypezAcDsEntity.dxftype_   r   r   Nr   r   returnstr)__name__
__module____qualname__abcabstractmethodr   r   r   r   r   r   r   Z   s4      	 r   r   c                      e Zd ZdZdddZedd       Zedd       ZddZddZ	ddZ
edd	       Zdd
ZddZddZddZddZy)AcDsDataSectionACDSDATANc                x    || _         g | _        t               | _        || j	                  t        |             y y r   )docentitiesr   section_info	load_tagsiter)r   r-   r.   s      r   __init__zAcDsDataSection.__init__g   s5    *, FNN4>*  r   c                2    t        | j                        dkD  S Nr   )lenr/   r   s    r   is_validzAcDsDataSection.is_validn   s    4$$%))r   c                :    t        d | j                  D              S )Nc              3  <   K   | ]  }t        |t                y wr   
isinstance
AcDsRecord.0entitys     r   	<genexpr>z.AcDsDataSection.has_records.<locals>.<genexpr>t   s      
/5Jvz*
s   )anyr.   r   s    r   has_recordszAcDsDataSection.has_recordsr   s      
9=
 
 	
r   c                    t        |      }|d   dk7  s|d   dk7  rt        d      || _        |D ]  }| j                  t	        |              y )Nr   )r   SECTION   )   r+   z-Critical structure error in ACDSDATA section.)nextr   r/   appendAcDsData)r   r.   section_headr>   s       r   r0   zAcDsDataSection.load_tagsx   sd    H~?n,Q D
 1
 $?  ) 	*FKK()	*r   c                    t         j                  |j                         t              } ||j                        }| j
                  j                  |       y r   )ACDSDATA_TYPESgetr   rH   tagsr.   rG   )r   r>   clsdatas       r   rG   zAcDsDataSection.append   s;      !18<6;;T"r   c                    | j                   r| j                  sy |j                  | j                         | j                  D ]  }|j                  |        |j                  dd       y )Nr   ENDSEC)r6   rA   
write_tagsr/   r.   r   
write_tag2)r   r   r>   s      r   r   zAcDsDataSection.export_dxf   sY    }}D$4$4T../mm 	)Fi(	)Q)r   c                (    d | j                   D        S )Nc              3  B   K   | ]  }t        |t              s|  y wr   r9   r<   s     r   r?   z.AcDsDataSection.acdsrecords.<locals>.<genexpr>   s      
*VZ2PF
s   )r.   r   s    r   acdsrecordszAcDsDataSection.acdsrecords   s    
!%
 	
r   c                ^    | j                  |      }|dj                  t        |            S y)Nr   )find_acis_recordjoinget_acis_datar   handle
asm_records      r   rZ   zAcDsDataSection.get_acis_data   s/    **62
!88M*566r   c                h    | j                  |      }|t        ||       y | j                  ||       y r   )rX   set_acis_datanew_acis_data)r   r\   sab_datar]   s       r   r_   zAcDsDataSection.set_acis_data   s2    **62
!*h/vx0r   c                N    | j                   j                  t        ||             y r   )r.   rG   new_acis_record)r   r\   ra   s      r   r`   zAcDsDataSection.new_acis_data   s    _VX>?r   c                b    | j                  |      }|| j                  j                  |       y y r   )rX   r.   remover[   s      r   del_acis_datazAcDsDataSection.del_acis_data   s/    **62
!MM  , "r   c                b    | j                   D ]   }t        |      st        |      |k(  s|c S  y r   )rV   is_acis_dataacis_entity_handle)r   r\   records      r   rX   z AcDsDataSection.find_acis_record   s6    && 	FF#(:6(Bf(L	 r   r   )r-   r   r.   zOptional[Iterable[Tags]])r"   bool)r.   zIterator[Tags]r"   None)r>   rH   r"   rl   r   r   r"   rl   )r"   zIterator[AcDsRecord])r\   r#   r"   bytes)r\   r#   ra   rn   r"   rl   )r"   rl   )r\   r#   r"   zOptional[AcDsRecord])r$   r%   r&   namer2   propertyr6   rA   r0   rG   r   rV   rZ   r_   r`   rf   rX   r   r   r   r*   r*   d   sq    D+ * * 
 

*#
* 
 

1@-
r   r*   c                  $    e Zd ZddZddZddZy)rH   c                    || _         y r   )rM   )r   rM   s     r   r2   zAcDsData.__init__   s	    	r   c                :    |j                  | j                         y r   )rR   rM   r   s     r   r   zAcDsData.export_dxf   s    TYY'r   c                4    | j                   d   j                  S r4   )rM   valuer   s    r   r   zAcDsData.dxftype   s    yy|!!!r   NrM   r   r    r!   )r$   r%   r&   r2   r   r   r   r   r   rH   rH      s    ("r   rH   c                  B    e Zd Zedd       Zedd       Zedd       Zy)Sectionc                     | d   j                   S r4   ru   r   s    r   ro   zSection.name       Aw}}r   c                     | d   j                   S )NrD   rz   r   s    r   typezSection.type   r{   r   c                    t        | dd        S )NrE   )r   r   s    r   rO   zSection.data   s    DH~r   Nr!   )r"   r   )r$   r%   r&   rp   ro   r}   rO   r   r   r   rx   rx      s<         r   rx   c                  f    e Zd ZddZddZddZefddZddZddZ	ddZ
d Zdd	Zdd
ZddZy)r;   c                    |d   | _         |d   | _        t        t        |dd       d      D cg c]  }t	        |       c}| _        y c c}w )Nr   rD   rE   )	splitcode)_dxftypeflagsr
   r	   rx   sections)r   rM   groups      r   r2   zAcDsRecord.__init__   sM    Q!W
 $F4D$9QG
 EN
 
s   A
c                     y)N
ACDSRECORDr   r   s    r   r   zAcDsRecord.dxftype   s    r   c                ,    | j                  |d       d uS )N)default)get_section)r   ro   s     r   has_sectionzAcDsRecord.has_section   s    d34??r   c                t    | j                   D ]  }|j                  |k(  s|c S  |t        u rt        |      |S r   )r   ro   r   )r   ro   r   sections       r   r   zAcDsRecord.get_section   s@    }} 	G||t#	 k!d##Nr   c                d    t        | j                        D ]  \  }}|j                  |k(  s|c S  yN)	enumerater   ro   )r   ro   ir   s       r   indexzAcDsRecord.index   s4    #DMM2 	JAw||t#	 r   c                    | j                  |j                        }|dk(  r| j                  j                  |       y || j                  |<   y r   )r   ro   r   rG   )r   r   r   s      r   replacezAcDsRecord.replace   s;    

7<<(B;MM  )#*DMM% r   c                :    | j                   j                  |       y r   )r   rG   )r   r   s     r   rG   zAcDsRecord.append   s    W%r   c                ,    t        | j                        S r   )r5   r   r   s    r   __len__zAcDsRecord.__len__   s    4==!!r   c                     | j                   |   S r   )r   )r   items     r   __getitem__zAcDsRecord.__getitem__   s    }}T""r   c                d    |j                  t        | j                  | j                  g             y r   )rR   r   r   r   r   s     r   _write_headerzAcDsRecord._write_header   s"    T4==$**"=>?r   c                j    | j                  |       | j                  D ]  }|j                  |        y r   )r   r   rR   )r   r   r   s      r   r   zAcDsRecord.export_dxf   s1    9%}} 	*G  )	*r   Nrv   r!   )ro   r#   r"   rk   )ro   r#   r   r   r"   rx   )ro   r#   r"   int)r   rx   r"   rl   )r   rx   )r"   rx   rm   )r$   r%   r&   r2   r   r   r   r   r   r   rG   r   r   r   r   r   r   r   r;   r;      sA    
@ 5@ +&"#@*r   r;   c                    	 | j                  d      }|D cg c]  }|j                  dk(  s|j                    c}S c c}w # t        $ r g cY S w xY w)NASM_Data6  )r   coderu   r   )rj   asm_datatags      r   rZ   rZ     sR    B%%j1 &.AcS		AAA  	s   A ==AAc                $    | j                  d      S )Nr   )r   )rj   s    r   rh   rh     s    j))r   c                h    	 | j                  d      }|j                  dd      S # t        $ r Y yw xY w)N
AcDbDs::ID @  )r   r   get_first_value)rj   r   s     r   ri   ri     s@    $$\2 ""3++  s   % 	11c           	        d}t        |      }t        t        dd      t        dd      t        d|      g      }d}||k  r,|j                  t        d||||z                 ||z  }||k  r,| j	                  t        |             y )	N   rE   r        ^   r   r   )r5   r   r   rG   r   rx   )rj   rO   
chunk_sizesizerM   r   s         r   r_   r_     s    Jt9D1j!3O2t	
D E
$,F3UUZ-? @AB $, NN74=!r   c           
         t        t        dd      t        dd      t        dd      t        dd      t        d	|       g      }t        |      }t        ||       |S )
Nr   r   Z   rD   rE   r   r   
   r   )r   r   r;   r_   )r\   ra   rM   rj   s       r   rc   rc   ,  s\    1l#2qM1l#3O3	
D F&(#Mr   r   a#  0
SECTION
2
ACDSDATA
70
2
71
2
0
ACDSSCHEMA
90
0
1
AcDb_Thumbnail_Schema
2
AcDbDs::ID
280
10
91
8
2
Thumbnail_Data
280
15
91
0
101
ACDSRECORD
95
0
90
2
2
AcDbDs::TreatedAsObjectData
280
1
291
1
101
ACDSRECORD
95
0
90
3
2
AcDbDs::Legacy
280
1
291
1
101
ACDSRECORD
1
AcDbDs::ID
90
4
2
AcDs:Indexable
280
1
291
1
101
ACDSRECORD
1
AcDbDs::ID
90
5
2
AcDbDs::HandleAttribute
280
7
282
1
0
ACDSSCHEMA
90
1
1
AcDb3DSolid_ASM_Data
2
AcDbDs::ID
280
10
91
8
2
ASM_Data
280
15
91
0
101
ACDSRECORD
95
1
90
2
2
AcDbDs::TreatedAsObjectData
280
1
291
1
101
ACDSRECORD
95
1
90
3
2
AcDbDs::Legacy
280
1
291
1
101
ACDSRECORD
1
AcDbDs::ID
90
4
2
AcDs:Indexable
280
1
291
1
101
ACDSRECORD
1
AcDbDs::ID
90
5
2
AcDbDs::HandleAttribute
280
7
282
1
0
ACDSSCHEMA
90
2
1
AcDbDs::TreatedAsObjectDataSchema
2
AcDbDs::TreatedAsObjectData
280
1
91
0
0
ACDSSCHEMA
90
3
1
AcDbDs::LegacySchema
2
AcDbDs::Legacy
280
1
91
0
0
ACDSSCHEMA
90
4
1
AcDbDs::IndexedPropertySchema
2
AcDs:Indexable
280
1
91
0
0
ACDSSCHEMA
90
5
1
AcDbDs::HandleAttributeSchema
2
AcDbDs::HandleAttribute
280
7
91
1
284
1
c                    | j                   dk\  r,t        | t        t        j                  t
                          S t        |       S )NAC1027)
dxfversionr*   r
   r   	from_textDEFAULT_SETUP)r-   s    r   new_acds_data_sectionr     s4    
~~!sJt~~m/L$MNNs##r   )rj   r;   r"   zlist[bytes])rj   r;   r"   rk   )rj   r;   r"   r#   )rj   r;   rO   rn   r"   rl   )r\   r#   ra   rn   r"   r;   )r-   r   r"   r*   )&__doc__
__future__r   typingr   r   r   r   r   r'   	itertoolsr	   ezdxf.lldxf.tagsr
   r   ezdxf.lldxf.typesr   ezdxf.lldxf.constr   r   ezdxf.documentr   ezdxf.lldxf.tagwriterr   ABCr   r*   rH   rx   r;   rZ   rh   ri   r_   rc   rK   r   r   r   r   r   <module>r      s   GP # C C 
  - $ <&7 O Od"z "d 4* 4*nB*,""  *
~D$r   