§
    ø(g�9  ã                   ó8   — d Z d„ Zd„ Zd„ Zd„ Zd
d„Zdd„Zd	„ ZdS ))Úmesh_linked_uv_islandsÚmesh_linked_trianglesÚedge_face_count_dictÚedge_face_countÚedge_loops_from_edgesÚngon_tessellateÚtriangle_random_pointsc                 ó*  — | j         r | j        j        j        st	          d¦  «        ‚d„ | j        j        j        D ¦   «         }d„ | j         D ¦   «         }i }|j        }dgt          |¦  «        z  }t          |¦  «        D ]B\  }}|D ]:}||         }	 ||	¦  «        }
|
€	|gx}
||	<   n|
                     |¦  «         |
||<   Œ;ŒCg }dgt          |¦  «        z  }	 d}t          t          |¦  «        ¦  «        D ]}||         dk    r|} nŒ|dk    r|g}d||<   |                     |¦  «         nned}|r`d	}|dd…         D ]Q}||         dk    rC||         D ]5}||         D ]*}||         dk    rd}d||<   |                     |¦  «         Œ+Œ6d
||<   ŒR|°`Œ»|S )zê
    Returns lists of polygon indices connected by UV islands.

    :arg mesh: the mesh used to group with.
    :type mesh: :class:`bpy.types.Mesh`
    :return: list of lists containing polygon indices
    :rtype: list[list[int]]
    z…UV Layers are not currently available from python in Edit Mode. Use bmesh and bpy_extras.bmesh_utils.bmesh_linked_uv_islands instead.c                 ó,   — g | ]}|j         d d …         ‘ŒS ©N)Úuv)Ú.0Úluvs     ú[/home/blender/git/blender-v430/install_release/4.3/scripts/modules/bpy_extras/mesh_utils.pyú
<listcomp>z*mesh_linked_uv_islands.<locals>.<listcomp>"   s"   € Ð@Ð@Ð@˜c�”�q�q�q”	Ð@Ð@Ð@ó    c                 ó   — g | ]	}|j         ‘Œ
S © )Úloop_indices)r   Úpolys     r   r   z*mesh_linked_uv_islands.<locals>.<listcomp>#   s   € Ð>Ð>Ð>¨�$Ô#Ð>Ð>Ð>r   Né    Téÿÿÿÿé   Fé   )
ÚpolygonsÚ	uv_layersÚactiveÚdataÚ
ValueErrorÚgetÚlenÚ	enumerateÚappendÚrange)ÚmeshÚuv_loopsÚ
poly_loopsÚluv_hashÚluv_hash_getÚluv_hash_lsÚpiÚpoly_indicesÚlir   Úuv_hubÚpoly_islandsÚpoly_tagÚ
poly_indexÚiÚislandÚaddedÚpoly_index_shareds                     r   r   r      s`  € ð „}ð 
˜Tœ^Ô2Ô7ð 
õ ðTñ
ô 
ð 	
ð
 AÐ@ T¤^Ô%:Ô%?Ð@Ñ@Ô@€HØ>Ð>°´Ð>Ñ>Ô>€JØ€HØ”<€LØ�&�3˜x™=œ=Ñ(€KÝ% jÑ1Ô1ð %ð %ÑˆˆLØð 	%ð 	%ˆBØ˜"”ˆBØ!�\ "Ñ%Ô%ˆFØˆ~Ø)+¨Ð,�˜ "™˜à—’˜bÑ!Ô!Ð!Ø$ˆK˜‰OˆOð	%ð €Lð ˆs•S˜‘_”_Ñ$€Hð-Øˆ
Ý•s˜:‘”Ñ'Ô'ð 	ð 	ˆAØ˜Œ{˜aÒÐØ�
Ø�ð  ð ˜ÒÐØ �\ˆFØ#$ˆH�ZÑ Ø×Ò Ñ'Ô'Ð'Ð'ààˆØð 
	-ØˆEØ$ Q Q Qœið -ð -�
Ø˜JÔ'¨1Ò,Ð,Ø(¨Ô4ð Að A˜Ø1<¸R´ð Að AÐ-Ø'Ð(9Ô:¸aÒ?Ð?Ø(, Ø>? Ð):Ñ ;Ø &§¢Ð.?Ñ @Ô @Ð @øð	Að
 ,-�H˜ZÑ(øð ð 
	-ð-ð6 Ðr   c                 ód  — d„ t          t          | j        ¦  «        ¦  «        D ¦   «         }| j        D ]'}|j        D ]}||                              |¦  «         ŒŒ(d„ | j        D ¦   «         }t          t          t          | j        ¦  «        ¦  «        ¦  «        }d}|rˆd}| j        D ]|}||j                 }||         }|j        D ]]}||         D ]R}	|	|k    rJ||	j                 }
||
k    r7d}||
         D ]}|||j        <   Œ|                     ||
         ¦  «         d||
<   ŒSŒ^Œ}|°ˆd„ |D ¦   «         S )aK  
    Splits the mesh into connected triangles, use this for separating cubes from
    other mesh elements within 1 mesh data-block.

    :arg mesh: the mesh used to group with.
    :type mesh: :class:`bpy.types.Mesh`
    :return: Lists of lists containing triangles.
    :rtype: list[list[:class:`bpy.types.MeshLoopTriangle`]]
    c                 ó   — g | ]}g ‘ŒS r   r   ©r   r1   s     r   r   z)mesh_linked_triangles.<locals>.<listcomp>`   s   € Ð7Ð7Ð7˜�Ð7Ð7Ð7r   c                 ó   — g | ]}|g‘ŒS r   r   )r   Úts     r   r   z)mesh_linked_triangles.<locals>.<listcomp>f   s   € Ð3Ð3Ð3˜!�1�#Ð3Ð3Ð3r   TFNc                 ó   — g | ]}|¯|‘ŒS r   r   )r   Útgs     r   r   z)mesh_linked_triangles.<locals>.<listcomp>‰   s   € Ð*Ð*Ð*�2 rÐ*ˆBÐ*Ð*Ð*r   )r#   r    ÚverticesÚloop_trianglesr"   ÚlistÚindexÚextend)r$   Ú	vert_trisr9   ÚvÚ
