
    'j'                    ^   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	j                  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%dS )/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                  R    e Zd Zej        dd            Zej        d	d            ZdS )

AcDsEntity	tagwriterr   c                    d S N selfr   s     Q/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/sections/acdsdata.py
export_dxfzAcDsEntity.export_dxf[           returnstrc                    d S r   r   r   s    r   dxftypezAcDsEntity.dxftype_   r   r   Nr   r   r   r   )__name__
__module____qualname__abcabstractmethodr   r!   r   r   r   r   r   Z   sZ            	     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dS ),AcDsDataSectionACDSDATANdocr   entitiesOptional[Iterable[Tags]]c                    || _         g | _        t                      | _        |$|                     t          |                     d S d S r   )r,   r-   r   section_info	load_tagsiter)r   r,   r-   s      r   __init__zAcDsDataSection.__init__g   sH    *, FFNN4>>*****  r   r   boolc                2    t          | j                  dk    S Nr   )lenr0   r    s    r   is_validzAcDsDataSection.is_validn   s    4$%%))r   c                >    t          d | j        D                       S )Nc              3  @   K   | ]}t          |t                    V  d S r   
isinstance
AcDsRecord.0entitys     r   	<genexpr>z.AcDsDataSection.has_records.<locals>.<genexpr>t   s=       
 
/5Jvz**
 
 
 
 
 
r   )anyr-   r    s    r   has_recordszAcDsDataSection.has_recordsr   s2     
 
9=
 
 
 
 
 	
