
    Og1                       U d dl mZ d dlmZmZmZmZmZmZm	Z	 d dl
mZ d dlZd dlm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mZmZmZ erddlmZ d dlmZ ee   Zde d<    G d de      Z! e!ddd e"             Z#e#ddf	 	 	 	 	 d'dZ$d(dZ%d)dZ& G d de      Z' G d de      Z( G d dee!         Z)d*dZ*d+dZ+d,dZ,d-d Z-d-d!Z.d.d"Z/	 	 	 	 	 	 d/d#Z0d0d$Z1 G d% d&e      Z2y)1    )annotations)AnySequenceIteratorUnionListTYPE_CHECKINGOptional)	TypeAliasN)datetime   )const)ParsingErrorInvalidLinkStructure)
AcisHeader)AbstractEntityAbstractBuilder
DataLoaderDataExporterEntityExporter)
AcisEntity)Vec3r   	SatRecordc                  4    e Zd ZdZ	 	 	 d	 	 	 	 	 	 	 ddZd Zy)	SatEntityz2Low level representation of an ACIS entity (node).Nc                R    || _         || _        || _        ||ng | _        d | _        y N)nameattr_ptriddata
attributes)selfr   r   r    r!   s        S/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/acis/sat.py__init__zSatEntity.__init__&   s.     	 '+'7tR	'+    c                :    | j                    d| j                   dS )N())r   r    r#   s    r$   __str__zSatEntity.__str__3   s    ))AdggYa((r&   )$-1N)r   strr   r.   r    intr!   Optional[list[Any]])__name__
__module____qualname____doc__r%   r+    r&   r$   r   r   #   s@    <
 $(,, , 	,
 ",)r&   r   znull-ptrr,   r-   c                0    t        | d||      }||_        |S )zFactory to create new ACIS entities.

    Args:
        name: entity type
        attributes: reference to the entity attributes or :attr:`NULL_PTR`.
        id: unique entity id as integer or -1
        data: generic data container as list

    r,   )r   r"   )r   r"   r    r!   es        r$   
new_entityr8   :   s      	$r4(AALHr&   c                2    t        |       dkD  xr | d   dk(  S )z@Returns ``True`` if the string `s` represents an entity pointer.r   $)len)ss    r$   is_ptrr=   N   s    q6A:%!A$#+%r&   c                     d fd} D ]n  } ||j                         |_        d|_         g }|j                  D ]6  }t        |      r|j	                   ||             &|j	                  |       8 ||_        p  S )Nc                @    t        | dd        }|dk(  rt        S |   S )Nr   r-   )r/   NULL_PTR)r<   numentitiess     r$   ptrz!resolve_str_pointers.<locals>.ptrT   s(    !AB%j"9O}r&   r,   )r<   r.   returnr   )r   r"   r!   r=   append)rB   rC   entityr!   tokens   `    r$   resolve_str_pointersrH   S   s|      	0[[ 	#Ee}CJ'E"		#
 	 Or&   c                  ^    e Zd ZddZddZ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)SatDataLoaderc                .    || _         || _        d| _        y )Nr   )versionr!   index)r#   r!   rL   s      r$   r%   zSatDataLoader.__init__h   s    	
r&   c                F    | j                   t        | j                        k  S r   )rM   r;   r!   r*   s    r$   has_datazSatDataLoader.has_datam   s    zzS^++r&   Nc                    ||S | j                   | j                     }	 t        |      }| xj                  dz  c_        |S # t        $ r t	        d|       w xY w)Nzexpected integer, got r   )r!   rM   r/   
ValueErrorr   )r#   skip_satentryvalues       r$   read_intzSatDataLoader.read_intp   sh    O		$**%	AJE 	

a
  	A!7w?@@	As   A Ac                    | j                   | j                     }	 t        |      }| xj                  dz  c_        |S # t        $ r t	        d|       w xY w)Nzexpected double, got r   )r!   rM   floatrQ   r   )r#   rS   rT   s      r$   read_doublezSatDataLoader.read_double|   s]    		$**%	@%LE 	

