Ë
    £èh¯`  ã                  ó  — d dl mZ d dlmZmZmZmZ d dlZd dl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 erd d	lmZ d d
lmZ  G d„ de«      Zej<                  ej>                  ej@                  ejB                  ejD                  ejF                  ejH                  ejJ                  ejL                  ejN                  ejP                  ejR                  hZ*	 d	 	 	 	 	 dd„Z+	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z,y)é    )Úannotations)ÚTYPE_CHECKINGÚIterableÚcastÚOptionalN)ÚVec3ÚVec2ÚUVecÚConstructionRayÚUCS)ÚARROWSÚconnection_point)ÚDimStyleOverrideé   )ÚBaseDimensionRendererÚLengthMeasurementÚMeasurementÚcompile_mtextÚorder_leader_points)Ú	Dimension)ÚGenericLayoutTypec                  ó¤   ‡ — e Zd ZdZ	 	 d	 	 	 	 	 dˆ fd„Zdd„Zdˆ fd„Zdd„Zdd„Zdd„Z	d„ Z
	 	 	 	 	 	 	 	 dd	„Zdd
„Z	 d	 	 	 	 	 dd„Zdd„Zˆ xZS )ÚLinearDimensiona  Linear dimension line renderer, used for horizontal, vertical, rotated
    and aligned DIMENSION entities.

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

    c                ó  •— t         ‰| �  |||«       | j                  }|j                  dk(  rd|_        | j                  j                  dd«      | _        | j                  j                  dd«      | _        t        j                  | j                  «      | _
        | j                  | j                  z   | _        t        j                  | j                  «      | _        | j                  |_        |j                  dv r| j                  |_        t        | j                  j                   j"                  «      | _        t        | j                  j                   j&                  «      | _        t+        | j$                  | j                  ¬«      }t+        | j(                  | j                  ¬«      }t+        | j                  j                   j,                  | j                  ¬«      }|j/                  |«      | _        |j/                  |«      | _        | j0                  j5                  | j2                  «      | _        | j0                  | j2                  k(  r%t        j8                  | j                  «      | _        n,| j2                  | j0                  z
  j=                  «       | _        t?        | j0                  «      | j                  j                   _        | j2                  | j0                  z
  j@                  }|jC                  |«       | jD                  jG                  dd	«      | _$        | jD                  jG                  d
d «      | _%        d| _&        d| jN                  jP                  z  |jR                  z   | _*        | jT                  |kD  | _+        |jX                  �rð| j[                  «       | _&        | j\                  j^                  r/| j\                  ja                  | j                  jb                  «       | jH                  rd|_2        |jf                  dk(  r?ti        |jd                  «      dk  r'| jL                  d| jN                  jP                  z  z   }	n| jL                  }	|	|kD  |_5        |jl                  s|jj                  |_7        n"|jj                  r|j                  dk  rd|_        | jH                  r§|jj                  r›| jJ                  r�|jp                  |jR                  z   }
| jJ                  dk(  r,|
|_9        |jt                  dk(  rQ|xjr                  |
z  c_9        n;| jJ                  dk(  r,|
 |_9        |jt                  dk(  r|xjr                  |
z  c_9        | jw                  «       |_<        |j                  }|jz                  �|jz                  }n5|jn                  r|j|                  rd}n|j~                  r|j€                  rd}||_        | jƒ                  «       }| j„                  j‡                  |«       |jˆ                  rY|jŠ                  ^}}}t�        | j6                  ||«      \  | _G        | _H        | jŽ                  | j                  j                   _I        y |jx                  | j                  j                   _I        y y )Nr   é   Úoblique_angleéZ   Úangle©é   é   )r   Úmulti_point_modeFÚmove_wide_textç        gffffffæ?r    r   éÿÿÿÿ)JÚsuperÚ__init__ÚmeasurementÚtext_movement_ruleÚ	dimensionÚget_dxf_attribr   Údim_line_angleÚmathÚradiansÚdim_line_angle_radÚext_line_angleÚext_line_angle_radÚtext_rotationÚtext_halignr	   ÚdxfÚ	defpoint2Úext1_line_startÚ	defpoint3Úext2_line_startr   ÚdefpointÚ	intersectÚdim_line_startÚdim_line_endÚlerpÚdim_line_centerÚ
from_angleÚdim_line_vecÚ	normalizer   Ú	magnitudeÚupdateÚ	dim_styleÚpopr"   r#   Ú_total_text_widthÚarrowsÚ
arrow_sizeÚtext_gapÚrequired_arrows_spaceÚarrows_outsideÚtextÚtotal_text_widthÚtolÚ
has_limitsÚupdate_limitsÚvalueÚtext_vertical_positionÚtext_valignÚabsÚis_wide_textÚforce_text_insideÚtext_is_outsideÚtext_heightÚtext_shift_vÚvertical_placementÚget_text_locationÚtext_locationÚuser_text_rotationÚtext_outside_horizontalÚtext_is_insideÚtext_inside_horizontalÚinit_text_boxÚgeometryÚset_text_boxÚ
has_leaderÚcornersr   Úleader1Úleader2Útext_midpoint)Úselfr*   ÚucsÚoverrider(   Úext1_rayÚext2_rayÚdim_line_rayÚraw_measurementÚrequired_spaceÚshift_valueÚrotationÚtext_boxÚp1Úp2Ú_Ú	__class__s                   €ú7lib/python3.12/site-packages/ezdxf/render/dim_linear.pyr'   zLinearDimension.__init__"   sp  ø€ ô 	‰Ñ˜ C¨Ô2Ø×&Ñ&ˆØ×)Ñ)¨QÒ.ð ./ˆKÔ*à$(§N¡N×$AÑ$AØ˜Ró%
ˆÔð &*§^¡^×%BÑ%BÀ7ÈAÓ%NˆÔÜ)-¯©°d×6IÑ6IÓ)JˆÔØ%)×%8Ñ%8¸4×;MÑ;MÑ%MˆÔÜ)-¯©°d×6IÑ6IÓ)JˆÔð %)×$7Ñ$7ˆÔ!à×"Ñ" fÑ,Ø(,×(;Ñ(;ˆKÔ%ä# D§N¡N×$6Ñ$6×$@Ñ$@ÓAˆÔÜ# D§N¡N×$6Ñ$6×$@Ñ$@ÓAˆÔä"Ø× Ñ ¨×(?Ñ(?ô
ˆô #Ø× Ñ ¨×(?Ñ(?ô
ˆô 'Ø�N‰N×Ñ×'Ñ'¨t×/FÑ/Fô
ˆð %1×$:Ñ$:¸8Ó$DˆÔØ".×"8Ñ"8¸Ó"BˆÔØ%)×%8Ñ%8×%=Ñ%=¸d×>OÑ>OÓ%PˆÔà×Ñ $×"3Ñ"3Ò3Ü $§¡°×0GÑ0GÓ HˆDÕð ×!Ñ! D×$7Ñ$7Ñ7ß‰i‹kð Ôô
 '+¨4×+>Ñ+>Ó&?ˆ�‰×ÑÔ#à×,Ñ,¨t×/BÑ/BÑB×MÑMˆØ×Ñ˜?Ô+ð !%§¡× 2Ñ 2Ð3EÀuÓ MˆÔð
 /3¯n©n×.@Ñ.@Ø˜dó/
ˆÔð
 )*ˆÔð �—‘×&Ñ&Ñ&¨×)=Ñ)=Ñ=ð 	Ô"ð %)×$>Ñ$>ÀÑ$PˆÔð ×Óà%)×%:Ñ%:Ó%<ˆDÔ"Ø�x‰x×"Ò"ð —‘×&Ñ& t×'7Ñ'7×'=Ñ'=Ô>à×$Ò$ð 69�Ô2ð ×'Ñ'¨1Ò,Ü˜×:Ñ:Ó;¸cÒAð ×*Ñ*¨Q°·±×1GÑ1GÑ-GÑGñ ð "&×!7Ñ!7�Ø'5¸Ñ'GˆKÔ$à×0Ò0à.9×.FÑ.F�Õ+Ø×)Ò)¨k×.EÑ.EÈÒ.Ià*+�Ô'ð
 ×%Ò%Ø×,Ò,Ø×'Ò'à)×5Ñ5¸×8LÑ8LÑL�Ø×&Ñ&¨!Ò+Ø/:�KÔ,à#×6Ñ6¸"Ò<ð $×0Ò0°KÑ?Ö0Ø×(Ñ(¨AÒ-Ø0;¨|�KÔ,à#×6Ñ6¸!Ò;ð $×0Ò0°KÑ?Õ0ð )-×(>Ñ(>Ó(@ˆKÔ%ð *×7Ñ7ˆHØ×-Ñ-Ð9Ø&×9Ñ9‘à×+Ò+Ø×7Ò7à‘à×*Ò*Ø×6Ò6à�Ø(0ˆKÔ%à×)Ñ)Ó+ˆHØ�M‰M×&Ñ& xÔ0Ø×%Ò%Ø%×-Ñ-�
��B˜Ü-@Ø×(Ñ(¨"¨bó.Ñ*�”˜dœlð 48·<±<�—‘×"Ñ"Õ0ð 4?×3LÑ3L�—‘×"Ñ"Õ0ðk ó    c                óX   — t        | j                  | j                  | j                  «      S ©N)r   rD   Údefault_colorÚ	dim_scale)ri   ÚcolorÚscales      rx   Úinit_measurementz LinearDimension.init_measurementÆ   s$   € Ü Ø�N‰N˜D×.Ñ.°·±ó
ð 	
ry   c                ó  •— t         ‰| �  |«       | j                  }| j                  }|j                  s\|j
                  dk(  }| j                  | j                  | j                  |«      \  }}| j                  |||j                  d«      ¬«       |j                  s\|j
                  dk(  }| j                  | j                  | j                  |«      \  }}| j                  |||j                  d«      ¬«       | j                  «       \  }}	| j                  ||	«       |j                   r�| j"                  j$                  rt'        || j(                  «      }
n|j                   }
| j+                  |
|j,                  |j.                  «       |j0                  r1| j3                  | j4                  | j6                  | j8                  «       | j"                  j;                  | j                  | j                  | j                  g«       y)z­Main method to create dimension geometry of basic DXF entities in the
        associated BLOCK layout.

        Args:
            block: target BLOCK for rendering

        r    r   ©Ú
dxfattribsr!   r   N)r&   ÚrenderÚextension_linesr(   Ú	suppress1r3   Úextension_line_pointsr6   r;   Úadd_linerƒ   Ú	suppress2r8   r<   Ú
add_arrowsÚadd_dimension_linerL   rb   Úsupports_dxf_r2000r   rN   Úadd_measurement_textr\   r2   rd   Ú
add_leaderr>   rf   rg   Úadd_defpoints)ri   ÚblockÚ	ext_linesr(   Úabove_ext_line1ÚstartÚendÚabove_ext_line2r;   r<   rL   rw   s              €rx   r„   zLinearDimension.renderË   s¾  ø€ ô 	‰‰�uÔð ×(Ñ(ˆ	Ø×&Ñ&ˆØ×"Ò"Ø)×5Ñ5¸Ñ:ˆOØ×3Ñ3Ø×$Ñ$ d×&9Ñ&9¸?ó‰JˆE�3ð �M‰M˜% °×1EÑ1EÀaÓ1HˆMÔIð ×"Ò"Ø)×5Ñ5¸Ñ:ˆOØ×3Ñ3Ø×$Ñ$ d×&7Ñ&7¸ó‰JˆE�3ð �M‰M˜% °×1EÑ1EÀaÓ1HˆMÔIð (,§¡Ó'8Ñ$ˆ˜ð 	×Ñ °Ô=ð ×ÒØ�}‰}×/Ò/Ü$ [°$·(±(Ó;‘à"×'Ñ'�Ø×%Ñ%Ø�k×/Ñ/°×1JÑ1Jôð ×%Ò%Ø—‘Ø×(Ñ(¨$¯,©,¸¿¹ôð
 	�‰×#Ñ#Ø× Ñ  $×"6Ñ"6¸×8LÑ8LÐMõ	
ry   c                óH  — | j                   }|j                  r=| j                  «       }|j                  ||j                  «      }| j                  |«       |j                  �0|j                  }|j                  r| j                  |z   }d|_	        |S | j                  «       }|S )z_Get text midpoint in UCS from user defined location or default text
        location.

        T)
r(   Úhas_relative_text_movementÚdefault_text_locationÚapply_text_shiftr2   Úlocation_overrideÚuser_locationÚrelative_user_locationr>   rW   )ri   r(   Úlocations      rx   r[   z!LinearDimension.get_text_location  s¥   € ð ×&Ñ&ˆØ×1Ò1Ø×1Ñ1Ó3ˆHØ"×3Ñ3Ø˜+×3Ñ3óˆHð ×"Ñ" 8Ô,à×$Ñ$Ð0Ø"×0Ñ0ˆHØ×1Ò1Ø×/Ñ/°(Ñ:�à*.ˆKÔ'ð ˆð ×1Ñ1Ó3ˆHàˆry   c                óp  — | j                   }| j                  }| j                  }|j                  }| j                  }|dv r†|j
                  |j                  dz  z   }| j                  |z  }|dk(  r|n||z
  }|j                  | j                  dz  z   }	|t        j                  | j                  «      j                  |	«      z  }|S |j                  rd}|dk(  r| j                  }n]| j                  dz  | j                   j"                  z   |j
                  z   }|dk(  r|| j                  |z  z   }n|| j                  |z  z
  }|j                  r*|j                  |j
                  z   |j                  dz  z   }	n|j%                  «       }	|| j                  j'                  «       j                  |	«      z  }|S )z€Calculate default text location in UCS based on `self.text_halign`,
        `self.text_valign` and `self.text_outside`

        r   ç       @r    r   r   )r;   r<   r(   r3   r…   rI   rX   r@   Úextension_aboverF   r	   Úfrom_deg_angler0   rA   rW   r>   rG   rH   Útext_vertical_distanceÚ
orthogonal)
ri   r“   r”   r(   Úhalignr‘   ÚhdistÚhvecr�   Úvdists
             rx   r˜   z%LinearDimension.default_text_location  sÉ  € ð
 ×#Ñ#ˆØ×ÑˆØ×&Ñ&ˆØ×(Ñ(ˆà×(Ñ(ˆ	Ø�VÑà×(Ñ(¨;×+BÑ+BÀSÑ+HÑHˆEØ×$Ñ$ uÑ,ˆDØ!'¨1¢™°#¸Ñ=ˆHà×-Ñ-°×0FÑ0FÈÑ0LÑLˆEØœ×+Ñ+¨D×,?Ñ,?Ó@×JÑJØóñ ˆHðD ˆð; ×*Ò*Ø�à˜Š{Ø×/Ñ/‘ð ×*Ñ*¨SÑ0Ø—k‘k×,Ñ,ñ-à!×*Ñ*ñ+ð ð ˜a’Kà$¨×(9Ñ(9¸EÑ(AÑB‘Hà" d×&7Ñ&7¸%Ñ&?Ñ@�Hà×*Ò*à×-Ñ-Ø!×*Ñ*ñ+à!×-Ñ-°Ñ3ñ4ñ ð $×:Ñ:Ó<�Ø˜×)Ñ)×4Ñ4Ó6×@Ñ@ÀÓGÑGˆHàˆry   c                óN  — | j                   }|j                  «       }| j                  }| j                  }| j                  }|j
                   }|j                   }|j                  dkD  r~|r;| j                  t        j                  || j                  |j                  dz  |¬«       |r;| j                  t        j                  || j                  |j                  dz  |¬«       ||fS |j                  }| j                  dz   }	| j                  }
|r|
|	}
}	|r | j                  |j                  |||	|¬«       |r | j                  |j                  |||
|¬«       |s8|rt        |j                  |||	«      }|rt        |j                  |||
«      }||fS | j!                  «        ||fS )zg
        Add arrows or ticks to dimension.

        Returns: dimension line connection points

        r$   rŸ   )Úinsertrr   r   rƒ   g     €f@)r©   r   rr   rƒ   )rG   rƒ   r;   r<   rK   r†   r‰   Ú	tick_sizeÚadd_blockrefr   Úobliquer,   rH   Úarrow1_nameÚarrow2_namer   Úadd_arrow_extension_lines)ri   rG   Úattribsr“   r”   ÚoutsideÚarrow1Úarrow2r   Ústart_angleÚ	end_angles              rx   rŠ   zLinearDimension.add_arrowsQ  sÛ  € ð —‘ˆØ×#Ñ#Ó%ˆØ×#Ñ#ˆØ×ÑˆØ×%Ñ%ˆØ×%Ñ%Ð%ˆØ×%Ñ%Ð%ˆà×Ñ˜cÒ!ÙØ×!Ñ!Ü—N‘NØ Ø!×0Ñ0Ø ×*Ñ*¨SÑ0Ø&ð "ô ñ Ø×!Ñ!Ü—N‘NØØ!×0Ñ0Ø ×*Ñ*¨SÑ0Ø&ð "ô ð\ �cˆzÐðM ×%Ñ%ˆEØ×-Ñ-°Ñ5ˆKØ×+Ñ+ˆIÙØ)2°K˜Y�áØ×!Ñ!Ø×&Ñ&Ø ØØ(Ø&ð "ô ñ Ø×!Ñ!Ø×&Ñ&ØØØ&Ø&ð "ô ñ ñ Ü,Ø×*Ñ*¨E°5¸+ó�Eñ Ü*Ø×*Ñ*¨C°¸	ó�Cð �cˆzÐð ×.Ñ.Ô0Ø�cˆzÐry   c                óø  — dd„}| j                   j                  «       }| j                  }| j                  }| j                  }|j
                  }|j                  sI ||j                  «      r7| j                  || j                  |z  z
  || j                  d|z  z  z
  |¬«       |j                  sK ||j                  «      r8| j                  || j                  |z  z   || j                  d|z  z  z   |¬«       yyy)z{Add extension lines to arrows placed outside of dimension extension
        lines. Called by `self.add_arrows()`.

        c                óF   — | d uxr | t         v xr | t         j                  vS r{   )r   ÚORIGIN_ZERO)Únames    rx   Úhas_arrow_extensionzFLinearDimension.add_arrow_extension_lines.<locals>.has_arrow_extension   s.   € à˜TÐ!ò 5ØœV�^ò5à¤×!3Ñ!3Ð3ðry   r   r‚   N)r¹   ÚstrÚreturnÚbool)Údimension_linerƒ   rG   r;   r<   rH   r†   r­   rˆ   r@   r‰   r®   )ri   rº   r°   rG   r“   r”   rH   s          rx   r¯   z)LinearDimension.add_arrow_extension_linesš  sü   € ó	ð ×%Ñ%×0Ñ0Ó2ˆØ—‘ˆØ×#Ñ#ˆØ×ÑˆØ×&Ñ&ˆ
à×ÒÑ$7¸×8JÑ8JÔ$KØ�M‰MØ˜×)Ñ)¨JÑ6Ñ6Ø˜×)Ñ)¨Q°©^Ñ<Ñ<Ø"ð ô ð ×ÒÑ$7¸×8JÑ8JÔ$KØ�M‰MØ�d×'Ñ'¨*Ñ4Ñ4Ø�d×'Ñ'¨1¨z©>Ñ:Ñ:Ø"ð õ ð %LÐry   c                ó<   — | j                  |||t        «       «       y)z´Add measurement text to dimension BLOCK.

        Args:
            dim_text: dimension text
            pos: text location
            rotation: text rotation in degrees

        N)Úadd_textÚdict)ri   Údim_textÚposrr   s       rx   r�   z$LinearDimension.add_measurement_text»  s   € ð 	�‰�h  X¬t«vÕ6ry   c                ó:  — | j                   }| j                  }| j                  |j                  z  }|j                  }|st        j                  |j                  «      r||z
  }|st        j                  |j                  «      r||z   }|j                  «       }|j                  s|j                  rU|j                  |«      }|j                  s| j                  |||d¬«       |j                  s| j                  |||d¬«       yy| j                  |||d¬«       y)a9  Add dimension line to dimension BLOCK, adds extension DIMDLE if
        required, and uses DIMSD1 or DIMSD2 to suppress first or second part of
        dimension line. Removes line parts hidden by dimension text.

        Args:
            start: dimension line start
            end: dimension line end

        T)rƒ   Úremove_hidden_linesN)r¾   rG   r@   Ú	extensionÚ	has_ticksr   Úhas_extension_liner­   r®   rƒ   r†   r‰   r=   rˆ   )	ri   r“   r”   Údim_linerG   rÆ   Úticksr°   Úcenters	            rx   r‹   z"LinearDimension.add_dimension_lineÈ  s  € ð ×&Ñ&ˆØ—‘ˆØ×%Ñ%¨×(:Ñ(:Ñ:ˆ	Ø× Ñ ˆÙ”F×-Ñ-¨f×.@Ñ.@ÔAØ˜IÑ%ˆEÙ”F×-Ñ-¨f×.@Ñ.@ÔAØ˜	‘/ˆCà×%Ñ%Ó'ˆà×Ò ×!3Ò!3ð —Z‘Z “_ˆFØ×%Ò%Ø—‘Ø˜6¨gÈ4ð ô ð ×%Ò%Ø—‘Ø˜C¨GÈð õ ð &ð
 �M‰MØ�s wÀDð õ ry   c                óv  — ||k(  r t        j                  | j                  «      }n||z
  j                  «       }| j                  j
                  r||| j                  j                  z  z
  }n||| j                  j                  z  z   }| j                  j                  }|r|| j                  z  }|||z  z   }||fS )a  Adjust start and end point of extension line by dimension variables
        DIMEXE, DIMEXO, DIMEXFIX, DIMEXLEN.

        Args:
            start: start point of extension line (measurement point)
            end: end point at dimension line
            text_above_extline: True if text is above and aligned with extension line

        Returns: adjusted start and end point

        )
r	   r¡   r0   rA   r…   Úhas_fixed_lengthÚlength_belowÚoffsetr    rF   )ri   r“   r”   Útext_above_extlineÚ	directionrÆ   s         rx   r‡   z%LinearDimension.extension_line_pointsî  sµ   € ð �CŠ<Ü×+Ñ+¨D×,?Ñ,?Ó@‰Ià˜u™×/Ñ/Ó1ˆIØ×Ñ×0Ò0Ø˜9 t×';Ñ';×'HÑ'HÑHÑI‰Eà˜I¨×(<Ñ(<×(CÑ(CÑCÑCˆEØ×(Ñ(×8Ñ8ˆ	ÙØ˜×/Ñ/Ñ/ˆIØ�I 	Ñ)Ñ)ˆØ�cˆzÐry   c                ód  ‡ — ˆ fd„}‰ j                   j                  } |d|j                  «        |d|j                  «        |d|j                  «        |d|j                  «       |j	                  ‰ j
                  j                  j                  «      ‰ j
                  j                  _        y)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                  | «      }‰j                   j                  |  ||«      «       y r{   )r*   r+   Úset_dxf_attrib)ÚattrÚfuncÚpointri   s      €rx   Úfrom_ucsz6LinearDimension.transform_ucs_to_wcs.<locals>.from_ucs  s/   ø€ Ø—N‘N×1Ñ1°$Ó7ˆEØ�N‰N×)Ñ)¨$±°U³Õ<ry   r9   r5   r7   rh   N)rb   rj   Úto_wcsÚto_ocsÚto_ocs_angle_degr*   r4   r   )ri   rØ   rj   s   `  rx   Útransform_ucs_to_wcsz$LinearDimension.transform_ucs_to_wcs
  s�   ø€ ô	=ð �m‰m×ÑˆÙ�˜SŸZ™ZÔ(Ù�˜cŸj™jÔ)Ù�˜cŸj™jÔ)Ù� #§*¡*Ô-Ø#&×#7Ñ#7Ø�N‰N×Ñ×$Ñ$ó$
