
    'jOM                        d dl mZ d dlmZmZ d dlmZmZmZ d dl	m
Z
 d dlmZmZ d dlmZ d dlmZ d dlmZmZmZmZ erd d	lmZ d d
lmZ  G d de          Z G d de          ZddZdS )    )annotations)TYPE_CHECKINGOptional)Vec2UCSUVec)normalize_text_angle)ARROWSconnection_point)DimStyleOverride)DXFInternalEzdxfError)BaseDimensionRendererMeasurementLengthMeasurementcompile_mtext)	Dimension)GenericLayoutTypec                  ,     e Zd Zd fd	Zd fdZ xZS )RadiusMeasurement	dim_styler   colorintscalefloatprefixstrc                \    t                                          |||           || _        d S N)super__init__text_prefix)selfr   r   r   r   	__class__s        Q/DATA/AppData/hermes/venv/lib/python3.11/site-packages/ezdxf/render/dim_radius.pyr    zRadiusMeasurement.__init__   s/     	E5111!    valuereturnc                    t                                          |          }|r|d         | j        k    r
| j        |z   }|S )Nr   )r   format_textr!   )r"   r&   textr#   s      r$   r)   zRadiusMeasurement.format_text   sE    ww""5)) 	+DGt///#d*Dr%   )r   r   r   r   r   r   r   r   )r&   r   r'   r   )__name__
__module____qualname__r    r)   __classcell__r#   s   @r$   r   r      s[        " " " " " "         r%   r   c                       e Zd ZdZd Z	 	 d0d1 fd
Zd2dZd3dZd3dZd3dZ	d4dZ
d5 fdZd6dZd6dZd7d Zd8d#Zd8d$Zd9d&Zd9d'Zd9d(Zd9d)Zd:d.Zd6d/Z xZS );RadiusDimensiona@  
    Radial dimension line renderer.

    Supported render types:
    - default location inside, text aligned with radial dimension line
    - default location inside horizontal text
    - default location outside, text aligned with radial dimension line
    - default location outside horizontal text
    - user defined location, text aligned with radial dimension line
    - user defined location horizontal text

    Args:
        dimension: DXF entity DIMENSION
        ucs: user defined coordinate system
        override: dimension style override management object

    c                >    t          | j        j        j                  S r   )r   	dimensiondxfdefpointr"   s    r$   _centerzRadiusDimension._center9   s    DN&/000r%   Nr3   r   ucsOptional[UCS]overrideOptional[DimStyleOverride]c                P   t                                          |||           | j        j        }| j        }|dk    rd| _        n |dk    rd| _        nt          d|           |                                 | _	        t          | j        j        j                  | _        |j        D|j        r=|j        r6|j        dk    r+| j	                            | j                  |_        d|_        | j        | j	        z
  }|                                | _        | j        j        | _        |j        | _        |                    | j                                                   | j        d| j        j        z  z   | _        | j	        | j        | j        z  z   | _        tA          | j!        "                    dd                    | _#        |j$         |_%        |j        | &                    |j                  |_%        d	| _'        |j(        rD| )                                | _'        | j*        j+        r| j*        ,                    |j-                   | j        }|j%        r
|j.        rd	}n|j        r	|j        rd	}t_          |d
          |_0        | 1                                |_2        | j3        4                    | 5                                           |j        r|j        | j        j        _6        d S |j%        r|j.        r| j        | j        j        _6        d S |j2        | j        j        _6        d S )N   T   zInvalid dimension type    r      dimtofl        )fix_upside_down)7r   r    r3   dimtypemeasurementis_diameter_dimis_radius_dimr   r7   centerr   r4   	defpoint4point_on_circleuser_locationtext_is_insidetext_inside_horizontaltext_movement_rulelerptext_valign	normalizedim_line_vec	angle_degdim_line_angle	magnituderadiusupdateget_measurementarrows