tri_groupsÚtri_mappingÚokÚmapped_indexÚmapped_groupÚnxt_tÚnxt_mapped_indexÚgrp_ts               r   r   r   T   s´  € ð 8Ð7�U¥3 t¤}Ñ#5Ô#5Ñ6Ô6Ð7Ñ7Ô7€IØÔ ð #ð #ˆØ”ð 	#ð 	#ˆAØ�aŒL×Ò Ñ"Ô"Ð"Ð"ð	#ð 4Ð3˜tÔ2Ð3Ñ3Ô3€Jå•u�S Ô!4Ñ5Ô5Ñ6Ô6Ñ7Ô7€Kð 
€BØ
ð @ØˆàÔ$ð 	@ð 	@ˆAØ& q¤wÔ/ˆLØ% lÔ3ˆLà”Zð @ð @�Ø& qœ\ð @ð @�EØ ’z�zØ+6°u´{Ô+CÐ(ð (Ð+;Ò;Ð;Ø!%˜Bð *4Ð4DÔ)Eð Hð H Ø;G ¨E¬KÑ 8Ð 8ð )×/Ò/°
Ð;KÔ0LÑMÔMÐMð <@˜JÐ'7Ñ8øð#@ð@ð ð @ð: +Ð*˜Ð*Ñ*Ô*Ð*r   c                 ó¸   — i }| j         }| j        }| j        D ]A}|j        D ]7}|||         j                 j        }	 ||xx         dz  cc<   Œ,#  d||<   Y Œ5xY wŒB|S )zŽ
    :return: Dictionary of edge keys with their value set to the number of faces using each edge.
    :rtype: dict[tuple[int, int], int]
    r   )ÚloopsÚedgesr   r   Ú
