
    'j3,                       d dl mZ d dlmZmZmZmZmZmZ d dl	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 erd dlmZ d d	lmZ  ej        d
          Zi dg ddg ddg ddg ddg ddg ddg ddg ddg ddg ddg d d!g d"d#g d$d%g d&d'g d(d)g d*d+g d,i d-g d.d/g d0d1g d2d3g d4d5g d6d7g d8d9g d:d;g d<d=g d>d?g d@dAg dBdCg dDdEg dFdGg dHdIg dJdKg dLdMg dNi dOg dPdQg dRdSg dTdUg dVdWg dXdYg dZd[g d\d]g d^d_g d`dag dbdcg dddeg dfdgg dhdig djdkg dldmg dndog dpdqg driZg dsZg dtZeeeeiZ  G du dv          Z!dS )w    )annotations)TYPE_CHECKINGIteratorIterableUnioncastOptional)CounterOrderedDictN)DXFStructureErrorDXF2004DXF2000DXFKeyError)DXFClass)	DXFEntityDXFTagStorage)Drawing)AbstractTagWriterezdxfACDBDICTIONARYWDFLT)AcDbDictionaryWithDefaultObjectDBX Classesr   r   r   SUN)AcDbSunSCENEOE  r   r   DICTIONARYVAR)AcDbDictionaryVarr   r   r   r   
