Ë
    ¸ÑÆjO  ã                   óh   — d dl Z d dlZd dlZd dlmZmZ g Zg Z G d„ d«      Zd	d„Z	d
d„Z
dd„Zdd„Zy)é    N)ÚVectorÚMatrixc                   ó    — e Zd Zd„ Zdd„Zd„ Zy)ÚMeshc                 óX   — || _         g | _        g | _        g | _        g | _        g | _        y ©N)ÚnameÚvÚfÚmiÚuvÚsmooth)Úselfr	   s     úgeometry.pyÚ__init__zMesh.__init__   s)   €  4˜œ¨r¨¬¸°$´&ÀB¸D¼GÈrÀtÄwÐ^`ÐRVÕR]ó    Nc           
      óP  ‡— |D �cg c]  }t        |«      ‘Œ }}t        | j                  «      Š| j                  j                  |«       |D �]¹  }| j                  j                  t        ˆfd„|D «       «      «       | j                  j                  |«       | j                  j                  |«       |r-| j                  j                  |D �	cg c]  }	||	   ‘Œ	 c}	«       Œ–||d      ||d      z
  j                  ||d      ||d      z
  «      j                  «       }
t        |
j                  «      dk  rJt        d«      }|j                  |
«      j                  «       }|
j                  |«      j                  «       }nLt        d«      |
|
j                  z  z
  j                  «       }|
j                  |«      }|j                  dk  r| }|dv rÇt!        | d	t        d«      «      }||
|j#                  |
«      z  z
  }|j$                  d
kD  r/|j                  «       }|
j                  |«      j                  «       }| j                  j                  |D �	cg c]  }	||	   ‘Œ	 c}	D �cg c]$  }|j#                  |«      |j#                  |«      f‘Œ& c}«       �ŒL| j                  j                  |D �	cg c]  }	||	   ‘Œ	 c}	D �cg c]8  }|j#                  |«      t&        |   z  |j#                  |«      t&        |   z  f‘Œ: c}«       �Œ¼ y c c}w c c}	w c c}	w c c}w c c}	w c c}w )Nc              3   ó(   •K  — | ]	  }‰|z   –— Œ y ­wr   © )Ú.0ÚjÚoffs     €r   ú	<genexpr>zMesh.add.<locals>.<genexpr>
   s   øè ø€ Ò+ �s˜1•uÑ+ùs   ƒé   r   é   gffffffî?)r   r   r   )r   r   r   )r   é   é   é   Úgraingš™™™™™¹?)r   Úlenr
   Úextendr   ÚappendÚtupler   r   r   ÚcrossÚ
normalizedÚabsÚyÚxÚzÚgetattrÚdotÚlengthÚTILES)r   ÚvertsÚfacesÚmatr   r   r
   ÚvsÚfacer   ÚnormalÚupÚur   Ú	projectedÚpr   s                   @r   ÚaddzMesh.add   su  ø€ ØÖ�A„fˆQ…iÐ€"Ð¤C¨¯©£K °·±·±¸bÔ0AØó c€dØ‡6�6‡=�=”Ó+ dÔ+Ó+Ô,¨T¯W©W¯^©^¸CÔ-@ÀÇÁ×ASÑASÐTZÔA[Ùˆ�‰�‰¨Ö- 1˜˜A›Ò-Ô	.¨xØˆd�1‰g‰;�r˜$˜q™'‘{Ñ"×
)Ñ
)¨"¨T°!©W©+°b¸¸a¹±kÑ*AÓ
B×
MÑ
MÓ
O€6ä	ˆ&�(‰(ƒm�CÒÜˆgƒ€B˜Ÿ™ &Ó)×4Ñ4Ó6�q¸¿¹Àa»×9SÑ9SÓ9U±qäˆgƒ�v˜fŸh™h‘Ñ&×2Ñ2Ó4€A°v·|±|ÀA³°QØ‡s�sˆ1‚u�ˆrˆQØ	ˆ[ÑÜ
�$�wœv g›Ó
/€E¸%ÀÀuÇyÁyÐQWÓGXÑ@XÑ:X°	Ø×Ñ˜Ò˜Y×1Ñ1Ó3˜1°f·l±lÀ1³o×6PÑ6PÓ6R°AØ‡G�G‡N�NÀÖ1F¸A°"°Q³%Ò1FÖG¨A�Q—U‘U˜1“X˜aŸe™e A›hÒ'ÒGÖHØ�‰�‰Ð[_ÖK`ÐVWÈBÈqËEÒK`ÖaÀa˜Ÿ™˜q›¤%¨¡*Ñ,¨Q¯U©U°1«X´e¸C±jÑ-@ÒAÒaÖbñcùò  ùò .ùò 2GùÒGùÚK`ùÒas#   †L
ÃL
ÉL
É&)L
Ê1L
Ë=L#
c                 ó–  — t         j                  j                  j                  | j                  «      }|j                  | j                  g | j                  «       |j                  «        t         j                  j                  j                  | j                  |«      }t         j                  j                  j                  j                  |«       t        D ]  }|j                  j                  |«       Œ |j                   j                  d¬«      }t#        |j$                  | j&                  | j(                  | j*                  «      D ]G  \  }}}}||_        ||_        t#        |j0                  |«      D ]  \  }	}
|
|j                  |	   _        Œ ŒI t3        j                  «       }|j5                  |«       t2        j6                  j9                  ||j:                  ¬«       t2        j6                  j=                  |t?        |j:                  «      ¬«       |jA                  |«       |jC                  «        |j                  «        |S )NÚUVMap)r	   )r/   )"ÚbpyÚdataÚmeshesÚnewr	   Úfrom_pydatar
   r   ÚupdateÚobjectsÚcontextÚ