a
  	@!6ug>??	@s	   = Ac                j    | j                  dd      }|r| j                         S t        j                  S )NFI)	read_boolrX   mathinf)r#   finites     r$   read_intervalzSatDataLoader.read_interval   s-    S)##%%xxr&   c                l    | j                         }| j                         }| j                         }|||fS r   )rX   )r#   xyzs       r$   	read_vec3zSatDataLoader.read_vec3   s7    !Qwr&   c                    | j                   | j                     }||k(  r| xj                  dz  c_        y||k(  r| xj                  dz  c_        yt        d| d| d|       )Nr   TFzexpected bool string 'z' or 'z', got )r!   rM   r   )r#   truefalserT   s       r$   r\   zSatDataLoader.read_bool   se    		$**%D=JJ!OJe^JJ!OJ$TF&wugF
 	
r&   c                "   | j                   | j                     }| j                  t        j                  j
                  k  s|j                  d      r1| xj                  dz  c_        | j                   | j                  dz
     S t        d|       )N@   r   zexpected string, got )r!   rM   rL   r   FeaturesAT
startswithr   r#   rT   s     r$   read_strzSatDataLoader.read_str   sn    		$**%<<%..+++u/?/?/DJJ!OJ99TZZ!^,,25':;;r&   c                    | j                   | j                     }t        |t              r| xj                  dz  c_        |S t	        dt        |             )Nr   zexpected pointer, got )r!   rM   
isinstancer   r   type)r#   rF   s     r$   read_ptrzSatDataLoader.read_ptr   sG    4::&fn-JJ!OJM3DL>BCCr&   c                Z    t        d      D cg c]  }| j                          c}S c c}w )N   )rangerX   )r#   _s     r$   read_transformzSatDataLoader.read_transform   s%    
 -2"I6q  "666s   ()r!   	list[Any]rL   r/   )rD   boolr   )rR   zOptional[int]rD   r/   )rD   rW   )rD   ztuple[float, float, float])rg   r.   rh   r.   rD   r{   )rD   r.   )rD   r   )rD   zlist[float])r1   r2   r3   r%   rO   rU   rX   r`   re   r\   rp   rt   ry   r5   r&   r$   rJ   rJ   g   s5    
,


<D7r&   rJ   c                  (    e Zd ZdZddZddZddZy)	
SatBuilderz7Low level data structure to manage ACIS SAT data files.c                L    t               | _        g | _        g | _        i | _        y r   )r   headerbodiesrB   _export_mappingr*   s    r$   r%   zSatBuilder.__init__   s!     l'))+57r&   c                D   | j                          t        | j                        t        | j                  j
                        z   | j                  _        | j                  j                  dk(  rd| j                  _        n$t        | j                        | j                  _        | j                  j                         }|j                  t        | j                  | j                  j                               |j                  | j                  j                                |S )zReturns the text representation of the ACIS file as list of strings
        without line endings.

        Raise:
            InvalidLinkStructure: referenced ACIS entity is not stored in
                the :attr:`entities` storage

          r   )reorder_recordsr;   r   r/   r   has_asm_header
n_entitiesrL   	n_recordsrB   dumpsextendbuild_str_recordsrE   sat_end_markerr#   r!   s     r$   dump_satzSatBuilder.dump_sat   s     	!$T[[!1CKK&&5
 "
 ;;#%$%DKK!$'$6DKK!{{  "%dmmT[[5H5HIJDKK..01r&   c                f    |D cg c]  }|j                   dk(  s| c}| _        || _        yc c}w )z.Reset entities and bodies list. (internal API)bodyN)r   r   rB   )r#   rB   r7   s      r$   set_entitieszSatBuilder.set_entities   s,    "*?Qaff.>q?  @s   ..N)rD   NonerD   	list[str])rB   list[SatEntity]rD   r   )r1   r2   r3   r4   r%   r   r   r5   r&   r$   r}   r}      s    A8,!r&   r}   c                  $    e Zd ZddZddZddZy)SatExporterc                ^    t        |j                  |j                        }t        |_        |S )N)r    )r   rs   r    r@   r"   r#   rF   records      r$   make_recordzSatExporter.make_record   s#    6;;6995$r&   c                .    t        | |j                        S r   )SatDataExporterr!   )r#   r   s     r$   make_data_exporterzSatExporter.make_data_exporter   s    tV[[11r&   c                    t               }| j                  |_        |j                  | j                                |j	                         S r   )r}   r   r   export_recordsr   )r#   builders     r$   r   zSatExporter.dump_sat   s:    ,T0023!!r&   N)rF   r   rD   r   )r   r   rD   r   r   )r1   r2   r3   r   r   r   r5   r&   r$   r   r      s    
2"r&   r   c              #     K   d fd} D ]  }|j                   g}|j                   ||j                               |dk\  r$|j                  t        |j                               |j
                  D ]D  }t        |t              r|j                   ||             +|j                  t        |             F |j                  d       dj                  |        y w)Nc                    | t         u ry	 dj                  |        S # t        $ r t        dt	        |        d      w xY w)Nr,   r:   zentity z not in record storage)r@   rM   rQ   r   r.   )r7   rB   s    r$   ptr_strz"build_str_records.<locals>.ptr_str   sT    =	Qx~~a()** 	Q&Q8N'OPP	Qs	     "Ar   # )r7   r   rD   r.   )	r   rE   r"   r.   r    r!   rr   r   join)rB   rL   r   rF   tokensr!   s   `     r$   r   r      s     Q  ++gf//01c>MM#fii.)KK 	)D$	*gdm,c$i(		)
 	chhvs   CC c              #     K   d}d}d}| j                         D ]D  }|dkD  r||z  }|dz  }|dk(  s| d}|dk(  r%|dv r||z  }/|dk(  s5|s8t        |      }d}F y w)N r   r   rj   