edge_indexÚkey)r$   Úface_edge_countrL   rM   r   r1   rO   s          r   r   r   Œ   s˜   € ð €OØŒJ€EØŒJ€EØ”ð )ð )ˆØÔ"ð 	)ð 	)ˆAØ˜˜aœÔ+Ô,Ô0ˆCð)Ø Ð$Ð$Ô$¨Ñ)Ð$Ð$Ñ$Ð$øð)Ø'(� Ñ$Ð$Ð$øøøð	)ð Ðs   ¼AÁAc                 ód   ‡‡— t          | ¦  «        Št          j        Šˆˆfd„| j        D ¦   «         S )zU
    :return: list face users for each item in mesh.edges.
    :rtype: list[int]
    c                 ó4   •— g | ]} ‰‰|j         d ¦  «        ‘ŒS ©r   )rO   )r   Úedr   r   s     €€r   r   z#edge_face_count.<locals>.<listcomp>§   s)   ø€ ÐAÐAÐA°ˆCˆC� ¤¨Ñ+Ô+ÐAÐAÐAr   )r   Údictr   rM   )r$   r   r   s    @@r   r   r       s9   øø€ õ
 +¨4Ñ0Ô0€OÝ
Œ(€CØAÐAÐAÐAÐA°d´jÐAÑAÔAÐAr   Nc                 óˆ  — g }|€| j         }t          |d¦  «        s
|dd…         }|�r|                     ¦   «         }|j        dd…         \  }}||g}d}|rÓd}t	          |¦  «        }|r¾|dz  }||         }	|	j        \  }
}|
|k    r#|                     |¦  «         |d         }d}||= n|||k    r#|                     |
¦  «         |d         }d}||= nS|
|k    r$|                     d|¦  «         |d         }d}||= n)||k    r#|                     d|
¦  «         |d         }d}||= |°¾|°Ó|                     |¦  «         |�°|S )zÜ
    Edge loops defined by edges

    Takes me.edges or a list of edges and returns the edge loops

    return a list of vertex indices.
    [ [1, 6, 7, 2], ...]

    closed loops have matching start and end values.
    NÚpopTFr   r   r   )rM   ÚhasattrrW   r<   r    r"   Úinsert)r$   rM   Ú
line_polysÚcurrent_edgeÚvert_endÚ
vert_startÚ	line_polyrE   r1   rT   Úv1Úv2s               r   r   r   ª   sÂ  € ð €Jð €}Ø”
ˆå�5˜%Ñ Ô ð Ø�a�a�a”ˆà
ñ &%Ø—y’y‘{”{ˆØ+Ô4°Q°Q°QÔ7Ñˆ�*Ø Ð*ˆ	àˆØð 	!ØˆBå�E‘
”
ˆAØð !Ø�Q‘�Ø˜1”X�Øœ‘��BØ˜’>�>Ø×$Ò$ RÑ(Ô(Ð(Ø(¨œ}�HØ�BØ˜a˜˜à˜8’^�^Ø×$Ò$ RÑ(Ô(Ð(Ø(¨œ}�HØ�BØ˜a˜˜à˜:Ò%Ð%Ø×$Ò$ Q¨Ñ+Ô+Ð+Ø!*¨1¤�JØ�BØ˜a˜˜à˜:Ò%Ð%Ø×$Ò$ Q¨Ñ+Ô+Ð+Ø!*¨1¤�JØ�BØ˜a˜ð5 ð !ð	 ð 	!ð@ 	×Ò˜)Ñ$Ô$Ð$ðM ñ &%ðP Ðr   Tc                 ó	  ‡ ‡‡ ‡!‡"‡#— ddl m} ddlmŠ ‰j        Š!|sg S d„ Š ˆ ˆ!fd„Š"d„ }|sÀt          ‰ ¦  «        t          t          hv rˆˆ fd„t          |¦  «        D ¦   «         }nˆ fd„t          |¦  «        D ¦   «         }t          t          |¦  «        d	z
  dd
¦  «        D ];}||         d	         ||d	z
           d         k    r|                     |d	z
  ¦  «         Œ< ||g¦  «        }�nÜt          ‰ ¦  «        t          t          hv rˆˆ ˆ"fd„t          |¦  «        D ¦   «         }nˆ ˆ"fd„t          |¦  «        D ¦   «         }d„ t          t          |¦  «        ¦  «        D ¦   «         }	|	rdt          |¦  «        d	z
  f|	d<   |sg S t          ¦   «         }