collectionÚlinkÚMATSÚ	materialsr"   Ú	uv_layersÚzipÚpolygonsr   r   r   Úmaterial_indexÚ
use_smoothÚloop_indicesÚbmeshÚ	from_meshÚopsÚrecalc_face_normalsr/   ÚtriangulateÚlistÚto_meshÚfree)r   ÚmeÚobÚmr   r7   r   ÚcoordsÚsmÚliÚcoÚbms               r   ÚfinishzMesh.finish   s	  € Ü‡X�X‡_�_×Ñ˜Ÿ™Ó#€" B§N¡N°4·6±6¸"¸T¿V¹VÔ$DÀRÇYÁYÄ[ÔTW×T\ÑT\×TdÑTd×ThÑThÐim×irÑirÐsuÓTvÐQSÔwz÷  xCñ  xC÷  xNñ  xN÷  xVñ  xV÷  x[ñ  x[ð  \^ô  x_ÜÒ&€a�—‘×#Ñ# AÕ&Ð&Ø‡\�\×Ñ˜7ÐÓ#€"Ü˜BŸK™K¨¯©°·±¸¿¹ÓDò =�n€aˆˆ6�"Ø€1Ô B�q”|Ü�A—N‘N 6Ó*Ò<�u€rˆ"¸"¨2¯7©7°2©;­>Ñ<ð=ô ‡Y�Yƒ[€"�—‘˜bÔ!¤%§)¡)×"?Ñ"?ÀÈÏÉÐ"?Ô"RÔSX×S\ÑS\×ShÑShÐikÔrvÐwy×wÑwó  sAÐShô  TBð  CE÷  CMñ  CMð  NPô  CQð  RT÷  RYñ  RYô  R[ð  \^÷  \eñ  \eô  \gà	€)r   )FN)Ú__name__Ú
__module__Ú__qualname__r   r8   r]   r   r   r   r   r      s   „ Ú`ócó"	r   r   c           
      óê  — t        j                  «       }t         j                  j                  |d¬«       |j                  D ]c  }t        |j                  j                  |d   z  |j                  j                  |d   z  |j                  j                  |d   z  f«      |_        Œe |rMt         j                  j                  |t        |j                  «      t        |t        |«      dz  «      dd¬«       |j                  j                  «        |j                  j                  «        |j                  D �cg c]  }|j                  j!                  «       ‘Œ }}|j"                  D �	cg c]  }	t%        d„ |	j                  D «       «      ‘Œ  }
}	|j'                  «        |r|D �cg c]  }||z  ‘Œ	 }}| j)                  |D �cg c]  }|t        |«      z   ‘Œ c}|
|«       y c c}w c c}	w c c}w c c}w )	Nr   )Úsizer   r   g¸…ëQ¸Î?ÚEDGES)ÚgeomÚoffsetÚsegmentsÚaffectc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr   )Úindex)r   r
   s     r   r   zbox.<locals>.<genexpr>'   s   è ø€ Òd~ÐqrÐef×elÕelÑd~ùs   ‚)rM   r>   rO   Úcreate_cuber.   r   r[   r(   r'   r)   ÚbevelrR   ÚedgesÚminÚensure_lookup_tableÚindex_updateÚcopyr/   r#   rT   r8   )ÚgÚcÚsrW   ÚbÚrotr\   r
   r1   r   Úfss              r   Úboxrw   #   sŸ  € Ü	‡I�IƒK€”—	‘	×%Ñ% b¨aÐ%Ô0Ø
�(‰(ÒE€Qœ §¡§¡ q¨¡t¡¨A¯D©D¯F©F°1°Q±4©K¸¿¹¿¹¸qÀ¹t¹ÐDÓE�1•4ÐEÙ„e‡i�i‡o�o�bœd 2§8¡8›n´C¸¼#¸a»&À¹*Ó4EÈqÐX_€oÔ`Ø‡�×ÑÔ §¡× 5Ñ 5Ô 7ÐQS×QYÑQYÖ;ZÈA¸A¿D¹D¿I¹I½KÐ;Z¸Ð;Zð  IK÷  IQñ  IQö  _Rð  DEÔ_dÑd~Ðvw×v}Ñv}Ôd~Õ_~ð  _RÐ[]ð  _Rð  SU÷  SZñ  SZô  S\Ù˜2Ö�aˆC�‹EÐˆÐØ‡�˜RÖ ˜ˆŒ&�‹)‹Ò   AÕ&ùò <[ùò  _RùÚùÚ s   Ä9!G!Å*#G&Æ%G+ÇG0c           	      ó¦  — |D ���cg c]  }|D ]
  \  }}|||f‘Œ Œ }}}}t        |«      }	t        t        |	dz
  dd«      «      t        t        |	d|	z  «      «      gt        |	«      D �
cg c]  }
|
|
dz   |	z  |
dz   |	z  |	z   |
|	z   f‘Œ c}
z   }|dk(  r|D ���cg c]  \  }}}|||f‘Œ }}}}| j                  |||«       y c c}}}w c c}
w c c}}}w )Nr   éÿÿÿÿr   r'   )r    r#   Úranger8   )rq   ÚpolyÚdepthrW   Úaxisr)   r(   r'   r1   ÚnÚirv   s               r   Úprismr€   +   sÜ   € à×,Ð,� tÒ,¡  !€aˆˆ!‚WÐ,€WÐ,€Ò,¬s°4«y¨QÜ
Œ5��1‘�R˜ÓÓœU¤5¨¨1¨Q©3£<Ó0Ð1ÔV[Ð\]ÓV^Ö2_ÐQR°A°q¸±s¸A±g¸qÀ¹sÀA¹gÀa¹iÈÈ!ÉÒ3LÒ2_Ñ_€Øˆ#‚I r×*Ð*™e˜a  !�1�Q�q’'Ð*ˆbÒ*Ø‡�€rˆ"ˆQ…ùô -ùÚ2_ùÜ*s   ‡C Á)CÂCc                 óª  — t        |«      }t        |«      }||z
  j                  }||z
  j                  dd«      }|€|n|}||f||ffD �	�
�cg c]}  \  }	}
t        |«      D ]j  }|	|t        |
t	        j
                  |t        j                  z  |z  «      z  |
t	        j                  |t        j                  z  |z  «      z  df«      z  z   ‘Œl Œ }}
}	}t        t        |dz
  dd«      «      t        t        |d|z  «      «      gt        |«      D �cg c]  }||dz   |z  |dz   |z  |z   ||z   f‘Œ c}z   }| j                  |||d«       y c c}}
}	w c c}w )NÚZÚYr   r   ry   r   T)
r   r,   Úto_track_quatrz   ÚmathÚcosÚtauÚsinr#   r8   )rq   Úart   ÚrrW   r~   Úr2ÚLÚqr7   Úrrr   r1   rv   s                 r   Úcylr�   2   sI  € Ü	ˆ!ƒ9€Œv�a‹yˆQ˜A˜a™CŸ<™<˜¨1¨Q©3×*=Ñ*=¸cÀ#Ó*F¨ÈrÈzÉ!Ð_aÀrØWXÐYZÐV[Ð]^Ð_aÐ\bÐUc×vÐvÉTÈQÈrÔmrÐstÓmuÒvÐhi€Q€qŒ�”D—H‘H˜QœtŸx™x™Z¨™\Ó*Ñ*¨2¬d¯h©h°q¼¿¹±zÀ!±|Ó.DÑ+DÀQÐGÓ	HÑHÓHÐvÐHÐv€ÒvÜ
Œ5��1‘�R˜ÓÓœU¤5¨¨1¨Q©3£<Ó0Ð1ÔV[Ð\]ÓV^Ö2_ÐQR°A°q¸±s¸A±g¸qÀ¹sÀA¹gÀa¹iÈÈ!ÉÒ3LÒ2_Ñ_€Ø‡�€rˆ"ˆQˆtÕùô wùÚ2_s   ÁBE	ÄEc           	      óR   — t        ||dd  «      D ]  \  }}t        | |||||«       Œ y )Nr   )rH   r�   )rq   ÚpointsrŠ   rW   r~   r‰   rt   s          r   Útuber’   8   s/   € Ü��v˜a˜b�zÓ"Ò3�S€Q€q¤3 q¨¨1¨Q¨q°Õ#3Ñ3r   )g{®Gáz„?N)r)   )é   N)r“   )r;   rM   r…   Ú	mathutilsr   r   rE   r-   r   rw   r€   r�   r’   r   r   r   ú<module>r•      s6   ðß Ó ß #Ø€Ø€÷ñ ó<'óóô4r   