TABLESTYLE)AcDbTableStyler     r   r   MATERIAL)AcDbMaterialr   r   r   r   VISUALSTYLE)AcDbVisualStyler   r!   r   r   SCALE)	AcDbScaler   r   r   r   MLEADERSTYLE)AcDbMLeaderStyleACDB_MLEADERSTYLE_CLASSr!   r   r   MLEADER)AcDbMLeaderACDB_MLEADER_CLASSi  r      MPOLYGON)AcDbMPolygonAcMPolygonObj15  r   r.   CELLSTYLEMAP)AcDbCellStyleMapr     r   r   EXACXREFPANELOBJECT)ExAcXREFPanelObjectEXAC_ESWr2   r   r   NPOCOLLECTION)%AcDbImpNonPersistentObjectsCollectionr   r   r   r   LAYER_INDEX)AcDbLayerIndexr   r   r   r   SPATIAL_INDEX)AcDbSpatialIndexr   r   r   r   IDBUFFER)AcDbIdBufferr   r   r   r   DIMASSOC)AcDbDimAssocrB   r   r   r   ACDBSECTIONVIEWSTYLE)AcDbSectionViewStyler   r2   r   r   ACDBDETAILVIEWSTYLE)AcDbDetailViewStyler   r2   r   r   IMAGEDEF)AcDbRasterImageDefISMr   r   r   RASTERVARIABLES)AcDbRasterVariablesrI   r   r   r   IMAGEDEF_REACTOR)AcDbRasterImageDefReactorrI   r.   r   r   IMAGE)AcDbRasterImagerI   i  r   r.   PDFDEFINITION)AcDbPdfDefinitionr   r   r   r   PDFUNDERLAY)AcDbPdfReferencer   r!   r   r.   DWFDEFINITION)AcDbDwfDefinitionr   r   r   r   DWFUNDERLAY)AcDbDwfReferencer   r   r   r.   DGNDEFINITION)AcDbDgnDefinitionr   r   r   r   DGNUNDERLAY)AcDbDgnReferencer   r   r   r.   MENTALRAYRENDERSETTINGS)AcDbMentalRayRenderSettingsr   i   r   r   ACDBPLACEHOLDER)AcDbPlaceHolderr   r   r   r   LAYOUT)
AcDbLayoutr   r   r   r   SURFACE)AcDbSurfacer   r!   r   r.   EXTRUDEDSURFACE)AcDbExtrudedSurfacer   r!   r   r.   LOFTEDSURFACE)AcDbLoftedSurfacer   r   r   r.   REVOLVEDSURFACE)AcDbRevolvedSurfacer   r   r   r.   SWEPTSURFACE)AcDbSweptSurfacer   r   r   r.   PLANESURFACE)AcDbPlaneSurfacer   r!   r   r.   NURBSSURFACE)AcDbNurbSurfacer   r!   r   r.   "ACDBASSOCEXTRUDEDSURFACEACTIONBODY)"AcDbAssocExtrudedSurfaceActionBodyr   r2   r   r    ACDBASSOCLOFTEDSURFACEACTIONBODY) AcDbAssocLoftedSurfaceActionBodyr   r2   r   r   "ACDBASSOCREVOLVEDSURFACEACTIONBODY)"AcDbAssocRevolvedSurfaceActionBodyr   r2   r   r   ACDBASSOCSWEPTSURFACEACTIONBODY)AcDbAssocSweptSurfaceActionBodyr   r2   r   r   HELIX)	AcDbHelixr   r!   r   r.   WIPEOUT)AcDbWipeoutWipeOut   r   r.   WIPEOUTVARIABLES)AcDbWipeoutVariablesr|   r   r   r   	FIELDLIST)AcDbFieldListr   r5   r   r   GEODATA)AcDbGeoDatar   r!   r   r   SORTENTSTABLE)AcDbSortentsTabler   r   r   r   
ACAD_TABLE)	AcDbTabler   r2   r   r.   ARC_DIMENSION)AcDbArcDimensionr   r2   r   r.   LARGE_RADIAL_DIMENSION)AcDbRadialDimensionLarger   r2   r   r.   )r   r   r$   r"   r&   r   r(   r   r3   r\   rE   rC   rJ   r^   r`   )r   r   r$   r"   r&   r   r(   r   r3   r\   rE   rC   rJ   c                  `    e Zd Z	 	 dd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S )&ClassesSectionNdocOptional[Drawing]entitiesOptional[Iterable[DXFEntity]]c                    t                      | _        || _        |$|                     t	          |                     d S d S N)r   classesr   loaditer)selfr   r   s      P/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/sections/classes.py__init__zClassesSection.__init__   sC     9DIId8nn%%%%%      returnIterator[DXFClass]c                H    d | j                                         D             S )Nc              3     K   | ]}|V  d S r    ).0clss     r   	<genexpr>z*ClassesSection.__iter__.<locals>.<genexpr>   s"      55555555r   )r   values)r   s    r   __iter__zClassesSection.__iter__   s$    55t|22445555r   Iterator[DXFEntity]Nonec                z   t          t          t          |                    }|                                dk    s|j        d         dk    rt          d          |D ]]}t          |t                    r|                     |           -t          
                    d|                                 d           ^d S )NSECTIONr.   )   CLASSESz,Critical structure error in CLASSES section.z!Ignored invalid DXF entity type 'z' in section CLASSES.)r   r   nextdxftype
base_classr   
isinstancer   registerloggerwarning)r   r   section_head
cls_entitys       r   r   zClassesSection.load   s    M4>>::!!Y..,2I!2L Q
 3
 3
 $$RSSS" 	 	J*h// j)))),
8J8J8L8L , , ,   		 	r   r   -Optional[Union[DXFClass, Iterable[DXFClass]]]c                |    |d S t          |t                    r|f}|D ]}|j        }|| j        vr
|| j        |<   d S r   )r   r   keyr   )r   r   dxfclassr   s       r   r   zClassesSection.register   sa     ?Fgx(( 	!jG 	- 	-H,C$,&&$,S!	- 	-r   namestrc           	         |t           vrdS t           |         }t          j        | j                  }|\  }}}}}|                    ||||||d           |                     |           dS )z!Register a known class by `name`.N)r   )r   cpp_class_nameapp_nameflagswas_a_proxyis_an_entity)CLASS_DEFINITIONSr   newr   update_dxf_attribsr   )	r   r   cls_datar   cppappr   proxyentitys	            r   	add_classzClassesSection.add_class   s    (((F$T*ltx((()1&S%"%$ & 		
 		
 		
 	cr   r   c                    | j                                         D ]}|j        j        |k    r|c S t	          |          )zReturns the first class matching `name`.

        Storage key is the ``(name, cpp_class_name)`` tuple, because there are
        some classes with the same :attr:`name` but different
        :attr:`cpp_class_names`.

        )r   r   dxfr   r   )r   r   r   s      r   getzClassesSection.get   sL     <&&(( 	 	Cw|t##


 $$r   
dxfversionc                   t                               |t                    }|D ]}|                     |           | j        dS | j        j                                        }d|v r?|                     d           |                     d           |                     d           d|v r*|                     d           |                     d           d|v r*|                     d           |                     d           d	|v r*|                     d
           |                     d	           d|v r*|                     d           |                     d           d|v r*|                     d           |                     d           d|v r*|                     d           |                     d           d|v r*|                     d           |                     d           |D ]}|                     |           dS )zAAdd all required CLASS definitions for the specified DXF version.NrN   rG   rL   rR   rP   rV   rT   rZ   rX   rd   rp   rf   rr   rh   rt   rj   rv   )REQUIRED_CLASSESr   	REQ_R2004r   r   entitydbdxf_types_in_use)r   r   namesr   r   r   s         r   add_required_classesz#ClassesSection.add_required_classes	  s&    $$Z;; 	! 	!DNN4    8F8,==??&&&NN7###NN:&&&NN-...,,,NN?+++NN=))),,,NN?+++NN=))),,,NN?+++NN=))) 000NN,---NN?@@@...NN?+++NN=>>> 000NN,---NN?@@@---NN>***NN<===' 	$ 	$GNN7####	$ 	$r   	tagwriterr   c                    |                     d           | j                                        D ]}|                    |           |                     d           dS )zExport DXF tags. (internal API)z  0
SECTION
  2
CLASSES
z  0
ENDSEC
N)	write_strr   r   
export_dxf)r   r   r   s      r   r   zClassesSection.export_dxf0  se    :;;;++-- 	+ 	+H	****O,,,,,r   c                X   | j         J | j         j        t          k     rdS t                      }| j         j                                        D ]$}||                                xx         dz  cc<   %| j                                        D ]}||j        j	                 |j        _
        dS )z_Update CLASS instance counter for all registered classes, requires
        DXF R2004+.
        Nr.   )r   r   r   r
   r   r   r   r   r   r   instance_count)r   counterr   r   s       r   update_instance_countersz'ClassesSection.update_instance_counters7  s     x###8((F")))h'..00 	+ 	+FFNN$$%%%*%%%%++-- 	E 	EH*1(,2C*DHL''	E 	Er   )NN)r   r   r   r   )r   r   )r   r   r   r   r   )r   r   r   r   )r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   )__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r   r   r      s         "&26& & & & &6 6 6 6   & HL- - - - -   &       %$ %$ %$ %$N- - - -E E E E E Er   r   )"
__future__r   typingr   r   r   r   r   r	   collectionsr
   r   loggingezdxf.lldxf.constr   r   r   r   ezdxf.entities.dxfclassr   ezdxf.entities.dxfentityr   r   ezdxf.documentr   ezdxf.lldxf.tagwriterr   	getLoggerr   r   	REQ_R2000r   r   r   r   r   r   <module>r      s(   # " " " " " K K K K K K K K K K K K K K K K , , , , , , , ,  N N N N N N N N N N N N , , , , , , = = = = = = = = 8&&&&&&777777		7	#	#q   q 
---q HHHq EEEq AAAq GGGq ;;;q OOOq @@@q  ???!q" III#q$ JJJ%q&    'q4 CCC5q6 GGG7q8 >>>9q: 999;q q<    =qJ    KqX 666YqZ >>>[q\ EEE]q^ 333_q` KKKaqb HHHcqd KKKeqf HHHgqh KKKiqj HHHkql       mqz HHH{q| :::}q~ ???q@ OOOAq q qB HHHCqD LLLEqF FFFGqH IIIIqJ HHHKqL ) + + +MqZ ' ) ) )[qh ) + + +iqv & ( ( (wqD ;;;EqF 444GqH DDDIqJ CCCKqL ???MqN HHHOqP @@@QqR JJJSq qT    Uq q f  	$  	" YY LE LE LE LE LE LE LE LE LE LEr   