ˆ�‰×ÑÕ ry   )NN)r*   r   rj   úOptional[UCS]rk   zOptional[DimStyleOverride])r~   Úintr   Úfloatr¼   r   )r�   r   r¼   ÚNone)r¼   r	   )r¼   útuple[Vec2, Vec2])rÂ   r»   rÃ   r	   rr   rß   r¼   rà   )r“   r	   r”   r	   r¼   rà   )F)r“   r	   r”   r	   r¼   rá   )r¼   rà   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r'   r€   r„   r[   r˜   rŠ   r¯   r�   r‹   r‡   rÜ   Ú__classcell__)rw   s   @rx   r   r      s¯   ø„ ñð "Ø/3ð	bMàðbMð ðbMð -õ	bMóH
õ
5
ónó24ólGòRðB7Øð7Ø"&ð7Ø27ð7à	ó7ó$ðN :?ðØðØ $ðà	ó÷8
ry   r   c                óÐ   — t        j                  |«      }| D �cg c]  }|j                  t        |«      «      |f‘Œ  }}t        |«      D ��cg c]  \  }}|‘Œ	 c}}S c c}w c c}}w r{   )r	   r¡   ÚprojectÚsorted)Úpointsr   rÑ   ÚpÚprojected_vectorsÚ
projections         rx   Úsort_projected_pointsrî   1  sg   € ô ×#Ñ# EÓ*€IÙBHÓIÁ&¸Q˜)×+Ñ+¬D°«GÓ4°aÒ8À&ÐÐIÜ#)Ð*;Ô#<Ô=Ñ#<‘-�*˜aŠAÐ#<Ò=Ð=ùò JùÛ=s   š#AÁA"c
           
     óæ  — dd„}
