
    hl                    f   S SK Jr  S SKJrJrJr  S SKJr  S SKrS SK	J
r
  S SK	Jr  S SKJrJrJrJrJrJr  S SKJrJr  S S	KJr  S S
KJrJrJrJrJr  S SKJrJ r J!r!J"r"J#r#J$r$J%r%J&r&  S SK'J(r(  SSK)J*r*J+r+  SSK,J-r-J.r.  SSK/J0r0  SSK1J2r2  \(       a  S SK3J4r4  S SK5J6r6J7r7  S SK8J9r9  S SK:J;r;  S/r<\" S0 S\" S\Rz                  \!S9_S\" SSS9_S\" SSS9_S \" S!S S9_S"\" S#S$S9_S%\" S&\R|                  \!S9_S'\" S(\R|                  \!S9_S)\" S*\R|                  \ " SS5      S9_S+\" S,\R|                  \ " SS5      S9_S-\" S.\Rz                  \$S9_S/\" S0\Rz                  \!S9_S1\" S2S3S9_S4\" S5S S9_S6\" S7S S9_S8\" S9SS9_S:\" S3S S9_S;\" S<S S9_0 S=\" S>S?S9_S@\" SAS S9_SB\" SCSDSESF9_SG\" SSHS9_SI\" SJS \
R~                  " S SK5      \SL9_SM\" SNS \
R                  \SL9_SO\" SPS S9_SQ\" SR\Rz                  \!S9_SS\" ST\Rz                  \"\
R                  \SU9_SV\" SW\Rz                  \#\
R                  \SU9_SX\" SY5      _SZ\" S[SES\9_S]\" S^S \
R~                  " S SK5      \SL9_S_\" S`S S9_Sa\" SbSc\
R~                  " S Sd5      \Se9_Sf\" SgShSi9_Sj\" SkShSESl9_E\" SmShSESl9\" SnShSESl9\" SoShSSESp9\" SqS Sh\
R                  \Sr9\" SsShSi9\" StShSi9\" SuSh\
R                  Sv9\" SwShSi9\" SxShSi9\" SyShSESl9\" SzShSi9\" S{ShSi9\" S|ShSi9\" S}ShSi9S~.E5      rC\" \C5      rDSrE\0 " S S\-5      5       rFg)    )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                    ^  \ rS rSrSrSr\" \\\	5      r
S"U 4S jjr\4S#S jjr\S$S j5       r\R                   S%S j5       rS&S jrS'S	 jrS(S
 jrS'S jr\S)S j5       r S*   S+U 4S jjjrS,U 4S jjrS-S jrS"S jrS.U 4S jjrS/S jrS0S jrS1U 4S jjrS2U 4S jjrS"S jrS3S jr S4S jr!S5S jr"\S)S j5       r#S6S jr$\S)S j5       r%S7S jr&S8S jr'S6S jr(S9S  jr)S!r*U =r+$ ):r-      zDXF VIEWPORT entityVIEWPORTc                0   > [         TU ]  5         / U l        g N)super__init___frozen_layers)self	__class__s    I/var/www/html/env/lib/python3.13/site-packages/ezdxf/entities/viewport.pyr   Viewport.__init__	  s    )+    c                f    [        U[        5      (       d   e[        U R                  5      Ul        g r   )
isinstancer-   listr   )r   entitycopy_strategys      r   	copy_dataViewport.copy_data  s(    &(++++ $T%8%8 9r   c                    U R                   $ )z-Set/get frozen layers as list of layer names.)r   r   s    r   frozen_layersViewport.frozen_layers  s     """r   c                $    [        U5      U l        g r   )r   r   )r   namess     r   r   r     s    "5kr   c                    [         R                  " U5      n[        U R                  5       H#  u  p4U[         R                  " U5      :X  d  M!  Us  $    g)N)r   make_table_key	enumerater   )r   
layer_namename_keyindexnames        r   _layer_indexViewport._layer_index  sF    ++J7$T%8%89KE933D99 : r   c                j    U R                  U5      nUS:X  a  U R                  R                  U5        gg)z%Freeze `layer_name` in this viewport.r   N)r   r   appendr   r   r   s      r   freezeViewport.freeze!  s2    !!*-B;&&z2 r   c                *    U R                  U5      S:g  $ )z<Returns ``True`` if `layer_name` id frozen in this viewport.r   )r   )r   r   s     r   	is_frozenViewport.is_frozen'  s      ,22r   c                N    U R                  U5      nUS:w  a  U R                  U	 gg)z#Thaw `layer_name` in this viewport.r   N)r   r   r   s      r   thawViewport.thaw+  s,    !!*-B;##E* r   c                    U R                   R                  S5      (       a  U R                   R                  S:  $ U R                   R                  S:  $ )Nr7   r   r!   )dxfhasattrr7   r9   r   s    r   
is_visibleViewport.is_visible1  s>     88H%%88??Q&&xx{{Qr   c                D  > [         TU ]  U5      nU(       a  UR                  U[        SSS9nUR                  (       a  U R                  5         U$ [        U5      (       a  U R                  U5      n[        U5      (       a  UR                  U[        R                  S9  U$ )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   Viewport.load_dxf_attribs=  s     g&y111. 2 D }}224 
	 t9999$?Dt99224-BTBT2U
r   c                   > [         TU ]  U5        / nUR                  nU R                   H+  n UR	                  X4   R
                  R                  5        M-     X l        g ! [         a     MC  f = fr   )r   post_load_hookentitydbr   r   r   r   KeyError)r   docbagdbhandler   s        r   r   Viewport.post_load_hookN  sg    s#\\))F

2:>>../ *
 "  s   'A!!
A/.A/c                    [        5       nU HO  nUR                  [        :X  a'  U R                  R	                  UR
                  5        M>  UR	                  U5        MQ     U$ r   )r   codeFROZEN_LAYER_GROUP_CODEr   r   value)r   r   unprocessed_tagstags       r   r   "Viewport.load_frozen_layer_handlesY  sO    6Cxx22##**3995 '',	 
  r   c                    U R                   R                  SS5       VVs/ s H  u  pUPM	     nnnUSS nU R                  nSn[	        U[
        R                  [        US   5      5      n[	        U[
        R                  [        US   5      5      n[	        U[
        R                  [        US   5      5      n[	        U[
        R                  [        US	   5      5      n[	        U[
        R                  [        US
   5      5      n US   Ul        US   Ul        US   Ul        US   Ul        US   US   4Ul        US   Ul        US   Ul        US   Ul        US   Ul        US   Ul        US   Ul        US   Ul        US   US   4Ul        US   US   4Ul        US   US   4Ul        XTl        USS  U l        U R                   R?                  S5        g s  snnf ! [         a     g f = f! [6         a    [9        S5      ef = f)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   &Viewport.load_xdata_into_dxf_namespaceb  s   	"&**"6"6vw"GH"G$!A"GD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*G5 G% %
G21G25Hc                x  > [         TU ]  U5        UR                  [        :X  a  U R	                  U5        gUR                  [        [        R                  5        U R                  R                  U/ SQ5        [        U R                  5      (       ay  U R                  c   S5       eU R                  R                  nU R                   H?  n UR                  U5      nUR                  [         UR                  R"                  5        MA     U R                  R                  U/ SQ5        g! [$         a     Mo  f = f)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  Viewport.export_entity  s   i(5()))4  -2D2DEHH''. 4%%&&xx+J-JJ+"&"4"4JX &

: 6 ",,-DeiiFVFVW #5 HH''" . s   D++
D98D9c                ~    U R                   R                  U/ SQ5        UR                  U R                  5       5        g )N)r/   r3   r5   r7   r9   )r   r  
write_tagsdxftags)r   r  s     r   r  !Viewport.export_acdb_viewport_r12  s2    ##		
 	T\\^,r   c           "       ^  U 4S jnT R                   n[        SS5      [        SS5      [        SS5      [        SS	5      [        S
UR                  5      [        S
UR                  5      [        SUR
                  5      [        SUR                  5      [        SUR                  S   5      [        SUR                  S   5      [        SUR                  5      [        SUR                  5      [        SUR                  5      [        SUR                  5      [        SUR                  5      [        SU" [        R                  5      5      [        SUR                  5      [        SU" [        R                   5      5      [        SU" [        R"                  5      5      [        SU" [        R$                  5      5      [        SS5      [        SUR&                  5      [        SUR(                  S   5      [        SUR(                  S   5      [        SUR*                  S   5      [        SUR*                  S   5      [        SUR,                  S   5      [        SUR,                  S   5      [        SU" [        R.                  5      5      [        SS5      /nUR1                  S T R2                   5       5        UR1                  [        SS5      [        SS5      /5        [5        U5      $ )Nc                H   > TR                   R                  U -  (       a  S$ S$ )Nr!   r   )r   rW   )flagr   s    r   r  Viewport.dxftags.<locals>.flag  s    -1414r   i  r   i  r   i  {i.  rE   i  i  r   r!   c              3  :   #    U  H  n[        S U5      v   M     g7f)i  N)r   ).0r   s     r   	<genexpr>#Viewport.dxftags.<locals>.<genexpr>  s     R?QF4,,?Qs   })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  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                :  > U R                   c   e[        TU ]	  U5        UR                  U R                  R                  S5      5        UR                  U R                  R                  S5      5        UR                  U R                  R                  S5      5        UR                  U R                  R                  S5      5        UR                  U R                  R                  S5      5        UR                  U R                  R                  S5      5        g )Nrk   rl   r   rz   r   r   )r   r   register_resources
add_handler   r  )r   registryr   s     r   r  Viewport.register_resources  s    xx###"8,DHHLL67DHHLL):;<DHHLL)>?@DHHLL)<=>DHHLL)<=>DHHLL67r   c                ,  > [        U[        5      (       d   e[        TU ]  X5        UR	                  XSSS9  UR	                  XSSS9  UR	                  XSSS9  UR	                  XSSS9  UR	                  XSSS9  UR                  5         U R                   Vs/ s H  o2R                  U5      PM     snUl        UR	                  XSSS9  UR	                  XS	SS9  [        S
S5       H!  nUR                  R                  SU 35        M#     g s  snf )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!  Viewport.map_resources!  s*   %****e-##3d 	$ 	
 	##D#M##D1BT#R##D1FQU#V##D#M  "CGCUCUVCU4006CUV 	##D1Dt#T##D1Dt#T
 A;CIIse45  Ws   Dc                    U R                   c   eU R                   R                  R                  U R                  R                  S5      5      nU(       a&  U R                  R                  UR                  l        g g )Nr   )r   r   r  r   r   owner)r   suns     r   r#  Viewport.take_sun_ownership;  sT    xx###hh##DHHLL$>? HHOOCGGM r   c                    U R                   c   S5       eU R                   R                  R                  nU" U5      nU R                   Vs/ s H  oS" U5      U:w  a  UOUPM     snU l        g s  snf )Nr   )r   r  keyr   )r   old_namenew_namer/  old_keyr   s         r   rename_frozen_layerViewport.rename_frozen_layerA  sl    xx#B%BB#hhoo!!h-EIEWEW
EWTSY')Tx7EW
 
s   A-c                >   U R                   R                  nUR                  nUR                  nU R                   R                  S-  nU R                   R
                  S-  n[        X$-
  X5-
  5      [        X$-   X5-
  5      [        X$-   X5-   5      [        X$-
  X5-   5      /$ )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_cornersViewport.clipping_rect_cornersI  s    
 XXXX!#((//A%bl+bl+bl+bl+	
 	
r   c                6    U R                  5       nUS   US   4$ )zgReturns the lower left and the upper right corner of the clipping
rectangle in paperspace coordinates.
r   r;   )r<  )r   cornerss     r   clipping_rectViewport.clipping_rectZ  s%     ,,.qz71:%%r   c                    U R                   R                  [        R                  -  nU(       a  U R                   R                  nUS:g  $ g)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_path#Viewport.has_extended_clipping_patha  s;     !C!CCXX66FS= r   c                    U R                   R                  n[        U5      S:  a  gU R                   R                  nX!-  $ )z7Returns the scaling factor from modelspace to viewport.g-q=        )r   rO   absr5   )r   
msp_height	vp_heights      r   	get_scaleViewport.get_scalej  s6    XX))
z?U"HHOO	%%r   c                ~    U R                   R                  nUR                  =(       d    UR                  [        5      $ )z/Returns ``True`` if the viewport is a top view.)r   rD   is_nulliscloser   )r   view_directions     r   is_top_viewViewport.is_top_viewr  s/      $xx==%%G)?)?)GGr   c                    [        U R                  R                  5      nUR                  (       a  [        U R                  R                  5      nU$ r   )r   r   r<   rO  rF   )r   center_points     r   get_view_center_pointViewport.get_view_center_pointx  s;     DHH667 : :;Lr   c                   U R                  5       nU R                  R                  nU R                  5       nU R                  R                  X1-  -
  n[
        R                  " U5      nU(       a-  U[
        R                  " [        R                  " U5      5      -  nU[
        R                  " UR                  UR                  S5      -  $ )zLReturns the transformation matrix from modelspace to paperspace coordinates.r   )rL  r   rR   rV  r/   r   scalez_rotatemathradians	translater6  r7  )r   rY  rotation_anglemsp_center_pointoffsetms         r   get_transformation_matrix"Viewport.get_transformation_matrix  s       $ 9 9!%!;!;!=xx*:*BCNN5!""4<<#?@@A8%%fhh!<<<r   c                ~     U R                   R                  U R                   R                  -  $ ! [         a     gf = f)zQReturns the aspect ratio of the viewport, return 0.0 if width or
height is zero.
rH  )r   r3   r5   ZeroDivisionErrorr   s    r   get_aspect_ratioViewport.get_aspect_ratio  s4    	88>>DHHOO33  		s   ,/ 
<<c                X  ^^ U R                  5       mU R                  R                  nU R                  R                  nU R	                  5       nUS:X  a  [        S5      eX-  S-  nUS-  nU(       a  [        R                  " U* U* 4XE* 4XE4U* U445      n[        R                  " U5      m[        UU4S jU 5       5      nUR                  R                  UR                  R                  UR                  R                  UR                  R                  4$ Tu  pn
X-
  X-
  X-   X-   4$ )zeReturns the limits of the modelspace to view in drawing units
as tuple (min_x, min_y, max_x, max_y).
rH  z+invalid viewport parameters width or heightg      ?c              3  J   >#    U  H  oR                  T5      T-   v   M     g 7fr   )rotate)r  r   angler_  s     r   r  1Viewport.get_modelspace_limits.<locals>.<genexpr>  s      SU%3C!CUs    #)rV  r   rO   rR   rf  
ValueErrorr   r   r[  r\  r   extminr6  r7  extmax)r   rJ  r^  ratiow2h2framebboxmxmy_rk  r_  s              @@r   get_modelspace_limitsViewport.get_modelspace_limits  s    "&!;!;!= HH00
 $ 9 9%%'C<JKK#%#IIbSzB9rh"b	JKELL0E  SU SSD;;==$++--MM(IBA7BGRWbg55r   )r   r   )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{  )r0  r|  r1  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____firstlineno____doc__DXFTYPEr   r"   r%   r   
DXFATTRIBSr   r'   r   propertyr   setterr   r   r   r   r   r   r   r   r   r  r  r  r  r!  r#  r3  r<  r@  rE  rL  rR  rV  rb  rf  rx  __static_attributes____classcell__)r   s   @r   r-   r-      s&   Gz;FJ, 5A : # # * *33+ 	 	 8<4	 "	" '#RKZ-/b	864,

"&  & H H

=6 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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 	'33Aq9 	
Q\ 	WS!,]h 	7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   