t          ¦   «         }|	D ]U} |||d                  ||d	                  ¦  «        }||
v r|                     |¦  «         Œ@|
                     |¦  «         ŒVg }|d         }|g}|g}|D ]a}||k    rY |||¦  «        |v r|g}|                     |¦  «         n0|r|d
         d	         |d	         k    rn|                     |¦  «         |}Œbd„ }d}|rgd}t          |¦  «        }t          |d	z
  d
d
¦  «        D ]?}||         }|r3t          |d	z
  d
d
¦  «        D ]}|s n||         }|r |||¦  «        rd}ŒŒ@|°g|}|D ]V}|rR|d         d	         |d
         d	         k    r4|                     ¦   «          |r|d         d	         |d
         d	         k    °4ŒWd„ |D ¦   «         }dgt          |¦  «        z  Š#d}|D ]J}t          |¦  «        dk    r5t          |¦  «        D ]\  }}|d         ‰#||z   <   Œ|t          |¦  «        z  }ŒK |d„ |D ¦   «         ¦  «        }ˆ#fd„|D ¦   «         }|s9|rt          d¦  «         d„ t          dt          |¦  «        ¦  «        D ¦   «         }nˆd}|D ]M}|� nHt          |¦  «        D ]7\  }}|dk    r||d	z
           d	k    rd} n|d	k    r||d	z
           dk    rd} nŒ8ŒN|s4t          |¦  «        D ]$\  }}t          t!          |¦  «        ¦  «        ||<   Œ%|S )a¬  
    Takes a poly-line of indices (ngon) and returns a list of face
    index lists. Designed to be used for importers that need indices for an
    ngon to create from existing verts.

    :arg from_data: Either a mesh, or a list/tuple of 3D vectors.
    :type from_data: :class:`bpy.types.Mesh` | list[Sequence[float]] | tuple[Sequence[float]]
    :arg indices: a list of indices to use this list
       is the ordered closed poly-line
       to fill, and can be a subset of the data given.
    :type indices: list[int]
    :arg fix_loops: If this is enabled poly-lines
       that use loops to make multiple
       poly-lines are dealt with correctly.
    :type fix_loops: bool
    r   )Útessellate_polygon)ÚVectorc                 ó„   — t          | d         ¦  «        t          | d         ¦  «        z   t          | d         ¦  «        z   S )Nr   r   r   )Úabs)Úcos    r   Úmlenzngon_tessellate.<locals>.mlen  s0   € å�2�a”5‰zŒz�C  1¤™JœJÑ&­¨R°¬U©¬Ñ3Ð3r   c                 ó6   •— |  ‰| d¦  «        | ‰| ¦  «        fS )Né   r   )rB   r1   rg   Úvector_to_tuples     €€r   Ú vert_from_vector_with_extra_dataz9ngon_tessellate.<locals>.vert_from_vector_with_extra_data  s&   ø€ à�/�/ ! QÑ'Ô'¨¨D¨D°©G¬GÐ3Ð3r   c                 óf   — | d         |d         k    r|d         | d         fS | d         |d         fS )Né   r   r   )r_   r`   s     r   Úed_key_mlenz$ngon_tessellate.<locals>.ed_key_mlen
  s7   € ØˆaŒ5�2�a”5Š=ˆ=Ø�a”5˜"˜Qœ%�<Ðà�a”5˜"˜Qœ%�<Ðr   c                 ó8   •— g | ]\  }} ‰‰|         ¦  «        ‘ŒS r   r   )r   Úiir1   rc   Ú	from_datas      €€r   r   z#ngon_tessellate.<locals>.<listcomp>  s+   ø€ ÐJÐJÐJ©e¨b°!�V�V˜I aœLÑ)Ô)ÐJÐJÐJr   c                 ó:   •— g | ]\  }}‰j         |         j        ‘ŒS r   ©r<   rf   )r   rp   r1   rq   s      €r   r   z#ngon_tessellate.<locals>.<listcomp>  s(   ø€ ÐNÐNÐN±%°"°a�YÔ'¨Ô*Ô-ÐNÐNÐNr   r   r   c                 óL   •— g | ] \  }} ‰ ‰‰|         ¦  «        |¦  «        ‘Œ!S r   r   )r   rp   r1   rc   rq   rk   s      €€€r   r   z#ngon_tessellate.<locals>.<listcomp>$  sH   ø€ ð ð ð á�B˜ð 1Ð0°°¸	À!¼Ñ1EÔ1EÀrÑJÔJðð ð r   c                 óN   •— g | ]!\  }} ‰‰j         |         j        |¦  «        ‘Œ"S r   rs   )r   rp   r1   rq   rk   s      €€r   r   z#ngon_tessellate.<locals>.<listcomp>)  sE   ø€ ð ð ð á�B˜ð 1Ð0°Ô1CÀAÔ1FÔ1IÈ2ÑNÔNðð ð r   c                 ó   — g | ]	}||d z
  f‘Œ
S )r   r   r7   s     r   r   z#ngon_tessellate.<locals>.<listcomp>.  s    € Ð7Ð7Ð7 �!�Q˜‘U�Ð7Ð7Ð7r   c                 óN  — |d         d         | d         d         k    r|| }} n!| d         d         |d         d         k    rndS |                       ¦   «          |                      |¦  «         | d         d         | d         d         k    r|                       ¦   «          |d d …= dS )Nr   r   r   FT)rW   r@   )Ús1Ús2s     r   Újoin_segz!ngon_tessellate.<locals>.join_segV  s¡   € Ø�"Œv�aŒy˜B˜qœE !œHÒ$Ð$Ø˜R�B��Ø�B”˜”˜b œe AœhÒ&Ð&Øà�uð �FŠF‰HŒHˆHØ�IŠI�b‰MŒMˆMà�!Œu�QŒx˜2˜bœ6 !œ9Ò$Ð$Ø—’‘”�à�1�1�1�Ø�4r   TFc                 ó8   — g | ]}t          |¦  «        d k    ¯|‘ŒS )r   )r    )r   Úvertss     r   r   z#ngon_tessellate.<locals>.<listcomp>~  s#   € ÐDÐDÐD˜uµS¸±Z´ZÀ!²^°^�U°^°^°^r   Nr   c                 ó&   — g | ]}d „ |D ¦   «         ‘ŒS )c                 ó   — g | ]
}|d          ‘ŒS rS   r   )r   rB   s     r   r   z.ngon_tessellate.<locals>.<listcomp>.<listcomp>Š  s   € Ð#7Ð#7Ð#7¨Q A a¤DÐ#7Ð#7Ð#7r   r   )r   Úloops     r   r   z#ngon_tessellate.<locals>.<listcomp>Š  s'   € Ð"NÐ"NÐ"N¸DÐ#7Ð#7°$Ð#7Ñ#7Ô#7Ð"NÐ"NÐ"Nr   c                 ó,   •— g | ]}ˆfd „|D ¦   «         ‘ŒS )c                 ó    •— g | ]
}‰|         ‘ŒS r   r   )r   r1   Úvert_maps     €r   r   z.ngon_tessellate.<locals>.<listcomp>.<listcomp>Ž  s   ø€ Ð(Ð(Ð( �˜!”Ð(Ð(Ð(r   r   )r   Úfr‚   s     €r   r   z#ngon_tessellate.<locals>.<listcomp>Ž  s.   ø€ Ð7Ð7Ð7¨QÐ(Ð(Ð(Ð( aÐ(Ñ(Ô(Ð7Ð7Ð7r   z4Warning Cannot scanfill, fallback on a triangle fan.c                 ó   — g | ]
}d |dz
  |g‘ŒS )r   r   r   r7   s     r   r   z#ngon_tessellate.<locals>.<listcomp>“  s"   € Ð>Ð>Ð> !��A˜‘E˜1�Ð>Ð>Ð>r   )Úmathutils.geometryrb   Ú	mathutilsrc   Úto_tupleÚtypeÚtupler>   r!   r#   r    rW   ÚsetÚaddr"   ÚprintÚreversed)$rq   ÚindicesÚ	fix_loopsÚdebug_printrb   rn   r|   r1   ÚfillrM   Ú
edges_usedÚedges_doublesrT   ÚedkeyÚloop_segmentsÚv_prevÚcontext_looprB   rz   Újoining_segmentsÚsegcountÚjÚseg_jÚkÚseg_kÚ	loop_listrp   ÚvertÚflipÚfiÚvirc   rg   rj   rk   r‚   s$   `                              @@@@@r   r   r   é   sO  øøøøøø€ ð$ 6Ð5Ð5Ð5Ð5Ð5Ø Ð Ð Ð Ð Ð Ø”o€Oàð Øˆ	ð4ð 4ð 4ð4ð 4ð 4ð 4ð 4ð 4ð ð  ð  ð ð ~8õ �	‰?Œ?�u¥d˜mÐ+Ð+ØJÐJÐJÐJÐJµyÀÑ7IÔ7IÐJÑJÔJˆEˆEàNÐNÐNÐN½9ÀWÑ;MÔ;MÐNÑNÔNˆEõ •s˜5‘z”z A‘~ q¨"Ñ-Ô-ð 	!ð 	!ˆAØ�QŒx˜Œ{˜e A¨¡Eœl¨1œoÒ-Ð-Ø—	’	˜!˜a™%Ñ Ô Ð øà!Ð! 5 'Ñ*Ô*ˆ‰õ �	‰?Œ?�u¥d˜mÐ+Ð+ðð ð ð ð ð å& wÑ/Ô/ðñ ô ˆEˆEð
ð ð ð ð å& wÑ/Ô/ðñ ô ˆEð
 8Ð7¥U­3¨u©:¬:Ñ%6Ô%6Ð7Ñ7Ô7ˆØð 	+Ø�3˜u™:œ:¨™>Ð*ˆE�!‰Hàð 	ØˆIå‘U”Uˆ