t        ||«      }t        |«      }|xs i }d|d<   d|d<   d|d<   d}d}d}t        |d	d
 |dd	 «      D ]¦  \  }}t        |«      }||d<   |r|s
d|d<   ||d<   | j	                  t        |«      t        |«      t        |«      ||||¬«      }|r |
|«      }t        t        |j                  ||	¬«      «      }|j                  j                  r|dk(  rd}nd}nd}d}Œ¨ y	)a¶  Creates multiple DIMENSION entities for each point pair in `points`.
    Measurement points will be sorted by appearance on the dimension line
    vector.

    Args:
        layout: target layout (model space, paper space or block)
        base: base point, any point on the dimension line vector will do
        points: iterable of measurement points
        angle: dimension line rotation in degrees (0=horizontal, 90=vertical)
        ucs: user defined coordinate system
        avoid_double_rendering: removes first extension line and arrow of
            following DIMENSION entity
        dimstyle: dimension style name
        override: dictionary of overridden dimension style attributes
        dxfattribs: DXF attributes for DIMENSION entities
        discard: discard rendering result for friendly CAD applications like
            BricsCAD to get a native and likely better rendering result.
            (does not work with AutoCAD)

    c                ó@   — | j                  «       \  }}|�|t        v ryy)NTF)Úget_arrow_namesÚCAN_SUPPRESS_ARROW1)Údimstyle_overrideÚarrow_name1Úarrow_name2s      rx   Úsuppress_arrow1z5multi_point_linear_dimension.<locals>.suppress_arrow1Z  s)   € Ø#4×#DÑ#DÓ#FÑ ˆ�[ØÐ [Ô4GÑ%GØàry   r   Údimtixr   ÚdimtvpTr"   FNr%   r#   Údimse1rö   )r   Údimstylerk   rƒ   )Údiscardr   )r¼   r½   )rî   r	   ÚziprÁ   Úadd_linear_dimr   r   r   r„   r(   rU   )ÚlayoutÚbaserê   r   rj   Úavoid_double_renderingrú   rk   rƒ   rû   rö   r#   Ú_suppress_arrow1Ú	first_runrt   ru   Ú	_overrideÚstyleÚrenderers                      rx   Úmulti_point_linear_dimensionr  9  s2  € óBô # 6¨5Ó1€FÜ�‹:€DØŠ~˜2€HØ€HˆXÑØ€HˆXÑØ#'€HÐÑ ð €NØÐØ€Iä�f˜S˜b�k 6¨!¨" :Ö.‰ˆˆBÜ˜“Nˆ	Ø&4ˆ	Ð"Ñ#Ù!©)Ø"#ˆI�hÑØ+;ˆIÐ'Ñ(à×%Ñ%Ü�‹JÜ�‹HÜ�‹HØØØØ!ð &ó 