0123456789r   )rstripr/   )r<   rA   collectrG   cs        r$   parse_header_strr      s     
CGEXXZ Q;QJEqLG!|#X,1HC#X##hGCs   .A!A!A!A!c                   t               }| d   j                         }t        |d         |_        	 t        |d         |_        t        |d         |_        t        |d         |_        t        t        | d               }	 |d   |_        |d   |_        t        |      dkD  r-	 t        j                  |d   t         j"                        |_        | d   j                         }	 t'        |d         |_        || dd  fS # t        t        f$ r Y w xY w# t        $ r Y w xY w# t        $ r Y ]w xY w# t        t        f$ r Y Kw xY w)Nr   r   rk      )r   splitr/   rL   r   r   flags
IndexErrorrQ   listr   
product_idacis_versionr;   r   strptimer   DATE_FMTcreation_daterW   units_in_mm)r!   r   r   s      r$   parse_headerr     sN   \F!W]]_F^FNvay>q	N6!9~ "47+,F"1I$Qi 6{Q	#+#4#4VAY#OF  !W]]_F"6!9- 48' 
#     		
 
# sG   9D  D &,D$ &D3  DD	D! D!$	D0/D03EEc              #     K   | D ]F  }|j                  t        j                        s|j                  t        j                        r y | H y wr   )rn   r   END_OF_ACIS_DATA_SATBEGIN_OF_ACIS_HISTORY_DATA)r!   lines     r$   _filter_recordsr   1  sE      ??5556$//,,;
 
s   AAc              #     K   dj                  t        |             }|j                  d      D ]  }|j                         }|s|  y w)Nr   r   )r   r   r   strip)r!   merged_datar   s      r$   merge_record_stringsr   :  sF     ((?401K##C( Ls   AAAc                   d}g }t        |       D ]y  }|j                         }|d   j                         }|j                  d      r-t	        |       }||k7  rt        d      |j                  d       |j                  |       |dz  }{ |S )Nr   -z-non-continuous sequence numbers not supportedr   )r   r   r   rn   r/   r   poprE   )r!   expected_seq_numrecordsr   r   first_tokenrA   s          r$   parse_recordsr   B  s    !G$T*  JJLQioo'!!#&{##C&&"C  JJqMvA Nr&   c           	         g }| D ]I  }|d   }|d   }d}|dk\  rt        |d         }|dd  }n|dd  }|j                  t        ||||             K |S )Nr   r   r-   r   rk   r   )r/   rE   r   )r   rL   rB   r   r   attrid_r!   s           r$   build_entitiesr   T  sw     !#H 	:ayayc>fQi.C!":D!":D	$c489	: Or&   c                6   t        | t              r| j                         }n| }t        |t              st	        d      t               }t        |      \  }}||_        t        |      }t        ||j                        }|j                  t        |             |S )zReturns the :class:`SatBuilder` for the ACIS :term:`SAT` file content
    given as string or list of strings.

    Raises:
        ParsingError: invalid or unsupported ACIS data structure

    z+expected as string or a sequence of strings)rr   r.   
