
    'jo                       d dl mZ d dl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mZmZmZ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 d dlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d dl'm(Z( ddl)m*Z*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2 erd dl3m4Z4 d dl5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; dgZ< edi d edej=        e!          d edd          d edd          d  ed!d           d" ed#d$          d% ed&ej>        e!          d' ed(ej>        e!          d) ed*ej>         e dd                    d+ ed,ej>         e dd                    d- ed.ej=        e$          d/ ed0ej=        e!          d1 ed2d3          d4 ed5d           d6 ed7d           d8 ed9d          d: ed3d           d; ed<d           i d= ed>d?          d@ edAd           dB edCdDdEF          dG eddH          dI edJd  e
j?        d dK          eL          dM edNd e
j@        eL          dO edPd           dQ edRej=        e!          dS edTej=        e"e
jA        eU          dV edWej=        e#e
jA        eU          dX edY          dZ ed[dE\          d] ed^d  e
j?        d dK          eL          d_ ed`d           da edbdc e
j?        d dd          ee          df edgdhi          dj edkdhdEl           edmdhdEl           edndhdEl           edodhddEp           edqd dhe
j@        er           edsdhi           edtdhi           edudhe
jB        v           edwdhi           edxdhi           edydhdEl           edzdhi           ed{dhi           ed|dhi           ed}dhi          d~          ZC eeC          ZDdZEe0 G d de-                      ZFdS )    )annotations)TYPE_CHECKINGIterableOptional)SelfN)	validator)const)DXFAttrDXFAttributesDefSubclassXTypeRETURN_DEFAULTgroup_code_mapping)DXFTag	DXFVertex)Tags)DXF12SUBCLASS_MARKERDXFStructureErrorDXFValueErrorDXFTableEntryError)Vec3Vec2NULLVECX_AXISY_AXISZ_AXISMatrix44BoundingBox2d)set_flag_state   )
base_classSubclassProcessor)
DXFGraphicacdb_entity)register_entity)default_copy)Drawing)DXFNamespace	DXFEntity)AbstractTagWriter)xrefViewportAcDbViewportcenter
   )xtypedefaultwidth(   )r2   height)   statusD   idE      view_center_point   snap_base_point   snap_spacing   grid_spacing   view_direction_vector   view_target_point   perspective_lens_length*   2   front_clip_plane_z_value+   back_clip_plane_z_value,   view_height-   
snap_angleview_twist_angle3   circle_zoomH   d   flagsZ   clipping_boundary_handleiT  0T)r2   optionalplot_style_name render_modei     )r2   r   fixerucs_per_viewportG   ucs_iconJ   
ucs_originn   
ucs_x_axiso   )r1   r2   r   r`   
ucs_y_axisp   
ucs_handleiY  base_ucs_handleiZ  r[   ucs_ortho_typeO   	elevation   shade_plot_mode   AC1018   )
dxfversionr   r`   grid_frequency=   AC1021)rv   background_handleiL  )rv   r[   iM  i\  i$  )rv   r2   r[   i  )r2   rv   r   r`         ?   )rv   r   i  i  ii  iO  iW  iX  [   )shade_plot_handlevisual_style_handledefault_lighting_flagdefault_lighting_typeview_brightnessview_contrastambient_light_color_1ambient_light_color_2ambient_light_color_3
sun_handleref_vp_object_1ref_vp_object_2ref_vp_object_3ref_vp_object_4iK  c                      e Zd ZdZdZ eeee          Z	dD fdZ
efdEdZedFd
            Zej        dGd            ZdHdZdIdZdJdZdIdZedKd            Z	 dLdM fdZdN fdZdOd!ZdDd"ZdP fd%ZdQd&ZdRd'ZdS fd*ZdT fd.ZdDd/ZdUd2ZdVd4Z dWd6Z!edKd7            Z"dXd9Z#dYd;Z$edKd<            Z%dYd=Z&dZd?Z'dXd@Z(d[dBZ)d[dCZ* xZ+S )\r-   zDXF VIEWPORT entityVIEWPORTreturnNonec                V    t                                                       g | _        d S N)super__init___frozen_layers)self	__class__s    Q/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/entities/viewport.pyr   zViewport.__init__	  s'    )+    entityr   c                f    t          |t                    sJ t          | j                  |_        d S r   )