Ý™œˆàð 	&ð 	&ˆBØ�K  b¨¤e¤¨e°B°q´E¬lÑ;Ô;ˆEØ˜
Ð"Ð"Ø×!Ò! %Ñ(Ô(Ð(Ð(à—’˜uÑ%Ô%Ð%Ð%ð ˆà�q”ˆØ�xˆØ%˜ˆàð 	ð 	ˆAØ�FŠ{ˆ{à�;˜q &Ñ)Ô)¨]Ð:Ð:Ø$% 3�LØ!×(Ò(¨Ñ6Ô6Ð6Ð6à#ð /¨°RÔ(8¸Ô(;¸qÀ¼tÒ(CÐ(CØà$×+Ò+¨AÑ.Ô.Ð.à�øð	ð 	ð 	ð$  ÐØð 	4Ø$ÐÝ˜=Ñ)Ô)ˆHå˜8 a™<¨¨RÑ0Ô0ð 	4ð 	4�Ø% aÔ(�Øð 4Ý" 1 q¡5¨"¨bÑ1Ô1ð 4ð 4˜Ø$ð "Ø!˜EØ -¨aÔ 0˜à ð 4 X X¨e°UÑ%;Ô%;ð 4Ø/3Ð,øøð ð 	4ð "ˆ	àð 	ð 	ˆEØð ˜E !œH QœK¨5°¬9°Q¬<Ò7Ð7Ø—	’	‘”�ð ð ˜E !œH QœK¨5°¬9°Q¬<Ò7Ð7øð EÐD¨	ÐDÑDÔDˆ	ð �6�C ™LœLÑ(ˆØˆØð 	!ð 	!ˆEÝ�5‰zŒz˜AŠ~ˆ~Ý(¨Ñ/Ô/ð /ð /‘G�A�tØ'+¨A¤w�H˜Q ™VÑ$Ð$Ø•c˜%‘j”jÑ �øà!Ð!Ð"NÐ"NÀIÐ"NÑ"NÔ"NÑOÔOˆð 8Ð7Ð7Ð7°$Ð7Ñ7Ô7ˆàð .Øð 	JÝÐHÑIÔIÐIØ>Ð>¥u¨Qµ°G±´Ñ'=Ô'=Ð>Ñ>Ô>ˆˆð ˆØð 		ð 		ˆBØÐØ�Ý" 2™œð ð ‘��2Ø˜’7�7˜r ! a¡%œy¨Aš~˜~Ø �DØ�EØ˜1’W�W  A¨¡E¤¨a¢ Ø�DØ�Eøøàð 	.Ý" 4™œð .ð .‘��2Ý¥¨¡¤Ñ-Ô-��Q‘�à€Kr   c                 ó  — ddl m } dg| t          |¦  «        z  z  }t          |¦  «        D ]Ô\  }}|j        j        }|j        dd…         }||d                  j        ||d                  j        ||d                  j        f}t          | ¦  «        D ]l}	 |¦   «         }
 |¦   «         }|
|z   }|dk    r
d|
z
  }
d|z
  }|d         |d         z
  }|d         |d         z
  }|d         |