r   Iterator[Tags]Nonec                    t          |          }|d         dk    s|d         dk    rt          d          || _        |D ]$}|                     t	          |                     %d S )Nr   )r   SECTION   )   r+   z-Critical structure error in ACDSDATA section.)nextr   r0   appendAcDsData)r   r-   section_headr@   s       r   r1   zAcDsDataSection.load_tagsx   s    H~~?n,,Q D
 1
 1
 $?   ) 	* 	*FKK(())))	* 	*r   r@   rL   c                    t                               |                                t                    } ||j                  }| j                            |           d S r   )ACDSDATA_TYPESgetr!   rL   tagsr-   rK   )r   r@   clsdatas       r   rK   zAcDsDataSection.append   sN      !1!18<<s6;T"""""r   r   r   c                    | j         r| j        sd S |                    | j                   | j        D ]}|                    |           |                    dd           d S )Nr   ENDSEC)r8   rC   
write_tagsr0   r-   r   
write_tag2)r   r   r@   s      r   r   zAcDsDataSection.export_dxf   sv    } 	D$4 	FT.///m 	) 	)Fi((((Q)))))r   Iterator[AcDsRecord]c                $    d | j         D             S )Nc              3  D   K   | ]}t          |t                    |V  d S r   r;   r>   s     r   rA   z.AcDsDataSection.acdsrecords.<locals>.<genexpr>   sE       
 
*VZ2P2P

 
 
 
 
 
r   )r-   r    s    r   acdsrecordszAcDsDataSection.acdsrecords   s%    
 
!%
 
 
 	
r   handler   bytesc                x    |                      |          }|"d                    t          |                    S dS )Nr   )find_acis_recordjoinget_acis_datar   r\   
asm_records      r   ra   zAcDsDataSection.get_acis_data   s:    **622
!88M*55666sr   sab_datac                    |                      |          }|t          ||           d S |                     ||           d S r   )r_   set_acis_datanew_acis_data)r   r\   rd   rc   s       r   rf   zAcDsDataSection.set_acis_data   sM    **622
!*h/////vx00000r   c                V    | j                             t          ||                     d S r   )r-   rK   new_acis_record)r   r\   rd   s      r   rg   zAcDsDataSection.new_acis_data   s(    _VX>>?????r   c                l    |                      |          }|| j                            |           d S d S r   )r_   r-   removerb   s      r   del_acis_datazAcDsDataSection.del_acis_data   s?    **622
!M  ,,,,, "!r   Optional[AcDsRecord]c                f    | j         D ](}t          |          rt          |          |k    r|c S )d S r   )r[   is_acis_dataacis_entity_handle)r   r\   records      r   r_   z AcDsDataSection.find_acis_record   sF    & 	 	FF## (:6(B(Bf(L(Ltr   r   )r,   r   r-   r.   )r   r4   )r-   rD   r   rE   )r@   rL   r   rE   r   r   r   rE   )r   rX   )r\   r   r   r]   )r\   r   rd   r]   r   rE   )r   rE   )r\   r   r   rm   )r$   r%   r&   namer3   propertyr8   rC   r1   rK   r   r[   ra   rf   rg   rl   r_   r   r   r   r*   r*   d   s6       D+ + + + + * * * X* 
 
 
 X

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

   1 1 1 1@ @ @ @- - - -
     r   r*   c                  &    e Zd ZddZddZdd	Zd
S )rL   rQ   r   c                    || _         d S r   )rQ   r   rQ   s     r   r3   zAcDsData.__init__   s    			r   r   r   c                :    |                     | j                   d S r   )rV   rQ   r   s     r   r   zAcDsData.export_dxf   s    TY'''''r   r   r   c                &    | j         d         j        S r6   )rQ   valuer    s    r   r!   zAcDsData.dxftype   s    y|!!r   NrQ   r   r"   r#   )r$   r%   r&   r3   r   r!   r   r   r   rL   rL      sP           ( ( ( (" " " " " "r   rL   c                  V    e Zd Zedd            Zedd            Zed	d            ZdS )
Sectionr   r   c                    | d         j         S r6   rz   r    s    r   rs   zSection.name       Aw}r   c                    | d         j         S )NrH   r   r    s    r   typezSection.type   r   r   r   c                0    t          | dd                    S )NrI   )r   r    s    r   rS   zSection.data   s    DH~~r   Nr#   )r   r   )r$   r%   r&   rt   rs   r   rS   r   r   r   r}   r}      sr           X    X    X  r   r}   c                  h    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dS )$r=   rQ   r   c                    |d         | _         |d         | _        d t          t          |dd           d          D             | _        d S )Nr   rH   c                ,    g | ]}t          |          S r   )r}   )r?   groups     r   
<listcomp>z'AcDsRecord.__init__.<locals>.<listcomp>   s.     
 
 
 ENN
 
 
r   rI   )	splitcode)_dxftypeflagsr
   r	   sectionsrw   s     r   r3   zAcDsRecord.__init__   sU    Q!W

 
#F4D$9$9QGGG
 
 
r   r   r   c                    dS )N
ACDSRECORDr   r    s    r   r!   zAcDsRecord.dxftype   s    |r   rs   r4   c                4    |                      |d           d uS )N)default)get_section)r   rs   s     r   has_sectionzAcDsRecord.has_section   s     d334??r   r   r   r}   c                h    | j         D ]}|j        |k    r|c S |t          u rt          |          |S r   )r   rs   r   )r   rs   r   sections       r   r   zAcDsRecord.get_section   sL    } 	 	G|t## $k!!d###Nr   intc                X    t          | j                  D ]\  }}|j        |k    r|c S dS N)	enumerater   rs   )r   rs   ir   s       r   indexzAcDsRecord.index   s?    #DM22 	 	JAw|t## $rr   r   rE   c                    |                      |j                  }|dk    r| j                            |           d S || j        |<   d S r   )r   rs   r   rK   )r   r   r   s      r   replacezAcDsRecord.replace   sL    

7<((B;;M  )))))#*DM%   r   c                :    | j                             |           d S r   )r   rK   )r   r   s     r   rK   zAcDsRecord.append   s    W%%%%%r   c                *    t          | j                  S r   )r7   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   r   r   c                b    |                     t          | j        | j        g                     d S r   )rV   r   r   r   r   s     r   _write_headerzAcDsRecord._write_header   s-    T4=$*"=>>?????r   c                n    |                      |           | j        D ]}|                    |           d S r   )r   r   rV   )r   r   r   s      r   r   zAcDsRecord.export_dxf   sH    9%%%} 	* 	*G  ))))	* 	*r   Nr{   r#   )rs   r   r   r4   )rs   r   r   r   r   r}   )rs   r   r   r   )r   r}   r   rE   )r   r}   )r   r}   rr   )r$   r%   r&   r3   r!   r   r   r   r   r   rK   r   r   r   r   r   r   r   r=   r=      s        
 
 
 
   @ @ @ @ 5@        + + + +& & & &" " "# # # #@ @ @ @* * * * * *r   r=   rq   r   list[bytes]c                j    	 |                      d          }d |D             S # t          $ r g cY S w xY w)NASM_Datac                2    g | ]}|j         d k    |j        S )6  )coderz   )r?   tags     r   r   z!get_acis_data.<locals>.<listcomp>  s!    AAAcS	r   )r   r   )rq   asm_datas     r   ra   ra     sX    B%%j11 BAXAAAA    			s   # 22r4   c                ,    |                      d          S )Nr   )r   )rq   s    r   ro   ro     s    j)))r   r   c                ~    	 |                      d          }n# t          $ r Y dS w xY w|                    dd          S )N
AcDbDs::ID @  )r   r   get_first_value)rq   r   s     r   rp   rp     sT    $$\22   rr""3+++s    
&&rS   r]   rE   c           	     f   d}t          |          }t          t          dd          t          dd          t          d|          g          }d}||k     r9|                    t          d||||z                                 ||z  }||k     9|                     t          |                     d S )	N   rI   r        ^   r   r   )r7   r   r   rK   r   r}   )rq   rS   
chunk_sizesizerQ   r   s         r   rf   rf     s    Jt99D1j!!3OO2t	
 D E
$,,F3UUZ-?%? @AABBB $,, NN74==!!!!!r   r\   rd   c           
         t          t          dd          t          dd          t          dd          t          dd          t          d	|           g          }t          |          }t          ||           |S )
Nr   r   Z   rH   rI   r   r   
   r   )r   r   r=   rf   )r\   rd   rQ   rq   s       r   ri   ri   ,  sw    1l##2qMM1l##3OO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
r,   r   c                    | j         dk    r4t          | t          t          j        t
                                        S t          |           S )NAC1027)
dxfversionr*   r
   r   	from_textDEFAULT_SETUP)r,   s    r   new_acds_data_sectionr     s?    
~!!sJt~m/L/L$M$MNNNs###r   )rq   r=   r   r   )rq   r=   r   r4   )rq   r=   r   r   )rq   r=   rS   r]   r   rE   )r\   r   rd   r]   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*   rL   r}   r=   ra   ro   rp   rf   ri   rO   r   r   r   r   r   <module>r      sR  G GP # " " " " " C C C C C C C C C C C C C C 



       - - - - - - - - $ $ $ $ $ $ < < < < < < < < 8&&&&&&777777       O O O O O O O Od" " " " "z " " "    d   4* 4* 4* 4* 4* 4* 4* 4*nB B B B* * * *, , , ," " " ""     *
~D$ $ $ $ $ $r   