arrow_sizeoutside_default_distanceoutside_default_defpointboolr   getoutside_text_force_dimlineforce_text_insidetext_is_outsideis_location_outside_total_text_widthr*   total_text_widthtol
has_limitsupdate_limitsr&   text_outside_horizontalr	   text_rotationget_text_locationtext_locationgeometryset_text_boxinit_text_boxtext_midpoint)	r"   r3   r8   r:   rD   rE   	directionrotationr#   s	           r$   r    zRadiusDimension.__init__<   s3    	C222.(&a<<#'D  \\!%D'(K'(K(KLLL LLNN%)$.*<*F%G%G$,*	,6	,  2a77 -1K,<,<(- -) +,'(4;6	%//11"/9)4>99;;<<<(,a$+:P6P(P%(, ==)
% +/t~/A/A)Q/O/O*P*P' +6*G&G#$0*.*B*B)+ +K' ), 	:%)%:%:%<%<D"x" : &&{'8999 && 	;+N 	HH' 	K,N 	H %9d%
 %
 %
!
 %)$:$:$<$<!""4#5#5#7#7888$ 	I/:/HDN,,, '	I,7,O	I 04/LDN,,,/:/HDN,,,r%   r   r   r   r   r'   r   c                0    t          | j        ||d          S )NR)r   r   )r"   r   r   s      r$   init_measurementz RadiusDimension.init_measurement   s     sCCCr%   r   c                j    | j         j        |                                 S |                                 S )z[Returns text midpoint from user defined location or default text
        location.
        )rE   rK   get_user_defined_text_locationget_default_text_locationr6   s    r$   rj   z!RadiusDimension.get_text_location   s4     )56688811333r%   c                ^   | j         }|j        rs|j        rl| j        dz  }|j        dk    r|| j        j        z  }| j        dz  }d|cxk     rdk    rn n| }| j        t          ||
                                f          z   S t          j        |j                  }|                    d          }|
                                }|j        r*| j        | j        j        z
  dz  }| j        | j        |z  z   }n1| j        dz  | j        j        z   |j        z   }| j        | j        |z  z   }|||z  z   S )zXReturns default text midpoint based on `text_valign` and
        `text_outside`
               @r        v@g     V@g     p@T)ccw)rE   ra   rh   rc   vertical_placementrY   rZ   rT   r\   r   text_vertical_distancefrom_deg_angleri   
orthogonalrL   rV   rH   rR   text_gaprJ   )r"   rE   hdistangletext_directionvertical_directionvertical_distancero   s           r$   rw   z)RadiusDimension.get_default_text_location   sz    && 	;+N 	*S0E.!33//'%/Ee$$$$u$$$$$04::<<=4 4   ,[-FGG+6646@@'>>@@% 		O[4;#99S@E K4+<u+DEMM &,+()&' 
 !0D4E4MNM 25F FGGr%   c                   | j         }t          |j        t                    sJ |j        o|j        }|j        o|j        }|s|rn| j        dz  }|j	        dk    r|| j
        j        z  }|j        j        | j        j        k    r| }|                                }|j        t          ||f          z   S t          j        |j                                                  }|j        ||                                z  z   S )z:Returns text midpoint for user defined dimension location.ry   r   )rE   
