
    Ogl                    v   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jz                  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jz                  e$      d/ ed0ejz                  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jz                  e!      dS edTejz                  e"e
j                  eU      dV edWejz                  e#e
j                  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
j                  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-             ZFy)    )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	d  fdZ
efd!dZed"d       Zej                  d#d       Zd$dZd%dZd&d	Zd%d
Zed'd       Z	 d(	 	 	 d) fdZd* fdZd+dZd dZd, fdZd-dZd.dZd/ fdZd0 fdZd dZd1dZd2dZ d3dZ!ed'd       Z"d4dZ#ed'd       Z$d5dZ%d6dZ&d4dZ'd7dZ( xZ)S )8r-   zDXF VIEWPORT entityVIEWPORTc                0    t         |           g | _        y N)super__init___frozen_layers)self	__class__s    \/var/www/html/public_html/myphp/venv/lib/python3.12/site-packages/ezdxf/entities/viewport.pyr   zViewport.__init__	  s    )+    c                \    t        |t              sJ t        | j                        |_        y r   )
isinstancer-   listr   )r   entitycopy_strategys      r   	copy_datazViewport.copy_data  s%    &(+++ $T%8%8 9r   c                    | j                   S )z-Set/get frozen layers as list of layer names.)r   r   s    r   frozen_layerszViewport.frozen_layers  s     """r   c                $    t        |      | _        y r   )r   r   )r   namess     r   r   zViewport.frozen_layers  s    "5kr   c                    t        j                  |      }t        | j                        D ]!  \  }}|t        j                  |      k(  s|c S  y)N)r   make_table_key	enumerater   )r   
layer_namename_keyindexnames        r   _layer_indexzViewport._layer_index  sM    ++J7$T%8%89 	KE4933D99	 r   c                h    | j                  |      }|dk(  r| j                  j                  |       yy)z%Freeze `layer_name` in this viewport.r   N)r   r   appendr   r   r   s      r   freezezViewport.freeze!  s2    !!*-B;&&z2 r   c                *    | j                  |      dk7  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                L    | j                  |      }|dk7  r| j                  |= yy)z#Thaw `layer_name` in this viewport.r   N)r   r   r   s      r   thawzViewport.thaw+  s,    !!*-B;##E* r   c                    | j                   j                  d      r| j                   j                  dkD  S | j                   j                  dkD  S )Nr7   r   r!   )dxfhasattrr7   r9   r   s    r   
is_visiblezViewport.is_visible1  s;     88H%88??Q&&xx{{Qr   c                (   t         |   |      }|r|j                  |t        dd      }|j                  r| j                          |S t        |      r| j                  |      }t        |      r!|j                  |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   	processorr   tagsr   s       r   r   zViewport.load_dxf_attribs=  s     g&y111. 2 D }}224 
	 t999$?Dt9224-BTBT2U
r   c                    t         |   |       g }|j                  }| j                  D ]+  }	 |j	                  ||   j
                  j                         - || _        y # t        $ r Y Aw xY wr   )r   post_load_hookentitydbr   r   r   r   KeyError)r   docbagdbhandler   s        r   r   zViewport.post_load_hookN  sp    s#\\)) 	F

2f:>>../	
 "  s   (A!!	A-,A-c                    t               }|D ]L  }|j                  t        k(  r&| j                  j	                  |j
                         <|j	                  |       N |S r   )r   codeFROZEN_LAYER_GROUP_CODEr   r   value)r   r   unprocessed_tagstags       r   r   z"Viewport.load_frozen_layer_handlesY  sT    6 	-Cxx22##**3995 '',		-
  r   c                   	 | j                   j                  dd      D cg c]  \  }}|	 }}}|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|_        ||_        |dd  | _        | j                   j?                  d       y c c}}w # t        $ r Y y w xY w# t6        $ r t9        d      w xY w)N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_ZOOMbool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   cvr   r   rW   s         r   r   z&Viewport.load_xdata_into_dxf_namespaceb  s   	"&**"6"6vw"GH$!QAHDH Abzhhue&9&94R>Jue&9&94R>Jue&9&94R>Jue&D&Dd4PR8nUue&>&>T"X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 	"23i

6"K I 		@  	N#$LMM	Ns.   G$ GG$ B*G3 G$ $	G0/G03Hc                b   t         |   |       |j                  t        k(  r| j	                  |       y|j                  t        t        j                         | j                  j                  |g d       t        | j                        rv| j                  J d       | j                  j                  }| j                  D ]>  }	 |j                  |      }|j                  t         |j                  j"                         @ | j                  j                  |g d       y# t$        $ r Y kw xY w)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   	tagwriterr   r   layerr   s        r   r   zViewport.export_entity  s   i(5()))4  -2D2DEHH''. 4%%&xx+J-JJ+"&"4"4 XJX &

: 6 ",,-DeiiFVFVWX HH''" . s   D""	D.-D.c                ~    | j                   j                  |g d       |j                  | j                                y )N)r/   r3   r5   r7   r9   )r   r   
write_tagsdxftags)r   r   s     r   r   z!Viewport.export_acdb_viewport_r12  s2    ##		
 	T\\^,r   c           "          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}|j1                  d  j2                  D               |j1                  t        dd      t        dd      g       t5        |      S )Nc                >    j                   j                  | z  rdS dS )Nr!   r   )r   rW   )flagr   s    r   r  zViewport.dxftags.<locals>.flag  s    -1414r   i  r   i  r   i  {i.  rE   i  i  r   r!   c              3  4   K   | ]  }t        d |        yw)i  N)r   ).0r   s     r   	<genexpr>z#Viewport.dxftags.<locals>.<genexpr>  s     RF4,Rs   })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 hh4 4!44dC112dC5564--.4)4..q12%%a( 4445455644454)4)4e11234&4e11234e11234e<<=>4O4(4,,Q/04,,Q/04))!,-4))!,-4))!,-4))!,-4e66784C"
F 	Rt?Q?QRRtS!tS!	
 Dzr   c                8   | j                   J t        | 	  |       |j                  | j                  j                  d             |j                  | j                  j                  d             |j                  | j                  j                  d             |j                  | j                  j                  d             |j                  | j                  j                  d             |j                  | j                  j                  d             y )Nrk   rl   r   rz   r   r   )r   r   register_resources
add_handler   r   )r   registryr   s     r   r	  zViewport.register_resources  s    xx###"8,DHHLL67DHHLL):;<DHHLL)>?@DHHLL)<=>DHHLL)<=>DHHLL67r   c                T   t        |t              sJ t        |   ||       |j	                  | |dd       |j	                  | |dd       |j	                  | |dd       |j	                  | |dd       |j	                  | |dd       |j                          | j                  D cg c]  }|j                  |       c}|_        |j	                  | |dd       |j	                  | |d	d       t        d
d      D ]   }|j                  j                  d|        " y c c}w )NrY   Trm   rk   rl   r   r   rz   r   r!   r   ref_vp_object_)r   r-   r   map_resourcesmap_existing_handletake_sun_ownershipr   	get_layerranger   r   )r   clonemappingr   numr   s        r   r  zViewport.map_resources!  s8   %***eW-##%3d 	$ 	
 	##D%#M##D%1BT#R##D%1FQU#V##D%#M  "CGCUCUV4w006V 	##D%1Dt#T##D%1Dt#T
 A; 	6CIIse45	6 Ws   +D%c                    | j                   J | j                   j                  j                  | j                  j                  d            }|r&| j                  j                  |j                  _        y y )Nr   )r   r   r   r   r   owner)r   suns     r   r  zViewport.take_sun_ownership;  sT    xx###hh##DHHLL$>? HHOOCGGM r   c                    | j                   J d       | j                   j                  j                  } ||      }| j                  D cg c]  } ||      |k7  r|n| c}| _        y c c}w )Nr   )r   r   keyr   )r   old_namenew_namer  old_keyr   s         r   rename_frozen_layerzViewport.rename_frozen_layerA  sg    xx#B%BB#hhoo!!h-EIEWEW
=ASY')Tx7
 
s   
A)c                N   | 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    
 XXXX!#((//A%fb7l+fb7l+fb7l+fb7l+	
 	
r   c                6    | j                         }|d   |d   fS )zwReturns the lower left and the upper right corner of the clipping
        rectangle in paperspace coordinates.
        r   r;   )r&  )r   cornerss     r   clipping_rectzViewport.clipping_rectZ  s%     ,,.qz71:%%r   c                    | j                   j                  t        j                  z  }|r| j                   j                  }|dk7  S y)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  s;     !C!CCXX66FS= r   c                    | j                   j                  }t        |      dk  ry| 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  s8    XX))
z?U"HHOO	:%%r   c                t    | j                   j                  }|j                  xs |j                  t              S )z/Returns ``True`` if the viewport is a top view.)r   rD   is_nulliscloser   )r   view_directions     r   is_top_viewzViewport.is_top_viewr  s/      $xx==%%G)?)?)GGr   c                    t        | j                  j                        }|j                  rt        | j                  j                        }|S r   )r   r   r<   r5  rF   )r   center_points     r   get_view_center_pointzViewport.get_view_center_pointx  s;     DHH667 : :;Lr   c                   | j                         }| j                  j                  }| j                         }| j                  j                  ||z  z
  }t        j                  |      }|r+|t        j                  t        j                  |            z  }|t        j                  |j                  |j                  d      z  S )zLReturns the transformation matrix from modelspace to paperspace coordinates.r   )r3  r   rR   r;  r/   r   scalez_rotatemathradians	translater   r!  )r   r=  rotation_anglemsp_center_pointoffsetms         r   get_transformation_matrixz"Viewport.get_transformation_matrix  s       $ 9 9!%!;!;!=xx*:U*BCNN5!""4<<#?@@A8%%fhh!<<<r   c                |    	 | j                   j                  | j                   j                  z  S # t        $ r Y yw xY w)zaReturns the aspect ratio of the viewport, return 0.0 if width or
        height is zero.
        r/  )r   r3   r5   ZeroDivisionErrorr   s    r   get_aspect_ratiozViewport.get_aspect_ratio  s4    	88>>DHHOO33  		s   ,/ 	;;c                V   | j                         | j                  j                  }| j                  j                  }| j	                         }|dk(  rt        d      ||z  dz  }|dz  }|rt        j                  | | f|| f||f| |ff      }t        j                  |      t        fd|D              }|j                  j                  |j                  j                  |j                  j                  |j                  j                  fS \  }}	}
||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      ?c              3  F   K   | ]  }|j                        z     y wr   )rotate)r  r   anglerC  s     r   r  z1Viewport.get_modelspace_limits.<locals>.<genexpr>  s      S%3C!C Ss   !)r;  r   rO   rR   rI  
ValueErrorr   r   r?  r@  r   extminr   r!  extmax)r   r1  rB  ratiow2h2framebboxmxmy_rM  rC  s              @@r   get_modelspace_limitszViewport.get_modelspace_limits  s    "&!;!;!= HH00
 $ 9 9%%'C<JKK%#%#IIbSzB9r2h"b	JKELL0E  SU SSD;;==$++--MM(IBA7BGR"Wb2g55r   )returnNone)r   r   rZ  r[  )rZ  z	list[str])r   zIterable[str])r   strrZ  int)r   r\  rZ  r[  )r   r\  rZ  r   )rZ  r   r   )r   zOptional[SubclassProcessor]rZ  r)   )r   r(   )r   r   rZ  r   )r   r+   rZ  r[  )r   r+   )rZ  r   )r  zxref.RegistryrZ  r[  )r  r   r  zxref.ResourceMapperrZ  r[  )r  r\  r  r\  rZ  r[  )rZ  z
list[Vec2])rZ  ztuple[Vec2, Vec2])rZ  float)rZ  r   )rZ  r   )rZ  z!tuple[float, float, float, float])*__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  r&  r)  r-  r3  r8  r;  rF  rI  rY  __classcell__)r   s   @r   r-   r-      s   Gz;FJ, 5A : # # * *33+ 	 	 8<4	"	" '#RKZ-/b	864,

"&  & H H

=6r   )G
__future__r   typingr   r   r   typing_extensionsr   r?  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   <module>r     s)   # 4 4 "  !   0 ! 	 	 	 ' 4 + $ &67,
 	'"EMM7C 	Q' 	'"a($ 	'"a(%6 	gb!$7@ 	WRu}}gNAB 	72U]]GLCD 	%--b"NEF 	%--b"NGJ 	 5==&!QKN 	WRu}}gNOP 	"72r#:QR 	#GB$:ST 	"72q#9UX 	wr1-YZ 	gb!,[\ 	GB2]^ 	wr3/_Z 	Q'[d 	#GCt$Leh 	71b1iz 	w3i33Aq9 	
{F 	G// 	
GR 	GB*ST 	gcHUV 	g--22 
Wd 	g--22 
ev 	gclw~ 	736P 	'3i33Aq9 	
Q\ 	WS!,]h 	73i33Aq9 	
iv 	'":wx 	WSXMyz %SXM&sx$O!(Ha$"
 ")// "
 #38< :!(22"
 ")!B!(!BchF #38<"38<"38<"2(;}BF /}= 
   k6z k6 k6r   