isinstancer-   listr   )r   r   copy_strategys      r   	copy_datazViewport.copy_data  s1    &(+++++ $T%8 9 9r   	list[str]c                    | j         S )z-Set/get frozen layers as list of layer names.)r   r   s    r   frozen_layerszViewport.frozen_layers  s     ""r   namesIterable[str]c                .    t          |          | _        d S r   )r   r   )r   r   s     r   r   zViewport.frozen_layers  s    "5kkr   
layer_namestrintc                    t          j        |          }t          | j                  D ]!\  }}|t          j        |          k    r|c S "dS )N)r   make_table_key	enumerater   )r   r   name_keyindexnames        r   _layer_indexzViewport._layer_index  sY    +J77$T%899 	 	KE493D9999 :rr   c                t    |                      |          }|dk    r| j                            |           dS dS )z%Freeze `layer_name` in this viewport.r   N)r   r   appendr   r   r   s      r   freezezViewport.freeze!  sB    !!*--B;;&&z22222 ;r   boolc                4    |                      |          dk    S )z<Returns ``True`` if `layer_name` id frozen in this viewport.r   )r   )r   r   s     r   	is_frozenzViewport.is_frozen'  s      ,,22r   c                P    |                      |          }|dk    r
| j        |= dS dS )z#Thaw `layer_name` in this viewport.r   N)r   r   r   s      r   thawzViewport.thaw+  s6    !!*--B;;#E*** ;r   c                v    | j                             d          r| j         j        dk    S | j         j        dk    S )Nr7   r   r!   )dxfhasattrr7   r9   r   s    r   
is_visiblezViewport.is_visible1  s9     8H%% 	'8?Q&&x{Qr   N	processorOptional[SubclassProcessor]r)   c                j   t                                          |          }|r|                    |t          dd          }|j        r|                                  nTt          |          r|                     |          }t          |          r!|                    |t          j
                   |S )Nr;   F)subclasslog)r   )r   load_dxf_attribsfast_load_dxfattribsacdb_viewport_group_codesr12load_xdata_into_dxf_namespacelenload_frozen_layer_handleslog_unprocessed_tagsacdb_viewportr   )r   r   r   tagsr   s       r   r   zViewport.load_dxf_attribs=  s     gg&&y11 
	V11. 2  D } V224444t99 @99$??Dt99 V224-BT2UUU
r   docr(   c                    t                                          |           g }|j        }| j        D ]8}	 |                    ||         j        j                   )# t          $ r Y 5w xY w|| _        d S r   )r   post_load_hookentitydbr   r   r   r   KeyError)r   r   bagdbhandler   s        r   r   zViewport.post_load_hookN  s    s###\) 	 	F

2f:>.////   !s   %A
A)(A)r   r   c                    t                      }|D ]G}|j        t          k    r | j                            |j                   2|                    |           H|S r   )r   codeFROZEN_LAYER_GROUP_CODEr   r   value)r   r   unprocessed_tagstags       r   r   z"Viewport.load_frozen_layer_handlesY  sb    66 	- 	-Cx222#**395555 '',,,,r   c                   	 d | j                             dd          D             }n# t          $ r Y d S w xY w|dd         }| j        }d}t	          |t
          j        t          |d                             }t	          |t
          j        t          |d                             }t	          |t
          j	        t          |d	                             }t	          |t
          j
        t          |d
                             }t	          |t
          j        t          |d                             }	 |d         |_        |d         |_        |d         |_        |d         |_        |d         |d         f|_        |d         |_        |d         |_        |d         |_        |d         |_        |d         |_        |d         |_        |d         |_        |d         |d         f|_        |d         |d         f|_        |d         |d         f|_        n# t6          $ r t9          d          w xY w||_        |dd          | _        | j                             d           d S )Nc                    g | ]\  }}|S  r   ).0cvs      r   