isinstancerK   r   ra   rh   rL   rM   rc   r|   rY   rZ   xrJ   r}   r~   ri   r   )r"   rE   text_outside_horiztext_inside_horizr   vdisttext_normal_vecs          r$   rv   z.RadiusDimension.get_user_defined_text_location   s   &+3T:::::'OK,O 	 &M;+M 	  	!2 	*S0E.!33//(*d.B.DDD6688E,tUEN/C/CCC"1) jll  )!K$F$F$H$HHIr%   locationr]   c                6    || j         z
  j        }|| j        k    S r   )rH   rU   rV   )r"   r   rV   s      r$   rb   z#RadiusDimension.is_location_outside   s    T[(3##r%   blockr   Nonec                   t                                          |           | j        }| j        j        s0|j        |                                  n|                                  |j        rO| j	        j
        rt          | j        | j                  }n|j        }|                     ||j        |j                   | j	                            | j        | j        g           dS )z`Create dimension geometry of basic DXF entities in the associated
        BLOCK layout.
        N)r   renderrE   dimension_line	suppress1rK   render_user_locationrender_default_locationr*   rl   supports_dxf_r2000r   re   add_measurement_textrk   ri   add_defpointsrH   rJ   )r"   r   rE   r*   r#   s       r$   r   zRadiusDimension.render   s    
 	u&", 	/(4))++++,,...  	}/ ($T%5tx@@"'%%k/1J  
 	##T[$2F$GHHHHHr%   c                    | j         }| j        j        s"|                     | j        |j                  }n| j        }|j        rf| j        r|                     | j                   nt          |            |j	        r| 
                    |           dS |                     |           dS |j        dk    rD|                     | j                            | j                  |           t          |            dS |                     |           dS )zBCreate dimension geometry at the default dimension line locations.rotater?   N)rE   rY   r   	add_arrowrJ   ra   r_   add_radial_dim_lineadd_center_markrh   add_horiz_ext_line_defaultadd_radial_ext_line_defaultrN   add_radial_dim_line_from_textrH   rO   )r"   rE   arrow_connection_points      r$   r   z'RadiusDimension.render_default_location   s<   &{$ 	:%)^^$[-H &4 & &"" &*%9"& 	A. &(()=>>>>%%%2 I//0FGGGGG001GHHHHH-2222K$$T%9::*    %%%%% (()?@@@@@r%   c                h   | j         }|j        }|j        dk    }|sd|_        | j        j        s"|                     | j        |j                  }n| j        }|j        rd| j        r|                     | j                   nt          |            |j
        r|                     |           n~|                     |           nh|j        r|                     |           nK|j        dk    r|                     |           n*|                     |j        |           t          |            ||_        dS )z>Create dimension geometry at user defined dimension locations.r@   Fr   N)rE   ra   rN   rY   r   r   rJ   r_   r   r   rh   add_horiz_ext_line_useradd_radial_ext_line_userrM   r   rK   )r"   rE   preserve_outsideleaderr   s        r$   r   z$RadiusDimension.render_user_location  sx   &&6/14 	 ' {$ 	:%)^^$[-H &4 & &"" &*%9"& 	*. &(()=>>>>%%%2 F,,-CDDDD--.DEEEE1 *,,-CDDDD1Q66,,-CDDDD 66#13I   $D)))&6###r%   r   c                F   | j         }|                                }|j        }|j        dk    r2|                     t
          j        || j        |j        dz  |           nA|j        }| j        }|r|dz  }|                     |||||           t          ||||          }|S )zMAdd arrow or tick to dimension line, returns dimension line connection point.rB   ry   )insertrq   r   
dxfattribsg     f@)r   r   rq   r   )
rY   r   arrow1_name	tick_sizeadd_blockrefr
   obliquerT   rZ   r   )r"   r   r   rY   attribs
arrow_namer   r   s           r$   r   zRadiusDimension.add_arrowC  s    ##%%'
c!!,&,"      %E'E "     (
HeUKKHr%   endr   c                t    | j                                         }|                     | j        ||d           dS )zAdd radial dimension line.Tr   remove_hidden_linesN)r   r   add_linerH   )r"   r   r   s      r$   r   z#RadiusDimension.add_radial_dim_linea  sF    %0022Kd 	 	
 	
 	
 	
 	
r%   c                    | j                                         }| j        dz  }| j        j        dk    r| }|                     || j        |z  z   ||d           dS )zBAdd radial dimension line, starting point at the measurement text.r@   r   Fr   N)r   r   rc   rE   r|   r   rR   )r"   startr   r   hshifts        r$   r   z-RadiusDimension.add_radial_dim_line_from_texth  sy    %0022'!+.!33WFD%.. %	 	 	
 	
 	
 	
 	
r%   r   c                `   | j                                         }|                     || j        |           | j        j        dk    r| j        j        }n| j        }| j	        dz  }d|cxk     rdk    rn n| }| j        t          |df          z   }|                     | j        ||           dS )zXAdd horizontal outside extension line from start for default
        locations.
        r   r   rz   Z   i  N)r   r   r   r\   rE   r|   rY   rZ   rc   rT   r   )r"   r   r   r   r   r   s         r$   r   z*RadiusDimension.add_horiz_ext_line_defaultu  s     %0022eT:wOOO.!33K*EE*E#e+FE+dE1:.>.>>d3SWMMMMMr%   c                   | j         }t          |j        t                    sJ | j                                        }|                     ||j        |           |j        dk    r| j        j	        }n| j
        }|j        j        | j        j        k    r| }|j        t          |df          z   }|                     |j        ||           dS )zDAdd horizontal extension line from start for user defined locations.r   r   N)rE   r   rK   r   r   r   r   r|   rY   rZ   rc   r   rJ   )r"   r   rE   r   r   r   s         r$   r   z'RadiusDimension.add_horiz_ext_line_user  s    &+3T:::::%0022e[67KKK)Q..K*EE*E$&$*>*@@@FE'$qz*:*::k/IIIIIr%   c                    | j                                         }| j        j        | j        z   }|| j        |z  z   }|                     |||d           dS )zCAdd radial outside extension line from start for default locations.Tr   N)r   r   rE   r   rc   rR   r   r"   r   r   lengthr   s        r$   r   z+RadiusDimension.add_radial_ext_line_default  s[    %0022!*T-CCd'&00eSW$OOOOOr%   c                    | j                                         }| j        dz  }| j        j        dk    r| }| j        j        | j        |z  z   }|                     |||           dS )zGAdd radial outside extension line from start for user defined location.ry   r   r   N)r   r   rc   rE   r|   rK   rR   r   r   s        r$   r   z(RadiusDimension.add_radial_ext_line_user  sq    %0022'#-.!33WF,t/@6/IIeSW55555r%   dim_textr   posrq   c                j    | j                                         }|                     ||||           dS )z(Add measurement text to dimension BLOCK.)r   rq   r   N)rE   r   add_text)r"   r   r   rq   r   s        r$   r   z$RadiusDimension.add_measurement_text  s8     "--//hC(wOOOOOr%   c                      fd} j         j        } |d|j                    |d|j                    |d|j                   dS )z
        Transforms dimension definition points into WCS or if required into OCS.

        Can not be called in __init__(), because inherited classes may be need unmodified values.

        c                    j                             |           }j                             |  ||                     d S r   )r3   get_dxf_attribset_dxf_attrib)attrfuncpointr"   s      r$   from_ucsz6RadiusDimension.transform_ucs_to_wcs.<locals>.from_ucs  s>    N11$77EN))$U<<<<<r%   r5   rI   ro   N)rl   r8   to_wcsto_ocs)r"   r   r8   s   `  r$   transform_ucs_to_wcsz$RadiusDimension.transform_ucs_to_wcs  sj    	= 	= 	= 	= 	= mSZ(((cj)))#*-----r%   )NN)r3   r   r8   r9   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   rq   r   r'   r   )r+   r,   r-   __doc__r7   r    rt   rj   rw   rv   rb   r   r   r   r   r   r   r   r   r   r   r   r   r.   r/   s   @r$   r1   r1   %   s        &1 1 1 "/3	UI UI UI UI UI UI UInD D D D4 4 4 4H H H HB   :$ $ $ $I I I I I I4A A A A>'7 '7 '7 '7R   <
 
 
 

 
 
 
N N N N J J J JP P P P6 6 6 6P P P P. . . . . . . .r%   r1   dimr'   r   c                p   | j         j        }|dk    r| j        j        }n(|dk    r| j        j        dz  }nt	          d|           | j                            dd          }|dk    rdS d}|dk     rt          |          }d	}t          | j	                  }t          |df          }t          d|f          }d
| j
        j        i}|                     ||z
  ||z   |           |                     ||z
  ||z   |           |r||z   }	|	d|z  k     rdS |dz  }
|dz  }t          |	df          }t          d|	f          }|                     ||
z   ||z   |           |                     ||
z
  ||z
  |           |                     ||z   ||z   |           |                     ||z
  ||z
  |           dS dS )zAdd center mark/lines to radius and diameter dimensions.

    Args:
        dim: RadiusDimension or DiameterDimension renderer
    r>   r=   ry   zInvalid dimension type: dimcenr   NFTr   r@   )r3   rD   rE   	raw_value	TypeErrorr   r^   absr   rH   r   r   r   )r   dim_typerV   	mark_sizecenter_linesrH   
mark_x_vec
mark_y_vecr   sizestart_x_vecstart_y_vec	end_x_vec	end_y_vecs                 r$   r   r     s    }$H1}}*	Q*S0=8==>>>!!(A..IA~~L1}}	NN	#*F y!n%%Jq)n%%J3-34JLL*$fz&9:FFFLL*$fz&9:FFF K6!!i-F 1n 1n$OO	!TOO	Vk)6I+=zJJJVk)6I+=zJJJVk)6I+=zJJJVk)6I+=zJJJJJK Kr%   N)r   r1   r'   r   )
__future__r   typingr   r   
ezdxf.mathr   r   r   ezdxf.toolsr	   ezdxf.render.arrowsr
   r   ezdxf.entities.dimstyleoverrider   ezdxf.lldxf.constr   ezdxf.render.dim_baser   r   r   r   ezdxf.entitiesr   ezdxf.eztypesr   r   r1   r    r%   r$   <module>r      s   # " " " " " * * * * * * * * & & & & & & & & & & , , , , , , 8 8 8 8 8 8 8 8 < < < < < < 3 3 3 3 3 3             0((((((//////    )   U. U. U. U. U.+ U. U. U.p+K +K +K +K +K +Kr%   