|z  z   ||z  z   }||| |z  |	z   <   ŒmŒÕ|S )a¤  
    Generates a list of random points over mesh loop triangles.

    :arg num_points: The number of random points to generate on each triangle.
    :type num_points: int
    :arg loop_triangles: Sequence of the triangles to generate points on.
    :type loop_triangles: Sequence[:class:`bpy.types.MeshLoopTriangle`]
    :return: List of random points over all triangles.
    :rtype: list[:class:`mathutils.Vector`]
    r   )ÚrandomNr   r   g      ð?)r¤   r    r!   Úid_datar<   rf   r#   )Ú
num_pointsr=   r¤   Úsampled_pointsr1   Últr|   ÚltvÚtvrœ   Úu1Úu2Úu_totÚside1Úside2Úps                   r   r   r   ª  sC  € ð ÐÐÐÐÐð �V˜z­C°Ñ,?Ô,?Ñ?Ñ@€NÝ˜>Ñ*Ô*ð 3ð 3‰ˆˆ2à”
Ô#ˆØŒk˜!˜!˜!ŒnˆØ�C˜”FŒmÔ  c¨!¤f¤Ô 0°%¸¸A¼´-Ô2BÐCˆå�zÑ"Ô"ð 	3ð 	3ˆAØ�‘”ˆBØ�‘”ˆBØ˜‘GˆEà�qŠyˆyØ˜2‘X�Ø˜2‘X�à�q”E˜B˜qœE‘MˆEØ�q”E˜B˜qœE‘MˆEà�1”˜˜U™
Ñ" R¨%¡ZÑ/ˆAà12ˆN˜:¨™>¨AÑ-Ñ.Ð.ð	3ð  Ðr   r   )TT)Ú__all__r   r   r   r   r   r   r   r   r   r   ú<module>r²      s—   ðð
€ðAð Að AðH5+ð 5+ð 5+ðpð ð ð(Bð Bð Bð<ð <ð <ð <ð~~ð ~ð ~ð ~ðB&ð &ð &ð &ð &r   