<listcomp>z:Viewport.load_xdata_into_dxf_namespace.<locals>.<listcomp>d  s    HHH$!QAHHHr   ACADMVIEW   r      r?   rA   rC      r!   r;   ru         r_      	   r0   r=   rG                     z&Invalid viewport entity - missing data   ) xdata	get_xlistr   r   r    r	   VSF_FAST_ZOOMr   VSF_SNAP_MODEVSF_GRID_MODEVSF_ISOMETRIC_SNAP_STYLEVSF_HIDE_PLOT_MODErF   rD   rR   rO   r<   rH   rK   rM   r^   rT   rc   rQ   r>   r@   rB   
IndexErrorr   rW   r   discard)r   r   r   rW   s       r   r   z&Viewport.load_xdata_into_dxf_namespaceb  s?   	HH$*"6"6vw"G"GHHHDD 	 	 	FF	AbDzhue&94R>>JJue&94R>>JJue&94R>>JJue&Dd4PR8nnUUue&>T"XOO	N$(GC!(,QC%#'7C "1gCO$(GT!W$4C!*.q'C'+/7C(*.q'C'"1gCO"2hCO8CL
 ""XCN"&r(DH"4C#Bxb1C#Bxb1C 	N 	N 	N#$LMMM	N	"233i
6"""""s   %( 
663C#H H1	tagwriterr+   c                b   t                                          |           |j        t          k    r|                     |           dS |                    t          t          j                   | j	        
                    |g d           t          | j                  rr| j        
J d            | j        j        }| j        D ]M}	 |                    |          }|                    t           |j	        j                   ># t$          $ r Y Jw xY w| j	        
                    |g d           dS )z(Export entity specific data as DXF tags.)r/   r3   r5   r7   r9   r<   r>   r@   rB   rD   rF   rH   rK   rM   rO   rQ   rR   rT   Nvalid DXF document required)rW   rY   r\   r^   ra   rc   re   rg   ri   rk   rl   rn   rp   rr   rw   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   export_entityrv   r   export_acdb_viewport_r12
write_tag2r   r   r   r   export_dxf_attribsr   r   r   layersgetr   r   r   )r   r   r  r   layerr   s        r   r   zViewport.export_entity  sd   i(((5(()))44444  -2DEEEH''    . 4%&& 	Xx++-J+++"&"4 X XJX &

: 6 6 ",,-DeiFVWWWW .   
 H''  " " " " "s   D
DDc                    | j                             |g d           |                    |                                            d S )N)r/   r3   r5   r7   r9   )r   r  
write_tagsdxftags)r   r   s     r   r  z!Viewport.export_acdb_viewport_r12  sR    ##  		
 		
 		
 	T\\^^,,,,,r   c           "     L     fd} j         }t          dd          t          dd          t          dd          t          dd	          t          d
|j                  t          d
|j                  t          d|j                  t          d|j                  t          d|j        d                   t          d|j        d                   t          d|j                  t          d|j	                  t          d|j
                  t          d|j                  t          d|j                  t          d |t          j                            t          d|j                  t          d |t          j                            t          d |t          j                            t          d |t          j                            t          dd          t          d|j                  t          d|j        d                   t          d|j        d                   t          d|j        d                   t          d|j        d                   t          d|j        d                   t          d|j        d                   t          d |t          j                            t          dd          g}|                    d  j        D                        |                    t          dd          t          dd          g           t5          |          S )Nc                *    j         j        | z  rdndS )Nr!   r   )r   rW   )flagr   s    r   r  zViewport.dxftags.<locals>.flag  s    -41114r   i  r   i  r   i  {i.  rE   i  i  r   r!   c              3  6   K   | ]}t          d |          V  dS )i  N)r   )r   r   s     r   	<genexpr>z#Viewport.dxftags.<locals>.<genexpr>  s,      RRF4,,RRRRRRr   })r   r   r   rF   rD   rR   rO   r<   rH   rK   rM   r^   rT   r	   r   rc   r   r   r   rQ   r>   r@   rB   r   extendr   r   )r   r  r   r   s   `   r   r	  zViewport.dxftags  s   	5 	5 	5 	5 	5 h4  4!!44dC122dC5664-..4))4.q122%a(  4455456644554))4))4e122334&&4e122334e122334e<==>>4OO4((4,Q/004,Q/004)!,--4)!,--4)!,--4)!,--4e677884C"
F 	RRt?QRRRRRRtS!!tS!!	
 	
 	
 Dzzr   registryxref.Registryc                x   | j         J t                                          |           |                    | j                            d                     |                    | j                            d                     |                    | j                            d                     |                    | j                            d                     |                    | j                            d                     |                    | j                            d                     d S )Nrk   rl   r   rz   r   r   )r   r   register_resources
add_handler   r  )r   r  r   s     r   r  zViewport.register_resources  s    x###""8,,,DHLL66777DHLL):;;<<<DHLL)>??@@@DHLL)<==>>>DHLL)<==>>>DHLL6677777r   clonemappingxref.ResourceMapperc                   t          |t                    sJ t                                          |                               | |dd                               | |dd                               | |dd                               | |dd                               | |dd           |                                 fd| j        D             |_                            | |d	d                               | |d
d           t          dd          D ]}|j        	                    d|             d S )NrY   Trm   rk   rl   r   r   c                :    g | ]}                     |          S r   )	get_layer)r   r   r  s     r   r   z*Viewport.map_resources.<locals>.<listcomp>.  s'    VVV4w0066VVVr   rz   r   r!   r   ref_vp_object_)
r   r-   r   map_resourcesmap_existing_handletake_sun_ownershipr   ranger   r   )r   r  r  numr   s     ` r   r  zViewport.map_resources!  s   %*****eW---##%3d 	$ 	
 	
 	
 	##D%#MMM##D%1BT#RRR##D%1FQU#VVV##D%#MMM  """VVVV4CUVVV 	##D%1Dt#TTT##D%1Dt#TTT
 A;; 	6 	6CI4s445555	6 	6r   c                    | j         J | j         j                            | j                            d                    }|r| j        j        |j        _        d S d S )Nr   )r   r   r  r   r   owner)r   suns     r   r   zViewport.take_sun_ownership;  sY    x###h##DHLL$>$>?? 	, HOCGMMM	, 	,r   old_namenew_namec                    | j         