ˆñ Ù.¨uÓ5Ðäœ¨¯©°cÀ7¨Ó)KÓLˆØ×Ñ×,Ò,à Ò"Ø!"‘à!"‘àˆNØ‰	ñ9 /ry   )r   )rê   úIterable[UVec]r   rß   r¼   z
list[Vec2])r   NTÚEZDXFNNF)rþ   r   rÿ   r
   rê   r  r   rß   rj   rÝ   r   r½   rú   r»   rk   zOptional[dict]r¼   rà   )-Ú
__future__r   Útypingr   r   r   r   r-   Ú
ezdxf.mathr   r	   r
   r   r   Úezdxf.render.arrowsr   r   Úezdxf.entities.dimstyleoverrider   Údim_baser   r   r   r   r   Úezdxf.entitiesr   Úezdxf.eztypesr   r   ÚdotÚ	dot_smallÚ	dot_blankÚorigin_indicatorÚorigin_indicator_2Údot_smallblankÚnoner¬   Ú
box_filledÚboxÚintegralÚarchitectural_tickrò   rî   r  © ry   rx   Ú<module>r     sN  ðõ #ß :Ó :Û ß =Õ =ß 8Ý <÷õ ñ Ý(Ý/ôG
Ð+ô G
ðV ‡J�JØ
×ÑØ
×ÑØ
×ÑØ
×ÑØ
×ÑØ
‡K�KØ
‡N�NØ
×ÑØ
‡J�JØ
‡O�OØ
×ÑðÐ ð" ,-ð>Øð>Ø#(ð>àó>ð ØØ#'ØØ#ØØðPØðPà
ðPð ðPð ð	Pð
 
ðPð !ðPð ðPð ðPð 
ôPry   