splitlinesr   	TypeErrorr}   r   r   r   r   rL   r   rH   )r<   r!   r   r   r   rB   s         r$   	parse_satr   e  s     !S||~dH%EFFlG%LFDGND!Ggv~~6H-h78Nr&   c                  f    e Zd ZddZdddZddZddZddZddZddZ	ddZ
dd	Zdd
ZddZy)r   c                B    |j                   | _         || _        || _        y r   )rL   exporterr!   )r#   r   r!   s      r$   r%   zSatDataExporter.__init__~  s    '' 	r&   c                R    |s%| j                   j                  t        |             yy)zThere are sometimes additional int values in SAB files which are
        not present in SAT files, maybe reference counters e.g. vertex, coedge.
        N)r!   rE   r.   )r#   rT   rR   s      r$   	write_intzSatDataExporter.write_int  s"     IISZ( r&   c                >    | j                   j                  |d       y )Ngr!   rE   ro   s     r$   write_doublezSatDataExporter.write_double  s    		E!9&r&   c                    t        j                  |      r| j                  j                  d       y | j                  j                  d       | j	                  |       y )Nr[   rZ   )r]   isinfr!   rE   r   ro   s     r$   write_intervalzSatDataExporter.write_interval  s@    ::eIIS!IIS!e$r&   c                    | j                  |j                         | j                  |j                         | j                  |j                         y r   r   rb   rc   rd   ro   s     r$   write_loc_vec3zSatDataExporter.write_loc_vec3  8    %''"%''"%''"r&   c                    | j                  |j                         | j                  |j                         | j                  |j                         y r   r   ro   s     r$   write_dir_vec3zSatDataExporter.write_dir_vec3  r   r&   c                L    | j                   j                  |r|       y |       y r   r   )r#   rT   rg   rh   s       r$   
write_boolzSatDataExporter.write_bool  s    		2E2r&   c                    | j                   j                  dt        |              | j                   j                  t        |             y )Nrj   )r!   rE   r;   r.   ro   s     r$   	write_strzSatDataExporter.write_str  s5    		1SZL)*		U$r&   c                &    | j                  |       y r   )r   ro   s     r$   write_literal_strz!SatDataExporter.write_literal_str  s    ur&   c                    t         }|j                  s| j                  j                  |      }| j                  j                  |       y r   )r@   is_noner   
get_recordr!   rE   r   s      r$   	write_ptrzSatDataExporter.write_ptr  s4    ~~]]--f5F		 r&   c                :    | j                   j                  |       y r   )r!   r   r   s     r$   write_transformzSatDataExporter.write_transform  s    		r&   N)r   r   r!   rz   )F)rT   r/   rD   r   )rT   rW   rD   r   )rT   r   rD   r   )rT   r{   rg   r.   rh   r.   rD   r   )rT   r.   rD   r   )rF   r   rD   r   )r!   r   rD   r   )r1   r2   r3   r%   r   r   r   r   r   r   r   r   r   r   r5   r&   r$   r   r   }  s9    
)'%#
#
3%!r&   r   )r   r.   r!   r0   rD   r   )r<   r.   rD   r{   )rB   r   rD   r   )rB   r   rL   r/   rD   Iterator[str])r<   r.   rD   r   )r!   Sequence[str]rD   z tuple[AcisHeader, Sequence[str]])r!   r   rD   r   )r!   r   rD   zlist[SatRecord])r   zSequence[SatRecord]rL   r/   rD   r   )r<   zUnion[str, Sequence[str]]rD   r}   )3
__future__r   typingr   r   r   r   r   r	   r
   typing_extensionsr   r]   r   r   r   r   r   hdrr   abstractr   r   r   r   r   rB   r   
ezdxf.mathr   r.   r   __annotations__r   tupler@   r8   r=   rH   rJ   r}   r   r   r   r   r   r   r   r   r   r   r5   r&   r$   <module>r      s   #   (    5   $Cy	9  ) )( ZEG4
 	 $	
 	
 (&
(I7J I7X"! "!J".+ " .(<$ +."02l 2r&   