J d            | j         j        j         |          fd| j        D             | _        d S )Nr   c                6    g | ]} |          k    r|nS r   r   )r   r   keyr'  old_keys     r   r   z0Viewport.rename_frozen_layer.<locals>.<listcomp>E  s<     
 
 
=ASSYY'))TTx
 
 
r   )r   r  r*  r   )r   r&  r'  r*  r+  s     `@@r   rename_frozen_layerzViewport.rename_frozen_layerA  ss    x##%B###ho!#h--
 
 
 
 
 
EIEW
 
 
r   
list[Vec2]c                   | j         j        }|j        }|j        }| j         j        dz  }| j         j        dz  }t          ||z
  ||z
            t          ||z   ||z
            t          ||z   ||z             t          ||z
  ||z             gS )zReturns the default rectangular clipping path as list of
        vertices. Use function :func:`ezdxf.path.make_path` to get also
        non-rectangular shaped clipping paths if defined.
        r;   )r   r/   xyr3   r5   r   )r   r/   cxcywidth2height2s         r   clipping_rect_cornerszViewport.clipping_rect_cornersI  s    
 XX!#(/A%fb7l++fb7l++fb7l++fb7l++	
 	
r   tuple[Vec2, Vec2]c                J    |                                  }|d         |d         fS )zwReturns the lower left and the upper right corner of the clipping
        rectangle in paperspace coordinates.
        r   r;   )r5  )r   cornerss     r   clipping_rectzViewport.clipping_rectZ  s(     ,,..qz71:%%r   c                `    | j         j        t          j        z  }|r| j         j        }|dk    S dS )z?Returns ``True`` if a non-rectangular clipping path is defined.rZ   F)r   rW   r	   VSF_NON_RECTANGULAR_CLIPPINGrY   )r   _flagr   s      r   has_extended_clipping_pathz#Viewport.has_extended_clipping_patha  s6     !CC 	!X6FS= ur   floatc                f    | j         j        }t          |          dk     rdS | j         j        }||z  S )z7Returns the scaling factor from modelspace to viewport.g-q=        )r   rO   absr5   )r   
msp_height	vp_heights      r   	get_scalezViewport.get_scalej  s6    X)
z??U""3HO	:%%r   r   c                    	 t          | j        j                                                  S # t          $ r
 t
          cY S w xY w)z-Returns the normalized view direction vector.)r   r   rD   	normalizeZeroDivisionErrorr   r   s    r   get_view_directionzViewport.get_view_directionr  sJ    	677AACCC  	 	 	MMM	s   *- A Ac                Z    |                                                      t                    S )z/Returns ``True`` if the viewport is a top view.)rH  iscloser   r   s    r   is_top_viewzViewport.is_top_viewy  s$     &&((00888r   c                4    t          | j        j                  S )z1Returns the center of the VIEWPORT in modelspace.)r   r   r<   r   s    r   get_view_center_pointzViewport.get_view_center_point~  s    DH.///r   r   c                   |                                  }| j        j        }t          | j        j                  }| j        j        ||z  z
  }t          | j        j                  }t          j        |j	         |j
         |j                   }|t          j        |          z  }|r)|t          j        t          j        |                    z  }|t          j        |j	        |j
        d          z  S )zLReturns the transformation matrix from modelspace to paperspace coordinates.r   )rD  r   rR   r   r<   r/   rF   r   	translater/  r0  zscalez_rotatemathradians)r   rQ  rotation_anglemsp_center_pointoffset
base_pointms          r   get_transformation_matrixz"Viewport.get_transformation_matrix  s        $ 9!%dh&@!A!Ax*:U*BC$(455
 
}z|mjl]KK	X^E""" 	A"4<#?#?@@@A8%fh!<<<<r   c                X    	 | j         j        | j         j        z  S # t          $ r Y dS w xY w)zaReturns the aspect ratio of the viewport, return 0.0 if width or
        height is zero.
        r@  )r   r3   r5   rG  r   s    r   get_aspect_ratiozViewport.get_aspect_ratio  s<    	8>DHO33  	 	 	33	s    
))!tuple[float, float, float, float]c                `   | j         j        }|r|                                 S t          | j         j                  t          | j         j                  z   }| j         j        }|                                 }|dk    rt          d          ||z  dz  }|dz  }|\  }}}	||z
  ||z
  ||z   ||z   fS )zuReturns the limits of the modelspace to view in drawing units
        as tuple (min_x, min_y, max_x, max_y).
        r@  z+invalid viewport parameters width or heightg      ?)	r   rR   _get_modelspace_slowr   r<   rF   rO   r\  
