Ë
    £èhV  ã                  óÆ   — 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 d dlmZmZ erd dlmZ dZdZed	d	d
œ	 	 	 	 	 	 	 	 	 	 	 dd„Zdddœ	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zy)é    )Úannotations)ÚSequenceÚTYPE_CHECKINGÚIterableÚAnyN)ÚUVecÚVec2Úhas_clockwise_orientation)Ú
LWPolylineÚ	DXFEntity)Ú
BaseLayoutÚRevcloudPropsgcß/;|¨à?ç        )ÚbulgeÚstart_widthÚ	end_widthc          	     óÐ  — |dk  rt        d«      ‚t        | «      }g }t        ||dd «      D ]¶  \  }}|j                  |j                  |j
                  |||f«       ||z
  }	|	j                  }
|
|k  rŒGt        j                  |
|z  «      }|
|z  }|	j                  |«      }t        |dz
  «      D ]1  }||z  }|j                  |j                  |j
                  |||f«       Œ3 Œ¸ |S )aã  Returns the points for a :class:`~ezdxf.entities.LWPolyline` entity to render a
    revision cloud, similar to the REVCLOUD command in CAD applications.

    Args:
        vertices: corner points of a polygon
        segment_length: approximate segment length
        bulge: LWPOLYLINE bulge value
        start_width: start width of the segment arc
        end_width: end width of the segment arc, CAD applications use 0.1 * segment_length
            for a calligraphy effect

    g�íµ ÷Æ°>zsegment length too small.é   N)Ú
ValueErrorÚ_to_vec2_listÚzipÚappendÚxÚyÚ	magnitudeÚmathÚceilÚ	normalizeÚrange)ÚverticesÚsegment_lengthr   r   r   Ú	_verticesÚ	lw_pointsÚsÚeÚdiffÚlengthÚcountÚ_segment_lengthÚoffsetÚ_s                  ú.lib/python3.12/site-packages/ezdxf/revcloud.pyÚpointsr-      sï   € ð( ˜ÒÜÐ4Ó5Ð5Ü˜hÓ'€IØ')€Iä�I˜y¨¨˜}Ö-‰ˆˆ1Ø×Ñ˜!Ÿ#™#˜qŸs™s K°¸EÐBÔCØ�1‰uˆØ—‘ˆØ�^Ò#Øä—	‘	˜& >Ñ1Ó2ˆØ  5™.ˆØ—‘ Ó0ˆÜ�u˜q‘yÖ!ˆAØ�‰KˆAØ×Ñ˜aŸc™c 1§3¡3¨°YÀÐFÕGñ "ð .ð Ðó    T)ÚcalligraphyÚ
dxfattribsc               óh  — t        |«      }t        }t        |«      r| }|r|dz  nd}t        ||||¬«      }| j	                  |d|¬«      }	|	j                  t        dd|fg«       | j                  }
|
�>|
j                  j                  t        «      s|
j                  j                  t        «       |	S )a}  Adds a revision cloud as :class:`~ezdxf.entities.LWPolyline` entity to `layout`,
    similar to the REVCLOUD command in CAD applications.

    Args:
        layout: target layout
        vertices: corner points of a polygon
        segment_length: approximate segment length
        calligraphy: ``True`` for a calligraphy effect
        dxfattribs: additional DXF attributes

    gš™™™™™¹?r   )r   r   T)Úcloser0   )i.  r   i  )r   ÚREQUIRED_BULGEr
   r-   Úadd_lwpolylineÚ	set_xdataÚREVCLOUD_PROPSÚdocÚappidsÚ	has_entryÚadd)Úlayoutr    r!   r/   r0   r"   r   r   r#   Úlwpr7   s              r,   Ú
add_entityr=   :   s£   € ô& ˜hÓ'€IÜ€EÜ  Ô+Ø�ˆá(3� Ò$¸€IÜ�y .¸ÈÔS€IØ
×
Ñ
 	°À*Ð
Ó
M€CØ‡M�M”. 9¨t°^Ð.DÐ"EÔFØ
�*‰*€CØ
€˜sŸz™z×3Ñ3´NÔCØ�
‰
�‰”~Ô&Ø€Jr.   c                ó²   — t        | t        «      sy| }|j                  sy|j                  t        «      syt        d„ |j                  d¬«      D «       «      S )zCReturns ``True`` when the given entity represents a revision cloud.Fc              3  ó^   K  — | ]%  }t        t        t        |d    «      z
  «      dk  –— Œ' y­w)r   g{®Gáz”?N)Úabsr3   )Ú.0Úps     r,   Ú	<genexpr>zis_revcloud.<locals>.<genexpr>e   s/   è ø€ ð á2ˆAô 	ŒNœS  1¡›YÑ&Ó'¨$Õ.Ù2ùs   ‚+-Úb)Úformat)Ú
isinstancer   Ú	is_closedÚ	has_xdatar6   ÚallÚ
get_points)ÚentityÚ
lwpolylines     r,   Úis_revcloudrM   \   sY   € ä�fœjÔ)ØØ#€JØ×ÒØØ×Ñ¤Ô/ØÜñ à×&Ñ&¨cÐ&Ô2óó ð r.   c                óê   — t        j                  | «      }t        |«      dk  rt        d«      ‚|d   j	                  |d   «      s|j                  |d   «       t        |«      dk  rt        d«      ‚|S )Né   z3 or more points required.r   éÿÿÿÿé   )r	   ÚlistÚlenr   Úiscloser   )r    r"   s     r,   r   r   k   sn   € Ü ŸI™I hÓ/€IÜ
ˆ9ƒ~˜ÒÜÐ5Ó6Ð6Ø�Q‰<×Ñ 	¨"¡Ô.Ø×Ñ˜ 1™Ô&Ü
ˆ9ƒ~˜ÒÜÐ5Ó6Ð6ØÐr.   )r    úIterable[UVec]r!   Úfloatr   rV   r   rV   r   rV   Úreturnzlist[Sequence[float]])
r;   r   r    rU   r!   rV   r0   r   rW   r   )rK   r   rW   Úbool)r    rU   rW   z
list[Vec2])Ú
__future__r   Útypingr   r   r   r   r   Ú
ezdxf.mathr   r	   r
   Úezdxf.entitiesr   r   Úezdxf.layoutsr   r6   r3   r-   r=   rM   r   © r.   r,   Ú<module>r_      s½   ðõ #ß 9Ó 9Û ß <Ñ <ß 0áÝ(ð !€Ø€ð "ØØñ&Øð&àð&ð ð	&ð
 ð&ð ð&ð ó&ð\ ØñØðàðð ðð ðð óóDôr.   