ValueError)
r   rU  rV  rB  ratiow2h2mxmy_s
             r   get_modelspace_limitszViewport.get_modelspace_limits  s    
 !% 9 	6,,...%)$(*D%E%ETXMgHhHh%h $ 4J))++E|| !NOOOe#c)Bc!B(IBA7BGR"Wb2g55r   c                   	 |                                  }|                                 | j        j        }| j        j        dz  }| j        j        dz  }t          j        | |j        z   | |j	        z   f||j        z   | |j	        z   f||j        z   ||j	        z   f| |j        z   ||j	        z   ff          }t          |                    |                    }|j        j        |j        j	        |j        j        |j        j	        fS )zReturns the limits of the modelspace to view in drawing units
        as tuple (min_x, min_y, max_x, max_y) and take account rotaiton.
        r;   )rZ  inverser   r/   r3   r5   r   r   r/  r0  r   fast_2d_transformextminextmax)r   matrixr   rb  rc  framebboxs          r   r_  zViewport._get_modelspace_slow  s    
	 //11HOX^aho!	S13Yac	"!#XsQSy!!#XrACx S13YQS!	# 
 
 f66u==??{}dkmT[]DKMIIr   )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(   )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   r6  )r   r>  )r   r   )r   r   )r   r]  ),__name__
__module____qualname____doc__DXFTYPEr   r"   r%   r   
DXFATTRIBSr   r'   r   propertyr   setterr   r   r   r   r   r   r   r   r   r   r  r	  r  r  r   r,  r5  r9  r=  rD  rH  rK  rM  rZ  r\  rg  r_  __classcell__)r   s   @r   r-   r-      sK       Gz;FFJ, , , , , , 5A : : : : : # # # X# * * * *   3 3 3 33 3 3 3+ + + + 	 	 	 X	 8<      "	" 	" 	" 	" 	" 	"       '# '# '# '#RK K K K K KZ- - - -/ / / /b	8 	8 	8 	8 	8 	86 6 6 6 6 64, , , ,
 
 
 

 
 
 
"& & & &    X& & & &    9 9 9 X90 0 0 0= = = =$   6 6 6 6(J J J J J J J Jr   )G
__future__r   typingr   r   r   typing_extensionsr   rS  ezdxf.lldxfr   r	   ezdxf.lldxf.attributesr
   r   r   r   r   r   ezdxf.lldxf.typesr   r   ezdxf.lldxf.tagsr   ezdxf.lldxf.constr   r   r   r   r   
ezdxf.mathr   r   r   r   r   r   r   r   ezdxf.toolsr    	dxfentityr"   r#   dxfgfxr$   r%   factoryr&   copyr'   ezdxf.documentr(   ezdxf.entitiesr)   r*   ezdxf.lldxf.tagwriterr+   ezdxfr,   __all__point3dpoint2dis_in_integer_rangeis_integer_boolis_not_null_vectoris_valid_aci_colorr   r   r   r-   r   r   r   <module>r     s   # " " " " " 4 4 4 4 4 4 4 4 4 4 " " " " " "  ! ! ! ! ! !                      0 / / / / / / / ! ! ! ! ! !             	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ' & & & & & 4 4 4 4 4 4 4 4 + + + + + + + + $ $ $ $ $ $       &&&&&&66666666777777,
 	''"EM7CCC 	Q''' 	''"a((($ 	''"a(((%6 	ggb!$$$7@ 	WWRu}gNNNAB 	772U]GLLLCD 	%-b"NNNEF 	%-b"NNNGJ 	 5=&!Q!Q!QKN 	WWRu}gNNNOP 	"772r#:#:#:QR 	#GGB$:$:$:ST 	"772q#9#9#9UX 	wwr1---YZ 	ggb!,,,[\ 	GGB222] ^ 	wwr3///_Z 	Q'''[d 	#GGCt$L$L$Leh 	771b111iz 	ww3i3Aq99 	
 
 
{F 	GG/ 	
 
 
GR 	GGB***ST 	ggcHHHUV 	gg-2 
 
 
Wd 	gg-2 
 
 
ev 	ggcllw~ 	773666P 	''3i3Aq99 	
 
 
Q\ 	WWS!,,,]h 	773i3Aq99 	
 
 
iv 	''":::wx 	WWSXMMMy z %WSXMMM&wsx$OOO!(Ha$"
 "
 "
 ")/ "
 "
 "
 #738<<< :::!(2"
 "
 "
 ")!B!B!B!(!B!B!BgchFFF #738<<<"738<<<"738<<<"72(;;;}  B BF /.}== 
   IJ IJ IJ IJ IJz IJ IJ IJ IJ IJr   