Ë
    Ûvžj'�  ã                   óP  — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlZd dl	Z	d dl
mZ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 d dlmZ d d	lm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( d dl)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJ d dlKmLZLmMZM d dlNmOZO d dlPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\ d dl]m^Z^m_Z_ ddl`maZambZbmcZcmdZdmeZe d„ Zfe	jÎ                  jÑ                  d«      rd„ ZinejZid„ ZkeHeQjØ                  eDeQjÚ                  eIeQjÜ                  eEeQjÞ                  eFeQjà                  eGeQjâ                  eCeQjä                  eBeQjæ                  iZtd „ Zud!„ Zvd"„ Zwd#„ Zxd$„ Zyd%„ Zzd&„ Z{d'„ Z|d(„ Z}d)„ Z~d*„ Zd+„ Z€d,„ Z�d-„ Z‚d.„ Zƒd/„ Z„d0„ Z…d1„ Z†d2„ Z‡d3„ Zˆd4„ Z‰d5„ ZŠd6„ Z‹d7„ ZŒd8„ Z�d9„ ZŽd:„ Z�d;„ Z�d<„ Z‘d=„ Z’d>„ Z“d?„ Z”d@„ Z•dA„ Z–dB„ Z—dC„ Z˜dD„ Z™dE„ ZšdF„ Z›dG„ ZœdH„ Z�dI„ ZždJ„ ZŸdK„ Z dL„ Z¡dM„ Z¢dN„ Z£dO„ Z¤dP„ Z¥dQ„ Z¦dR„ Z§dS„ Z¨dT„ Z©dU„ ZªdV„ Z«dW„ Z¬dX„ Z­dY„ Z®dZ„ Z¯d[„ Z°d\„ Z±d]„ Z²d�d^„Z³d_„ Z´d`„ Zµda„ Z¶db„ Z·dždc„Z¸dd„ Z¹dŸde„ZºdŸdf„Z»dg„ Z¼dh„ Z½di„ Z¾dj„ Z¿dk„ ZÀdl„ ZÁdm„ ZÂdn„ ZÃd do„ZÄdp„ ZÅdq„ ZÆdr„ ZÇds„ ZÈdt„ ZÉdu„ ZÊdv„ ZËdw„ ZÌdx„ ZÍdy„ ZÎdz„ ZÏd{„ ZÐd|„ ZÑd}„ ZÒd~„ ZÓd„ ZÔd€„ ZÕd�„ ZÖd¡d‚„Z×dƒ„ ZØd„„ ZÙd…„ ZÚd†„ ZÛd‡„ ZÜdˆ„ ZÝd‰„ ZÞdŠ„ Zßd‹„ Zàd¢dŒ„Zád�„ Zâ edŽeâ¬�«      Zã G d�„ d‘eä«      Zå eeãeá¬’«      d¢d“„«       Zæd”„ Zçd•„ Zèd–„ Zéd—„ Zêd˜„ Zëd™„ Zìdš„ Zíd£d›„Zîdœ„ Zïy)¤é    N)ÚIterable)ÚLRUCacheÚcached)ÚBinToolsÚBinTools_FormatVersion_CURRENT)ÚBnd_Box)Ú	BRep_Tool)ÚBRepAdaptor_CompCurveÚBRepAdaptor_CurveÚBRepAdaptor_Surface)ÚBRepExtrema_DistShapeShape)Ú
BRepBndLib)ÚBRepBuilderAPI_CopyÚBRepBuilderAPI_MakeEdgeÚBRepBuilderAPI_MakeFaceÚBRepBuilderAPI_MakeVertexÚBRepBuilderAPI_FindPlane)Ú	BRepGPropÚBRepGProp_Face)ÚBRepMesh_IncrementalMesh)Ú	BRepTools)ÚGCPnts_AbscissaPoint)ÚGeomAbs_CurveType)ÚGeomLib_IsPlanarSurface)Úgp_Ax1Úgp_Ax2Úgp_Ax3Úgp_CircÚgp_DirÚgp_PlnÚgp_PntÚgp_QuaternionÚgp_TrsfÚgp_VecÚgp_Lin)ÚGProp_GProps©ÚQuantity_ColorRGBA)ÚStlAPI_Writer)	ÚTopAbs_COMPOUNDÚTopAbs_COMPSOLIDÚTopAbs_EDGEÚTopAbs_FACEÚTopAbs_SHELLÚTopAbs_SOLIDÚTopAbs_VERTEXÚTopAbs_WIREÚTopAbs_Orientation)ÚTopExpÚTopExp_Explorer)ÚTopLoc_Location)ÚTopoDSÚTopoDS_BuilderÚTopoDS_CompoundÚTopoDS_CompSolidÚTopoDS_EdgeÚTopoDS_FaceÚTopoDS_IteratorÚTopoDS_ShapeÚTopoDS_ShellÚTopoDS_SolidÚTopoDS_VertexÚTopoDS_Wire)Ú)TopTools_IndexedDataMapOfShapeListOfShapeÚTopTools_IndexedMapOfShapeé   )ÚColorÚ
class_nameÚdistanceÚflattenÚ	type_namec                  ó"   — t         j                  S ©N)ÚOCPÚ__version__© ó    úi/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/ocp_tessellate/ocp_utils.pyÚocct_versionrQ   l   s   € Ü�?‰?ÐrO   z7.7c                 ó(   — d}| j                  |«      S )Niÿÿÿ)ÚHashCode)ÚobjÚMAX_HASH_KEYs     rP   Úhash_compatrV   v   s   € Ø!ˆØ�|‰|˜LÓ)Ð)rO   c                 ó\   — t        | «      st        | «      st        | «      rt        | «      S y)NrN   )Úis_topods_solidÚis_topods_faceÚis_topods_shellrV   ©rT   s    rP   Úocp_hashr\   ~   s&   € Ü�sÔœ~¨cÔ2´oÀcÔ6JÜ˜3ÓÐàrO   c                 ó@   — t         | j                  «          } || «      S rK   )Údowncast_LUTÚ	ShapeType)rT   Úd_funcs     rP   Údowncastra   ‘   s   € Ü˜#Ÿ-™-›/Ñ*€FÙ�#‹;ÐrO   c                 ó‚   — t        «       }t        «       }|j                  |«       | D ]  }|j                  ||«       Œ |S rK   )r8   r7   ÚMakeCompoundÚAdd)ÚobjsÚcompÚbuilderrT   s       rP   Úmake_compoundrh   –   s?   € ÜÓ€DÜÓ€GØ×Ñ˜ÔãˆØ�‰�D˜#Õð ð €KrO   c                 ó‚   — t        «       }t        «       }|j                  |«       | D ]  }|j                  ||«       Œ |S rK   )r9   r7   ÚMakeCompSolidrd   )re   rf   rg   Úshapes       rP   Úmake_compsolidrl   ¡   s?   € ÜÓ€DÜÓ€GØ×Ñ˜$ÔãˆØ�‰�D˜%Õ ð ð €KrO   c                 óJ   — t        t        | «      j                  «       «      }|S rK   )ra   r   ÚShape)rT   Úresults     rP   Úcopy_topods_shaperp   ¬   s    € ÜÔ)¨#Ó.×4Ñ4Ó6Ó7€FØ€MrO   c                 ó¢   — | j                   }|j                  |«      }t        t        | j                  «      j                  «       «      |_        |S rK   )Ú	__class__Ú__new__ra   r   Úwrappedrn   )rT   Úclsro   s      rP   Ú
copy_shaperv   ±   s=   € Ø
�-‰-€CØ�[‰[˜Ó€FÜÔ1°#·+±+Ó>×DÑDÓFÓG€F„NØ€MrO   c                 óÖ   — t        | d«      r(| j                  «       j                  j                  «       S t        | d«      r| j                  j                  «       S | j                  «       S )NÚvalrt   )Úhasattrrx   rt   ÚTShaper[   s    rP   Ú
get_tshaper{   ¸   sP   € Üˆs�EÔØ�w‰w‹y× Ñ ×'Ñ'Ó)Ð)Ü	��iÔ	 Ø�{‰{×!Ñ!Ó#Ð#à�z‰z‹|ÐrO   c                 óR   — t        | t        «      st        | Ž } | j                  «       S rK   )Ú
isinstancer$   Ú
Normalized)Úvs    rP   Ú
normalizedr€   Á   s!   € Ü�aœÔ Ü�AˆJˆØ�<‰<‹>ÐrO   c                 óŒ   — t        | «      }t        |«      }|j                  |«      j                  «       }|j                  «       S rK   )r€   ÚCrossedr~   ÚCoord)Úv1Úv2ÚxÚzÚys        rP   Úcrossr‰   Ç   s6   € Ü�2‹€AÜ�2‹€AØ	�	‰	�!‹×ÑÓ!€AØ�7‰7‹9ÐrO   c           	      óR   — t        |D �cg c]  }t        | |«      ‘Œ c}«      S c c}w rK   )Úallry   )rT   ÚattrsÚas      rP   Ú_hasrŽ   Î   s%   € Ü©Ó/© A”˜˜Q•¨Ñ/Ó0Ð0ùÒ/s   Š$c                 ó   — t        | g d¢«      S )N)ÚobjectsÚctxrx   ©rŽ   r[   s    rP   Úis_cadqueryr“   ×   s   € Ü�Ò.Ó/Ð/rO   c                 óL   — t        | ddg«      xr t        | j                  «      S )Nrt   ÚforConstruction©rŽ   Úis_topods_shapert   r[   s    rP   Úis_cadquery_shaper˜   Û   s#   € Ü��iÐ!2Ð3Ó4ÒU¼ÈÏÉÓ9UÐUrO   c                 ó   — t        | g d¢«      S )N)rT   ÚlocÚnameÚchildrenr’   r[   s    rP   Úis_cadquery_assemblyr�   ß   s   € Ü�Ò7Ó8Ð8rO   c                 ó   — t        | g d¢«      S ©N)rT   rš   r›   rœ   Úmatesr’   r[   s    rP   Úis_cadquery_massemblyr¡   ã   ó   € Ü�Ò@ÓAÐArO   c                 óR   — t        | d«      xr t        | d«      xr t        | d«      S )NÚ_facesÚ_edgesÚ
_selection©ry   r[   s    rP   Úis_cadquery_sketchr¨   ç   s)   € ä��XÓÒX¤7¨3°Ó#9ÒX¼gÀcÈ<Ó>XðrO   c                 óL   — t        | «      xr t        | j                  «      dk(  S ©Nr   )r“   Úlenr�   r[   s    rP   Úis_cadquery_empty_workplaner¬   í   s    € Ü�sÓÒ5¤ C§K¡KÓ 0°AÑ 5Ð5rO   c                 óR   — t        | d«      xr t        | j                  t        «      S ©Nrt   )ry   r}   rt   r$   r[   s    rP   Ú	is_vectorr¯   ó   s   € Ü�3˜	Ó"ÒF¤z°#·+±+¼vÓ'FÐFrO   c                 ó   — t        | g d¢«      S rŸ   r’   r[   s    rP   Úis_massemblyr±   ÷   r¢   rO   c                 ó   — t        | d«      S r®   r§   r[   s    rP   Ú
is_wrappedr³   û   s   € Ü�3˜	Ó"Ð"rO   c                 óD   — t        | g d¢«      xr t        | t        «       S )N)Ú_objÚ	_obj_nameÚ_tag)rŽ   r}   Útyper[   s    rP   Úis_build123dr¹   ÿ   s   € Ü�Ò2Ó3ÒQ¼JÀsÌDÓ<QÐ8QÐQrO   c                 ó:   — t        | «      xr | j                  dk(  S )NÚpart©r¹   r¶   r[   s    rP   Úis_build123d_partr½     ó   € Ü˜ÓÒ8 §¡°&Ñ!8Ð8rO   c                 ó:   — t        | «      xr | j                  dk(  S )NÚsketchr¼   r[   s    rP   Úis_build123d_sketchrÁ     s   € Ü˜ÓÒ: §¡°(Ñ!:Ð:rO   c                 ó:   — t        | «      xr | j                  dk(  S )NÚliner¼   r[   s    rP   Úis_build123d_linerÄ     r¾   rO   c                 óL   — t        | ddg«      xr t        | j                  «      S )Nrt   rœ   r–   r[   s    rP   Úis_build123d_shaperÆ     s"   € Ü��i Ð,Ó-ÒN´/À#Ç+Á+Ó2NÐNrO   c                 óH   — t        | d«      xr t        | j                  «      S r®   ©ry   rZ   rt   r[   s    rP   Úis_build123d_shellrÉ     ó   € Ü�3˜	Ó"ÒC¤°s·{±{Ó'CÐCrO   c                 óH   — t        | d«      xr t        | j                  «      S r®   ©ry   Úis_topods_compoundrt   r[   s    rP   Úis_build123d_compoundrÎ     ó   € Ü�3˜	Ó"ÒFÔ'9¸#¿+¹+Ó'FÐFrO   c                 óÆ   — t        | «      xs t        | «      xrH t        | d«      xr: t        | j                  t
        t        f«      xr t        | j                  «      dkD  S )Nrœ   r   )rÎ   rÆ   ry   r}   rœ   ÚlistÚtupler«   r[   s    rP   Úis_build123d_assemblyrÓ     sX   € ä	˜sÓ	#Ò	>Ô'9¸#Ó'>ò 	"Ü�C˜Ó$ò	"ä�s—|‘|¤d¬E ]Ó3ò	"ô �—‘Ó Ñ!ð		rO   c                 óv   — t        | t        «      xr( t        | d«      xr t        | d«      xr t        | d«      S )NÚfirstÚlastÚ	filter_by©r}   r   ry   r[   s    rP   Úis_build123d_shapelistrÙ   (  s@   € ä�3œÓ!ò 	&Ü�C˜Ó!ò	&ä�C˜Ó ò	&ô �C˜Ó%ð	rO   c                 óZ   — t        | t        «      xr t        | d«      xr t        | d«      S )NÚ	locationsÚ_currentrØ   r[   s    rP   Úis_build123d_locationlistrÝ   1  s/   € ä�3œÓ!ò 	%Ü�C˜Ó%ò	%ä�C˜Ó$ðrO   c                 óF   — t        | «      xr t        | j                  «      S rK   )r³   Úis_gp_planert   r[   s    rP   Úis_build123d_planerà   9  s   € Ü�c‹?Ò7œ{¨3¯;©;Ó7Ð7rO   c                 óF   — t        | «      xr t        | j                  «      S rK   )r³   Úis_toploc_locationrt   r[   s    rP   Úis_build123d_locationrã   =  s   € Ü�c‹?Ò>Ô1°#·+±+Ó>Ð>rO   c                 óF   — t        | «      xr t        | j                  «      S rK   )r³   Ú
is_gp_axisrt   r[   s    rP   Úis_build123d_axisræ   A  s   € Ü�c‹?Ò6œz¨#¯+©+Ó6Ð6rO   c                 ó"   — t        | t        «      S rK   )r}   r=   ©Útopods_shapes    rP   r—   r—   J  ó   € Ü�l¤LÓ1Ð1rO   c                 ó"   — t        | t        «      S rK   )r}   r8   rè   s    rP   rÍ   rÍ   N  s   € Ü�l¤OÓ4Ð4rO   c                 ó"   — t        | t        «      S rK   )r}   r9   rè   s    rP   Úis_topods_compsolidrí   R  s   € Ü�lÔ$4Ó5Ð5rO   c                 ó"   — t        | t        «      S rK   )r}   r?   rè   s    rP   rX   rX   V  rê   rO   c                 ó"   — t        | t        «      S rK   )r}   r>   rè   s    rP   rZ   rZ   Z  rê   rO   c                 ó"   — t        | t        «      S rK   )r}   r;   rè   s    rP   rY   rY   ^  ó   € Ü�l¤KÓ0Ð0rO   c                 ó"   — t        | t        «      S rK   )r}   rA   rè   s    rP   Úis_topods_wireró   b  rñ   rO   c                 ó"   — t        | t        «      S rK   )r}   r:   rè   s    rP   Úis_topods_edgerõ   f  rñ   rO   c                 ó"   — t        | t        «      S rK   )r}   r@   rè   s    rP   Úis_topods_vertexr÷   j  s   € Ü�l¤MÓ2Ð2rO   c                 óZ   — t        | «      }|j                  «       t        j                  k(  S rK   )r   ÚGetTyper   ÚGeomAbs_Line)ré   Úcs     rP   Úis_linerü   n  s$   € Ü˜,Ó'€AØ�9‰9‹;Ô+×8Ñ8Ñ8Ð8rO   c                 ó"   — t        | t        «      S rK   )r}   r5   r[   s    rP   râ   râ   s  s   € Ü�cœ?Ó+Ð+rO   c                 ó"   — t        | t        «      S rK   )r}   r    r[   s    rP   rß   rß   w  ó   € Ü�cœ6Ó"Ð"rO   c                 ó"   — t        | t        «      S rK   )r}   r   r[   s    rP   rå   rå   {  rÿ   rO   c                 ó"   — t        | t        «      S rK   )r}   r$   r[   s    rP   Ú	is_gp_vecr    rÿ   rO   c                 óH   — t        | d«      xr t        | j                  «      S r®   )ry   r—   rt   r[   s    rP   Úis_shaper  ˆ  rÊ   rO   c                 óH   — t        | d«      xr t        | j                  «      S r®   rÌ   r[   s    rP   Úis_compoundr  Œ  rÏ   rO   c                 óH   — t        | d«      xr t        | j                  «      S r®   )ry   rí   rt   r[   s    rP   Úis_compsolidr  �  s   € Ü�3˜	Ó"ÒGÔ':¸3¿;¹;Ó'GÐGrO   c                 óH   — t        | d«      xr t        | j                  «      S r®   )ry   rX   rt   r[   s    rP   Úis_solidr
  ”  rÊ   rO   c                 óH   — t        | d«      xr t        | j                  «      S r®   rÈ   r[   s    rP   Úis_shellr  ˜  rÊ   rO   c                 óH   — t        | d«      xr t        | j                  «      S r®   )ry   rY   rt   r[   s    rP   Úis_facer  œ  ó   € Ü�3˜	Ó"ÒB¤~°c·k±kÓ'BÐBrO   c                 óH   — t        | d«      xr t        | j                  «      S r®   )ry   ró   rt   r[   s    rP   Úis_wirer     r  rO   c                 óH   — t        | d«      xr t        | j                  «      S r®   )ry   rõ   rt   r[   s    rP   Úis_edger  ¤  r  rO   c                 óH   — t        | d«      xr t        | j                  «      S r®   )ry   r÷   rt   r[   s    rP   Ú	is_vertexr  ¨  s   € Ü�3˜	Ó"ÒDÔ'7¸¿¹Ó'DÐDrO   c                 óR   — t        | d«      xr t        | j                  t        «      S r®   )ry   r}   rt   r(   r[   s    rP   Úis_ocp_colorr  ¬  s    € Ü�3˜	Ó"ÒR¤z°#·+±+Ô?QÓ'RÐRrO   c                 óH   — t        | d«      xr t        | j                  «      S r®   )ry   râ   rt   r[   s    rP   Úis_locationr  °  rÏ   rO   c                 óØ   — t        | «      r| j                  €yt        | «      rGt        t	        | «      «      dk(  ryt        t	        | «      «      dk(  rt        t	        | «      d   «      S yy)NTr   rD   F)r³   rt   r  r«   rÑ   Úis_empty_compoundr[   s    rP   r  r  ´  sY   € Ü�#„˜3Ÿ;™;Ð.ØÜ�3ÔÜŒt�C‹y‹>˜QÒØÜ”�c“‹^˜qÒ Ü$¤T¨#£Y¨q¡\Ó2Ð2ààrO   c                 ó    — t        | d«      r| j                  «       S t        | d«      r| j                  «       S t        dt	        | «      › �«      ‚)NÚExtentÚSizezUnknown type )ry   r  r  Ú
ValueErrorr¸   r[   s    rP   Úextent_or_sizer   È  sD   € Üˆs�HÔØ�z‰z‹|ÐÜ	��fÔ	Ø�x‰x‹zÐä˜=¬¨c«¨Ð4Ó5Ð5rO   c              #   óÜ   K  — t        «       }t        j                  | t        |«       t	        dt        |«      dz   «      D ](  }t        j                  |j                  |«      «      –— Œ* y ­w©NrD   )	rC   r3   ÚMapShapes_sr*   Úranger   r6   Ú
Compound_sÚFindKey)rk   Úcompound_mapÚis      rP   Úget_compoundsr)  Ñ  sW   è ø€ Ü-Ó/€LÜ
×Ñ�uœo¨|Ô<ä�1”n \Ó2°QÑ6Ö7ˆÜ×Ñ × 4Ñ 4°QÓ 7Ó8Ó8ñ 8ùó   ‚A*A,c              #   óÜ   K  — t        «       }t        j                  | t        |«       t	        dt        |«      dz   «      D ](  }t        j                  |j                  |«      «      –— Œ* y ­wr"  )	rC   r3   r#  r/   r$  r   r6   ÚSolid_sr&  )rk   Ú	solid_mapr(  s      rP   Ú
get_solidsr.  Ù  sU   è ø€ Ü*Ó,€IÜ
×Ñ�uœl¨IÔ6ä�1”n YÓ/°!Ñ3Ö4ˆÜ�n‰n˜Y×.Ñ.¨qÓ1Ó2Ó2ñ 5ùr*  c              #   óÜ   K  — t        «       }t        j                  | t        |«       t	        dt        |«      dz   «      D ](  }t        j                  |j                  |«      «      –— Œ* y ­wr"  )	rC   r3   r#  r-   r$  r   r6   ÚFace_sr&  )rk   Úface_mapr(  s      rP   Ú	get_facesr2  á  óU   è ø€ Ü)Ó+€HÜ
×Ñ�uœk¨8Ô4ä�1”n XÓ.°Ñ2Ö3ˆÜ�m‰m˜H×,Ñ,¨QÓ/Ó0Ó0ñ 4ùr*  c              #   óÜ   K  — t        «       }t        j                  | t        |«       t	        dt        |«      dz   «      D ](  }t        j                  |j                  |«      «      –— Œ* y ­wr"  )	rC   r3   r#  r1   r$  r   r6   ÚWire_sr&  )rk   Úwire_mapr(  s      rP   Ú	get_wiresr7  é  r3  r*  c              #   óÌ  K  — t        «       }t        j                  | t        |«       |r*t	        «       }t        j
                  | t        t        |«       t        dt        |«      dz   «      D ]t  }t        j                  |j                  |«      «      }|rHj                  |«      }t        |«      dk(  rŒI|t        j                  |j                  «       «      f–— Œq|–— Œv y ­w)NrD   r   )rC   r3   r#  r,   rB   ÚMapShapesAndAncestors_sr-   r$  r   r6   ÚEdge_sr&  ÚFindFromKeyr0  ÚFirst)rk   Ú	with_faceÚedge_mapr1  r(  ÚedgeÚ	face_lists          rP   Ú	get_edgesrA  ñ  s¶   è ø€ Ü)Ó+€HÜ
×Ñ�uœk¨8Ô4áÜ<Ó>ˆÜ×&Ñ& u¬k¼;ÈÔQä�1”n XÓ.°Ñ2Ö3ˆÜ�}‰}˜X×-Ñ-¨aÓ0Ó1ˆáØ ×,Ñ,¨TÓ2ˆIÜ˜iÓ(¨AÒ-ààœŸ™ i§o¡oÓ&7Ó8Ð8Ó8à‹Jñ 4ùs   ‚C"C$c              #   óÜ   K  — t        «       }t        j                  | t        |«       t	        dt        |«      dz   «      D ](  }t        j                  |j                  |«      «      –— Œ* y ­wr"  )	rC   r3   r#  r0   r$  r   r6   ÚVertex_sr&  )rk   Ú
vertex_mapr(  s      rP   Úget_verticesrE    sU   è ø€ Ü+Ó-€JÜ
×Ñ�uœm¨ZÔ8ä�1”n ZÓ0°1Ñ4Ö5ˆÜ�o‰o˜j×0Ñ0°Ó3Ó4Ó4ñ 6ùr*  c                 óŒ  — t        t        | «      d «      �t        | «      }n†t        t        | «      d «      �t        | «      }net        t        | «      d «      �t        | «      }nDt        t	        | «      d «      �t	        | «      }n#t        t        | «      d «      �t        | «      }ng S |D �cg c]  }t        |«      ‘Œ c}S c c}w rK   )Únextr.  r2  r7  rA  rE  ra   )rk   re   rT   s      rP   Úget_downcasted_shaperH    s³   € ô ŒJ�uÓ˜tÓ$Ð0Ü˜%Ó ‰ä	Œi˜Ó Ó	%Ð	1Ü˜Ó‰ä	Œi˜Ó Ó	%Ð	1Ü˜Ó‰ä	Œi˜Ó Ó	%Ð	1Ü˜Ó‰ä	Œl˜5Ó! 4Ó	(Ð	4Ü˜EÓ"‰ð ˆ	á%)Ó*¡T˜cŒH�S�M TÑ*Ð*ùÒ*s   Â,Cc                 ó¦   — t        | «      rt        j                  | «      }n| }|j                  «       |j	                  «       |j                  «       fS rK   )r÷   r	   ÚPnt_sÚXÚYÚZ)Úvertex_or_pntÚps     rP   Ú	get_pointrP  (  s<   € Ü˜Ô&Ü�O‰O˜MÓ*‰àˆØ�C‰C‹E�1—3‘3“5˜!Ÿ#™#›%Ð Ð rO   c                 ó¢   — t        | d«      r| j                  «       S t        | d«      r| j                  «       S t        dt	        | «      › d�«      ‚)NÚto_tupleÚtoTuplezCannot convert z	 to tuple)ry   rR  rS  ÚRuntimeErrorr¸   r[   s    rP   Ú	get_tuplerU  0  sF   € Üˆs�JÔØ�|‰|‹~ÐÜ	��iÔ	 Ø�{‰{‹}Ðä˜_¬T°#«Y¨K°yÐAÓBÐBrO   c                 óV  — | €|€y |} t        | t        «      r| S t        | d«      r 	 t        t        | «      «      }|�||_        |S t        | t        «      r]| j                  «       }t        |j                  «       |j                  «       |j                  «       |€| j                  «       n|f«      }|S t        | t        «      st        | t        t        f«      rt        | |€d«      }|S |«      }|S t        d| › dt        | «      › �«      ‚#  t        | j	                  «       «      }Y ŒíxY w)Nrt   ç      ð?zUnknown color input z ()r}   rE   ry   rÒ   rS  r�   r(   ÚGetRGBÚRedÚGreenÚBlueÚAlphaÚstrrÑ   r  r¸   )ÚcolorÚalphaÚ	def_colorÚrgbaÚocp_rgbs        rP   Úget_rgbarc  9  s&  € Ø€}ØÐØØˆä�%œÔØˆäˆu�iÔ ð	*Üœ˜u›Ó&ˆDð ÐØˆDŒFð& €Kô# 
�EÔ-Ô	.Ø—,‘,“.ˆÜà—‘“Ø—‘“Ø—‘“Ø!& �—‘”°Eð	ó
ˆð €Kô 
�Eœ3Ô	¤:¨e´e¼T°]Ô#CÜ�U 5 =˜CÓ<ˆð
 €Kð 7<Ó<ˆð
 €Kô Ð/°¨w°b¼¸e»¸ÐFÓGÐGøð+	*Ü˜Ÿ™›Ó)ŠDús   §D ÄD(c              #   ó¼   K  — t        | «      }|j                  «       r=t        |j                  «       «      –— |j	                  «        |j                  «       rŒ<y y ­wrK   )r<   ÚMorera   ÚValueÚNext)ÚcompoundÚiterators     rP   Úlist_topods_compoundrj  _  s?   è ø€ Ü˜xÓ(€HØ
�-‰-Œ/Ü�x—~‘~Ó'Ó(Ò(Ø�‰Œð �-‰-�/ùs   ‚AAÁAc                 óh  — g }| D ]¨  }t        |«      rDt        ||«      \  }}t        |«      dk(  r|j                  |d   «       Œ@|j                  |«       ŒR|j                  t	        |j
                  «      «       |€t        |j
                  «      }ŒŽ|t        |j
                  «      k7  sŒ§d}Œª ||fS ©NrD   r   Úmixed)r  Úunroll_compoundr«   Úappendra   rt   rI   )rh  Útypro   ÚoÚunrolleds        rP   rn  rn  f  sš   € Ø€FÛˆÜ�qŒ>Ü+¨A¨sÓ3‰MˆH�cÜ�8‹} Ò!Ø—‘˜h q™kÕ*à—‘˜hÕ'à�M‰Mœ( 1§9¡9Ó-Ô.Øˆ{Ü §	¡	Ó*‘Øœ	 !§)¡)Ó,Ó,Ø‘ð ð �3ˆ;ÐrO   c                 óÆ  — g }t        | «      }|j                  «       rÁt        |j                  «       «      }t	        |«      rDt        ||«      \  }}t        |«      dk(  r|j                  |d   «       nJ|j                  |«       n8|j                  t        |«      «       |€t        |«      }n|t        |«      k7  rd}|j                  «        |j                  «       rŒÁ||fS rl  )
r<   re  ra   rf  rÍ   Úunroll_topods_compoundr«   ro  rI   rg  )rh  rp  ro   ri  rT   rr  s         rP   rt  rt  x  sº   € Ø€Fä˜xÓ(€HØ
�-‰-Œ/Ü�x—~‘~Ó'Ó(ˆä˜cÔ"Ü2°3¸Ó<‰MˆH�cÜ�8‹} Ò!Ø—‘˜h q™kÕ*à—‘˜hÕ'à�M‰Mœ( 3›-Ô(Øˆ{Ü “n‘Øœ	 #›Ò&Ø�Ø�‰Œð �-‰-�/ð  �3ˆ;ÐrO   c                 ó   — t        | «      dk(  S )Nrm  )Úget_compound_type)rh  s    rP   Úis_mixed_compoundrw  �  s   € Ü˜XÓ&¨'Ñ1Ð1rO   c                 óX   — t        | «      rt        | «      \  }}|S t        | «      \  }}|S rK   )rÍ   rt  rn  )rh  Ú_rp  s      rP   rv  rv  “  s4   € Ü˜(Ô#Ü'¨Ó1‰ˆˆ3ð €Jô ! Ó*‰ˆˆ3à€JrO   c                 óp   — t        | «      j                  «       }t        |t        «      r|S |j                  S rK   )r   rù   r}   ÚintÚvalue)ÚfaceÚts     rP   Úget_face_typer  œ  s-   € Ü˜DÓ!×)Ñ)Ó+€AÜ�!”SÔØˆà�w‰wˆrO   c                 ó   — t        | «      S rK   )r   )r}  s    rP   Úget_surfacer�  ¤  s   € Ü˜tÓ$Ð$rO   c                 óp   — t        | «      j                  «       }t        |t        «      r|S |j                  S rK   )r   rù   r}   r{  r|  )r?  r~  s     rP   Úget_edge_typerƒ  ¨  s-   € Ü˜$Ó×'Ñ'Ó)€AÜ�!”SÔØˆà�w‰wˆrO   c                 ó   — t        | «      S rK   )r   )r?  s    rP   Ú	get_curver…  °  s   € Ü˜TÓ"Ð"rO   c                 ó*  — t        | «      r,t        | «      }|j                  «       r|j                  «       S y t	        | «      rBt        j                  | «      }t        |d«      }|j                  «       r	 |j                  «       S y # t        $ r Y y w xY w©Nç�íµ ÷Æ°>)rõ   r   ÚFoundÚPlanerY   r	   Ú	Surface_sr   ÚIsPlanarÚPlnÚAttributeError)rT   ÚfinderÚsurfaceÚchecks       rP   Ú	get_planer’  ´  sˆ   € Ü�cÔÜ)¨#Ó.ˆØ�<‰<Œ>Ø—<‘<“>Ð!ð ô 
˜Ô	Ü×%Ñ% cÓ*ˆÜ'¨°Ó6ˆØ�>‰>ÔðØ—{‘{“}Ð$ð øô "ò Ùðús   Á5B Â	BÂBc                 óR   — t        | j                  «       | j                  «       «      S rK   )r%   ÚLocationÚ	Direction©Úaxiss    rP   Úaxis_to_liner˜  Ç  s   € Ü�$—-‘-“/ 4§>¡>Ó#3Ó4Ð4rO   c                 ó   — t        | |||«      S rK   r'   )ÚrÚgÚbr_  s       rP   Ú	ocp_colorr�  Ð  s   € Ü˜a  A uÓ-Ð-rO   c           	      ó   — t        | t        t        t        f«      r1| j	                  «       | j                  «       | j                  «       }}}n| \  }}}t        t        t        |||«      «      j                  «       «      S rK   )
r}   r$   r!   r   rK  rL  rM  ra   r   ÚVertex)rT   r†   rˆ   r‡   s       rP   Úvertexr   Ô  s_   € Ü�#œ¤¬Ð/Ô0Ø—%‘%“'˜3Ÿ5™5›7 C§E¡E£Gˆaˆ1‰à‰ˆˆ1ˆaäÔ-¬f°Q¸¸1«oÓ>×EÑEÓGÓHÐHrO   c                 ó   — t        | Ž S rK   )r$   )Úxyzs    rP   Úvectorr£  Ý  s   € Ü�3ˆ<ÐrO   c                 ó2   — t        t        | Ž t        |Ž «      S rK   )r   r!   r   ©ÚoriginÚz_dirs     rP   r—  r—  á  s   € Ü”&˜&�/¤6¨5 >Ó2Ð2rO   c                 óÂ   — t        t        t        t        ddd«      t	        ddd«      t	        ddd«      «      «      |  dz  | dz  | dz  |dz  «      j                  «       S )Nr   rD   ç      à?)r   r    r   r!   r   ÚFace)ÚwidthÚheights     rP   Úrectr­  å  sa   € Ü"ÜŒv”f˜Q  1“o¤v¨a°°A£¼¸qÀ!ÀQ»ÓHÓIØ	ˆ�‰Ø�‰Ø	ˆ�#‰Ø�‰ó÷ �dƒfðrO   c           	      ó  — t        | t        t        f«      rt        | Ž } t        |t        t        f«      rt        |Ž }t	        t        t        | j                  «       Ž t        |j                  «       Ž «      j                  «       «      S rK   )r}   rÑ   rÒ   r!   ra   r   rƒ   ÚEdge)ÚstartÚends     rP   rÃ   rÃ   ï  sf   € Ü�%œ$¤˜Ô'Ü˜�ˆÜ�#œœe�}Ô%Ü�cˆlˆÜÜ¤¨¯©«Ð 6¼ÀÇ	Á	ÃÐ8LÓM×RÑRÓTóð rO   c                 ó|   — t        t        | Ž t        |Ž «      }t        ||«      }t	        |«      j                  «       S rK   )r   r!   r   r   r   r¯  )r¦  r§  ÚradiusÚaxÚ	circle_gps        rP   Úcircler¶  ù  s6   € Ü	”˜�¤¨ Ó	0€BÜ˜˜FÓ#€IÜ" 9Ó-×2Ñ2Ó4Ð4rO   c                 ó8  — t        | «      r1t        «       }t        j                  | |«       |j	                  «       }n0t        «       }t        j
                  | |«       |j	                  «       }|j                  «       |j                  «       |j                  «       fS rK   )	rY   r&   r   ÚSurfaceProperties_sÚCentreOfMassÚVolumeProperties_srK  rL  rM  )rT   Ú
propertiesÚcenterÚ
Propertiess       rP   Úcenter_of_massr¾  ÿ  ss   € Ü�cÔÜ!“^ˆ
Ü×%Ñ% c¨:Ô6Ø×(Ñ(Ó*‰ä!“^ˆ
Ü×$Ñ$ S¨*Ô5Ø×(Ñ(Ó*ˆØ�H‰H‹J˜Ÿ™›
 F§H¡H£JÐ/Ð/rO   c                 ó  — t        j                  | «      \  }}}}d||z   z  }d||z   z  }t        «       }t        «       }t	        | «      j                  ||||«       |j                  «       |j                  «       |j                  «       fS )Nr©  )	r   Ú
UVBounds_sr!   r$   r   ÚNormalrK  rL  rM  )	rT   Úu0Úu1Úv0r„   Úur   r¼  Únormals	            rP   Úcenter_of_geometryrÇ    sz   € Ü×)Ñ)¨#Ó.�N€BˆˆB�Øˆr�B‰w‰€AØˆr�B‰w‰€AÜ‹X€FÜ‹X€Fä�3Ó×Ñ˜q ! V¨VÔ4Ø�H‰H‹J˜Ÿ™›
 F§H¡H£JÐ/Ð/rO   c                 óÈ   — t        | |«      }|j                  «        |j                  «       r2|j                  «       }|j	                  d«      }|j                  d«      }fS r"  )r   ÚPerformÚIsDonerf  ÚPointOnShape1ÚPointOnShape2)Úobj1Úobj2ÚdistCalcrG   Úpoint_on_shape1Úpoint_on_shape2s         rP   Údist_shapesrÒ    s_   € Ü)¨$°Ó5€HØ×ÑÔà‡�Ôà—>‘>Ó#ˆð #×0Ñ0°Ó3ˆØ"×0Ñ0°Ó3ˆØ�_ oÐ5Ð5rO   c                 ób   — t        «       }t        j                  | |«       |j                  «       S rK   )r&   r   r¸  ÚMass©rT   r»  s     rP   ÚarearÖ  $  s&   € Ü“€JÜ×!Ñ! # zÔ2Ø�?‰?ÓÐrO   c                 ób   — t        «       }t        j                  | |«       |j                  «       S rK   )r&   r   rº  rÔ  rÕ  s     rP   ÚvolumerØ  *  s&   € Ü“€JÜ× Ñ   jÔ1Ø�?‰?ÓÐrO   c                 óX  — t        | «      }|j                  «       }|j                  «       }|j                  |«      |j                  |«      }}|j	                  «       |j                  «       |j                  «       f|j	                  «       |j                  «       |j                  «       ffS rK   )r   ÚFirstParameterÚLastParameterrf  rK  rL  rM  )rT   ÚcurveÚuminÚumaxÚe1Úe2s         rP   Ú
end_pointsrá  0  s€   € Ü˜cÓ"€EØ×ÑÓ!€DØ×ÑÓ €DØ�[‰[˜Ó §¡¨DÓ 1ˆ€BØ�D‰D‹F�B—D‘D“F˜BŸD™D›FÐ# b§d¡d£f¨b¯d©d«f°b·d±d³fÐ%=Ð=Ð=rO   c                 óŠ   — t        j                  | «      }|j                  «       |j                  «       |j	                  «       fS rK   )r	   rJ  rK  rL  rM  )rT   rO  s     rP   Úpointrã  8  s/   € Ü�‰˜Ó€AØ�C‰C‹E�1—3‘3“5˜!Ÿ#™#›%Ð Ð rO   c                 ó,   — t        j                  | «      S rK   )r	   Ú
IsClosed_sr[   s    rP   Ú	is_closedræ  =  s   € Ü×Ñ Ó$Ð$rO   c                 óp   — t        «       }t        |Ž }t        | Ž }|j                  ||«       t	        |«      S rK   )r#   r"   r$   ÚSetTransformationr5   )r~  ÚqÚTÚQÚVs        rP   Ú	tq_to_locrí  F  s7   € Ü‹	€AÜ�qÐ€AÜ�ˆ
€AØ×Ñ˜˜1ÔÜ˜1ÓÐrO   c                 óB  — | €y| j                  «       }|j                  «       }|j                  «       }|j                  «       |j	                  «       |j                  «       f|j                  «       |j	                  «       |j                  «       |j                  «       ffS )N©NN)ÚTransformationÚTranslationPartÚGetRotationrK  rL  rM  ÚW)rš   rê  r~  ré  s       rP   Ú	loc_to_tqrô  N  sv   € Ø
€{Øà×ÑÓ€AØ	×ÑÓ€AØ	�‰‹€AØ�S‰S‹U�A—C‘C“E˜1Ÿ3™3›5Ð! A§C¡C£E¨1¯3©3«5°!·#±#³%¸¿¹»Ð#?Ð@Ð@rO   c                  ó(   — t        t        «       «      S rK   )r5   r#   rN   rO   rP   Úidentity_locationrö  X  s   € Üœ7›9Ó%Ð%rO   c                 óÈ   — t        | «      }|€| t        «       fS t        | «      }t        |«      }|j	                  |j                  «       «       |j                  |«       ||fS rK   )Úget_locationrö  rp   r{   ÚMoveÚInvertedrz   )rT   rš   rÎ  Útshapes       rP   Úrelocaterü  \  s\   € Ü
�sÓ
€Cà
€{ØÔ%Ó'Ð'Ð'ä˜SÓ!€Dä˜Ó€FØ‡I�Iˆc�l‰l‹nÔØ‡K�K�Ôà�ˆ9ÐrO   c                 óˆ  — | €|rd S t        «       S t        | d«      r| j                  �| j                  }nÍt        | d«      r| j                  }t	        |«      rª |«       }n¢t        | d«      r| j                  }t	        |«      r |«       }nwt        | «      r0t        | j                  d«      r| j                  j                  «       S t        | t        «      r| S t        | «      r| j                  «       }n|rd S t        «       S t        |d«      r|j                  S t        |t        «      r|S t        dt        |«      › �«      ‚)Nrš   ÚlocationÚto_locationr”  rt   zUnknown location typ )rö  ry   rš   rþ  Úcallabler³   rt   r”  r}   r5   r—   Ú	TypeErrorr¸   )rT   Úas_nonerš   s      rP   rø  rø  k  s  € Ø
€{ÙˆtÐ7Ô$5Ó$7Ð7ä�3˜Ô 3§7¡7Ð#6Ø—'‘'‰Cä�S˜*Ô%Ø—,‘,ˆCÜ˜Œ}Ù“e‘ä�S˜-Ô(Ø—,‘,ˆCÜ˜Œ}Ù“e‘ä˜Œ_¤¨¯©°jÔ!AØ—;‘;×'Ñ'Ó)Ð)ä˜œ_Ô-ØˆJä˜SÔ!Ø—,‘,“.‰Cñ #�4Ð;Ô(9Ó(;Ð;äˆs�IÔØ�{‰{ÐÜ	�CœÔ	)Øˆ
äÐ/´°S³	¨{Ð;Ó<Ð<rO   c                 ó   — | €|S |€| S | |z  S rK   rN   )Úloc1Úloc2s     rP   Úmul_locationsr  �  s    € Ø€|ØˆØ€|ØˆØ�$‰;ÐrO   c                 ó4   — t        | j                  «       «      S rK   )r5   rð  )rš   s    rP   Úcopy_locationr  ˜  s   € Ü˜3×-Ñ-Ó/Ó0Ð0rO   c                 ó|   — | j                  «       j                  «       | j                  «       j                  «       dœS )Nr¥  )r”  rƒ   r•  r–  s    rP   Úget_axis_coordr
  œ  s1   € à—-‘-“/×'Ñ'Ó)Ø—‘Ó!×'Ñ'Ó)ñð rO   c                 ó@  — | j                  «       }|j                  «       }|j                  «       }|t        ddd«      z  }|t        ddd«      z  }|t        ddd«      z  }|j	                  «       |j	                  «       |j	                  «       |j	                  «       dœS )NrD   r   )r¦  Úx_dirÚy_dirr§  )rð  rñ  rò  r$   rƒ   )rš   Útrsfr¦  ré  r  r  r§  s          rP   Úget_location_coordr  £  s’   € Ø×ÑÓ€Dà×!Ñ!Ó#€FØ×ÑÓ€Aà”�q˜!˜Q“Ñ€EØ”�q˜!˜Q“Ñ€EØ”�q˜!˜Q“Ñ€Eð —,‘,“.Ø—‘“Ø—‘“Ø—‘“ñ	ð rO   c                 ó„  — t        t        | Ž t        |Ž t        |Ž «      }t        |j	                  «       j                  «       «      }t        |j                  «       j                  «       «      }t        |j                  «       j                  «       «      }t        |j                  «       j                  «       «      }||||fS rK   ©	r   r!   r   r$   r”  ÚXYZÚ
XDirectionÚ
YDirectionr•  )r¦  r  r§  Úax3rq  r†   rˆ   r‡   s           rP   Úloc_to_vecsr  µ  s�   € Ü
”˜�¤&¨% .´&¸%°.Ó
A€CÜˆs�|‰|‹~×!Ñ!Ó#Ó$€AÜˆs�~‰~Ó×#Ñ#Ó%Ó&€AÜˆs�~‰~Ó×#Ñ#Ó%Ó&€AÜˆs�}‰}‹×"Ñ"Ó$Ó%€AØˆq�!�Qˆ<ÐrO   c                 ó   — | j                  «       }| j                  «       j                  «       }| j                  «       j                  «       }t	        |||«      }t        «       }|j                  |«       |j                  «        t        |«      S rK   )	r”  ÚXAxisr•  ÚAxisr   r#   rè  ÚInvertr5   )Úplnrq  r†   r‡   r  r  s         rP   Úloc_from_gp_plnr  ¾  sk   € Ø�‰‹€AØ�	‰	‹×ÑÓ€AØ�‰‹
×ÑÓ€Aä
��A�q‹/€CÜ‹9€DØ×Ñ˜3ÔØ‡K�K„MÜ˜4Ó Ð rO   c                 óv  — t        t        | Ž t        |Ž «      }t        |j	                  «       j                  «       «      }t        |j                  «       j                  «       «      }t        |j                  «       j                  «       «      }t        |j                  «       j                  «       «      }||||fS rK   r  )r¦  r§  r  rq  r†   rˆ   r‡   s          rP   Úaxis_to_vecsr  Ï  sŠ   € Ü
”˜�¤&¨% .Ó
1€CÜˆs�|‰|‹~×!Ñ!Ó#Ó$€AÜˆs�~‰~Ó×#Ñ#Ó%Ó&€AÜˆs�~‰~Ó×#Ñ#Ó%Ó&€AÜˆs�}‰}‹×"Ñ"Ó$Ó%€AØˆq�!�Qˆ<ÐrO   c                 ó>  — t        | «      rt        j                  | «      } n?t        | «      r4t	        «       }|j                  | j                  «       «       t        |«      } t        |«      rt        j                  |«      }n?t        |«      r4t	        «       }|j                  |j                  «       «       t        |«      }| j                  «       }|j                  «       }|j                  «       j                  |j                  «       d«      xrŽ |j                  «       j                  |j                  «       d«      xr^ |j                  «       j                  |j                  «       d«      xr. |j                  «       j                  |j                  «       d«      S r‡  )rY   r	   r‹  râ   r   Ú	Transformrð  r    ÚPositionr”  ÚIsEqualr  r  r•  )Úplane1Úplane2r�   ÚcoordSystem1ÚcoordSystem2s        rP   Úis_same_planer'  Ý  sG  € Ü�fÔÜ×$Ñ$ VÓ,‰Ü	˜FÔ	#Ü‹HˆØ	�‰�F×)Ñ)Ó+Ô,Ü˜“ˆä�fÔÜ×$Ñ$ VÓ,‰Ü	˜FÔ	#Ü‹HˆØ	�‰�F×)Ñ)Ó+Ô,Ü˜“ˆà—?‘?Ó$€LØ—?‘?Ó$€Lð 	×ÑÓ×'Ñ'¨×(=Ñ(=Ó(?ÀÓFò 	MØ×#Ñ#Ó%×-Ñ-¨l×.EÑ.EÓ.GÈÓNò	Mà×#Ñ#Ó%×-Ñ-¨l×.EÑ.EÓ.GÈÓNò	Mð ×"Ñ"Ó$×,Ñ,¨\×-CÑ-CÓ-EÀtÓLð	rO   c                 ó„   — t        | t        t        t        ddd«      t	        ddd«      t	        ddd«      «      «      «      S )Nr   rD   )r'  r    r   r!   r   r[   s    rP   Úis_plane_xyr)  ÷  s:   € ÜØŒV”Fœ6 ! Q¨›?¬F°1°a¸«O¼VÀAÀqÈ!»_ÓMÓNóð rO   c                 ór   — t        | t        t        f«      s| g} t        d„ | D «       «      t        |«      f}|S )Nc              3   óH   K  — | ]  }t        |«      t        |«      f–— Œ y ­wrK   )rV   Úid)Ú.0Úss     rP   Ú	<genexpr>zmake_key.<locals>.<genexpr>
  s   è ø€ Ð8±4¨a”;˜q“>¤2 a£5Ô)±4ùs   ‚ ")r}   rÒ   rÑ   rô  )re   rš   ÚoptimalÚkeys       rP   Úmake_keyr2    s5   € ä�dœU¤D˜MÔ*ØˆvˆäÑ8±4Ó8Ó9¼9ÀS»>Ð
J€CØ€JrO   c                 óh  — t        j                  | «      }t        | t        «      rF|t	        | j                  «       D ��cg c]  \  }}t        |«      t        |«      z   ‘Œ c}}«      z  }|S t        | t        t        f«      r%|t	        | D �cg c]  }t        |«      ‘Œ c}«      z  }|S c c}}w c c}w rK   )
ÚsysÚ	getsizeofr}   ÚdictÚsumÚitemsÚget_sizer«   rÒ   rÑ   )rT   ÚsizeÚkr   r(  s        rP   r9  r9    s–   € Ü�=‰=˜Ó€DÜ�#”tÔØ”°c·i±i´kÔB±k©d¨a°”X˜a“[¤3 q£6Ó)°kÒBÓCÑCˆð €Kô 
�Cœ%¤˜Ô	'Ø”©#Ó.©# Q”X˜a•[¨#Ñ.Ó/Ñ/ˆØ€Kùó Cùâ.s   ¿!B)ÂB/
i   )Úmaxsizer5  c                   óN   — e Zd Zdd„Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Z	dd	„Z
d
„ Zd„ Zy)ÚBoundingBoxNc                 ó„  — || _         |€+dx| _        x| _        x| _        x| _        x| _        | _        nüt        |t        «      rg|j                  | _        |j                  | _        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        n…t        |t        «      r=|d   | _        |d   | _        |d   | _        |d   | _        |d   | _        |d   | _        n8| j                  |«      }|\  | _        | _        | _        | _        | _        | _        | j                  «        y )Nr   ÚxminÚxmaxÚyminÚymaxÚzminÚzmax)r0  r@  rA  rB  rC  rD  rE  r}   r>  r6  Ú_bounding_boxÚ_calc)ÚselfrT   r0  Úbboxs       rP   Ú__init__zBoundingBox.__init__  s  € ØˆŒØˆ;ØTUÐUˆDŒIÐU˜œ	ÐU D¤IÐU°´	ÐU¸D¼IÈÍ	Ü˜œ[Ô)ØŸ™ˆDŒIØŸ™ˆDŒIØŸ™ˆDŒIØŸ™ˆDŒIØŸ™ˆDŒIØŸ™ˆD�IÜ˜œTÔ"Ø˜F™ˆDŒIØ˜F™ˆDŒIØ˜F™ˆDŒIØ˜F™ˆDŒIØ˜F™ˆDŒIØ˜F™ˆD�Ià×%Ñ% cÓ*ˆDØOSÑLˆDŒI�t”y $¤)¨T¬Y¸¼	À4Ä9à�
‰
�rO   c                 ó   — t        |«      S rK   )r¾  )rH  rT   s     rP   Ú_center_of_masszBoundingBox._center_of_mass3  s   € Ü˜cÓ"Ð"rO   c                 ó¼  — t        «       }| j                  r,t        j                  |«       t	        j
                  ||«       nt	        j                  ||«       |j                  «       s*|j                  «       }|d   |d   |d   |d   |d   |d   fS | j                  |«      }|d   |z
  |d   |z   |d   |z
  |d   |z   |d   |z
  |d   |z   f}t        d|«       |S )Nr   é   rD   é   é   é   z
Void Bounding Box)r   r0  r   ÚClean_sr   ÚAddOptimal_sÚAdd_sÚIsVoidÚGetrL  Úprint)rH  rT   ÚtolrI  Úvaluesrû   Úbbs          rP   rF  zBoundingBox._bounding_box6  sé   € Ü‹yˆØ�<Š<Ü×Ñ˜cÔ"Ü×#Ñ# C¨Õ.ä×Ñ˜S $Ô'Ø�{‰{Œ}Ø—X‘X“ZˆFØ˜1‘I˜v a™y¨&°©)°V¸A±YÀÀqÁ	È6ÐRSÉ9ÐUÐUà×$Ñ$ SÓ)ˆAà�!‘�s‘
Ø�!‘�s‘
Ø�!‘�s‘
Ø�!‘�s‘
Ø�!‘�s‘
Ø�!‘�s‘
ðˆBô Ð'¨Ô,ØˆIrO   c                 óD  — | j                   | j                  z
  | _        | j                  | j                  z
  | _        | j                  | j                  z
  | _        | j                  | j                  dz  z   | j                  | j
                  dz  z   | j                  | j                  dz  z   f| _	        t        | j                  | j                   | j                  | j                  | j                  | j                  fD �cg c]  }t        |«      ‘Œ c}«      | _
        y c c}w )Ng       @)rA  r@  ÚxsizerC  rB  ÚysizerE  rD  Úzsizer¼  ÚmaxÚabs)rH  r†   s     rP   rG  zBoundingBox._calcM  sê   € Ø—Y‘Y §¡Ñ*ˆŒ
Ø—Y‘Y §¡Ñ*ˆŒ
Ø—Y‘Y §¡Ñ*ˆŒ
à�I‰I˜Ÿ
™
 SÑ(Ñ(Ø�I‰I˜Ÿ
™
 SÑ(Ñ(Ø�I‰I˜Ÿ
™
 SÑ(Ñ(ð
ˆŒô
 ð —I‘IØ—I‘IØ—I‘IØ—I‘IØ—I‘IØ—I‘Iñó
ñ�Aô �A•ðñ
ó
ˆ�ùò
s   Ã>Dc                 óè   — t        | j                  | j                  z
  «      dk  xrL t        | j                  | j                  z
  «      dk  xr% t        | j
                  | j                  z
  «      dk  S )Ng{®Gáz„?)r`  rA  r@  rC  rB  rE  rD  ©rH  s    rP   Úis_emptyzBoundingBox.is_emptyd  s_   € ä�—‘˜TŸY™YÑ&Ó'¨$Ñ.ò 4Ü�T—Y‘Y §¡Ñ*Ó+¨dÑ2ò4ä�T—Y‘Y §¡Ñ*Ó+¨dÑ2ð	
rO   c           	      ó  — t        t        j                  | j                  | j                  f| j
                  | j                  f| j                  | j                  f«      D �cg c]  }t        | j                  |«      ‘Œ c}«      S c c}w rK   )r_  Ú	itertoolsÚproductr@  rA  rB  rC  rD  rE  rG   r¼  ©rH  r   s     rP   Úmax_dist_from_centerz BoundingBox.max_dist_from_centerk  s{   € Üô #×*Ñ*Ø—Y‘Y §	¡	Ð*Ø—Y‘Y §	¡	Ð*Ø—Y‘Y §	¡	Ð*ôóñ�Aô ˜Ÿ™ aÕ(ðñó	
ð 		
ùòs   Á!Bc                 ó&  — t        t        j                  | j                  | j                  f| j
                  | j                  f| j                  | j                  f«      D �cg c]!  }t        j                  j                  |«      ‘Œ# c}«      S c c}w rK   )r_  re  rf  r@  rA  rB  rC  rD  rE  ÚnpÚlinalgÚnormrg  s     rP   Úmax_dist_from_originz BoundingBox.max_dist_from_originw  s}   € Üô #×*Ñ*Ø—Y‘Y §	¡	Ð*Ø—Y‘Y §	¡	Ð*Ø—Y‘Y §	¡	Ð*ôóñ�Aô —	‘	—‘˜qÕ!ðñó	
ð 		
ùòs   Á!&Bc                 ó‚  — |rt         t        fnt        t         f\  }}t        |t        «      rÍ ||j                  | j                  «      | _         ||j
                  | j
                  «      | _         ||j                  | j                  «      | _         ||j                  | j                  «      | _         ||j                  | j                  «      | _         ||j                  | j                  «      | _	        nµt        |t        «      r£ ||d   | j                  «      | _         ||d   | j
                  «      | _         ||d   | j                  «      | _         ||d   | j                  «      | _         ||d   | j                  «      | _         ||d   | j                  «      | _	        nd‚| j                  «        y )Nr@  rA  rB  rC  rD  rE  zWrong bounding box param)r_  Úminr}   r>  r@  rA  rB  rC  rD  rE  r6  rG  )rH  rZ  ÚminimizeÚlowerÚuppers        rP   ÚupdatezBoundingBox.updateƒ  sB  € Ù%-œœS‘z´C¼°:‰ˆˆuä�bœ+Ô&Ù˜bŸg™g t§y¡yÓ1ˆDŒIÙ˜bŸg™g t§y¡yÓ1ˆDŒIÙ˜bŸg™g t§y¡yÓ1ˆDŒIÙ˜bŸg™g t§y¡yÓ1ˆDŒIÙ˜bŸg™g t§y¡yÓ1ˆDŒIÙ˜bŸg™g t§y¡yÓ1ˆD�IÜ˜œDÔ!Ù˜b ™j¨$¯)©)Ó4ˆDŒIÙ˜b ™j¨$¯)©)Ó4ˆDŒIÙ˜b ™j¨$¯)©)Ó4ˆDŒIÙ˜b ™j¨$¯)©)Ó4ˆDŒIÙ˜b ™j¨$¯)©)Ó4ˆDŒIÙ˜b ™j¨$¯)©)Ó4ˆD�Ià,Ð,à�
‰
�rO   c                 óø   — t        | j                  «      t        | j                  «      t        | j                  «      t        | j                  «      t        | j
                  «      t        | j                  «      dœS )N©r@  rA  rB  rC  rD  rE  )Úfloatr@  rA  rB  rC  rD  rE  rb  s    rP   Úto_dictzBoundingBox.to_dict™  sT   € ä˜$Ÿ)™)Ó$Ü˜$Ÿ)™)Ó$Ü˜$Ÿ)™)Ó$Ü˜$Ÿ)™)Ó$Ü˜$Ÿ)™)Ó$Ü˜$Ÿ)™)Ó$ñ
ð 	
rO   c                 ó�   — d| j                   | j                  | j                  | j                  | j                  | j
                  fz  S )NzB{xmin:%.2f, xmax:%.2f, ymin:%.2f, ymax:%.2f, zmin:%.2f, zmax:%.2f}ru  rb  s    rP   Ú__repr__zBoundingBox.__repr__£  s?   € ØSØ�I‰IØ�I‰IØ�I‰IØ�I‰IØ�I‰IØ�I‰IðW
ñ 
ð 	
rO   ©NF)rˆ  ©F)Ú__name__Ú
__module__Ú__qualname__rJ  rL  rF  rG  rc  rh  rm  rs  rw  ry  rN   rO   rP   r>  r>    s4   „ óò0#óò.
ò.
ò

ò

óò,
ó
rO   r>  )r1  c                 ó–   — t        | t        t        f«      rt        | «      }n| }t	        |€||¬«      S |j                  |«      |¬«      S )N)r0  )r}   rÑ   rÒ   rh   r>  ÚMoved)re   rš   r0  rh  s       rP   Úbounding_boxr�  ®  sM   € ä�$œœu˜Ô&Ü  Ó&‰àˆäØ�KˆÀ'ôð Ø%-§^¡^°CÓ%8À'ôð rO   c                 ój  — | \  }}}}d|z  |z  }d|z  |z  }d|z  |z  }d|z  |z  }	d|z  |z  }
d|z  |z  }d|z  |z  }d|z  |z  }d|z  |z  }t        j                  d|z
  |z
  |	|z
  |
|z   g|	|z   d|z
  |z
  ||z
  g|
|z
  ||z   d|z
  |z
  gg«      }t        j                  ||j                  «      S )NrP  rD   )rj  ÚarrayÚdotrê  )ré  r   r†   rˆ   r‡   ÚwÚx2Úy2Úz2ÚxyÚxzÚyzÚxwÚywÚzwÚRs                   rP   Úrotater�  ¿  sû   € Ø�J€A€qˆ!ˆQØ	
ˆQ‰�‰€BØ	
ˆQ‰�‰€BØ	
ˆQ‰�‰€BØ	
ˆQ‰�‰€BØ	
ˆQ‰�‰€BØ	
ˆQ‰�‰€BØ	
ˆQ‰�‰€BØ	
ˆQ‰�‰€BØ	
ˆQ‰�‰€Bä
�‰à�‰V�b‰[˜"˜r™' 2¨¡7Ð+Ø�"‰W�a˜"‘f˜r‘k 2¨¡7Ð+Ø�"‰W�b˜2‘g˜q 2™v¨™{Ð+ð	
ó	€Aô �6‰6�!�Q—S‘S‹>ÐrO   c                 ó.  — | j                   dk(  ry | j                  dd«      }|€|€|}n$t        j                  |«      }t	        ||«      |z   }t        j
                  |d¬«      }t        j                  |d¬«      }|d   |d   |d   |d   |d   |d   dœS )Nr   éÿÿÿÿrN  r–  rD   rP  ru  )r:  Úreshaperj  Úasarrayr�  ro  r_  )rO  r~  ré  Ún_pr   Ún_tÚbbminÚbbmaxs           rP   Únp_bboxr™  Õ  sŸ   € Ø‡v�v�‚{Øà
�)‰)�B˜Ó
€CØ€y�Q�YØ‰ä�j‰j˜‹mˆÜ�1�c‹N˜SÑ ˆä�F‰F�1˜1Ô€EÜ�F‰F�1˜1Ô€Eà�a‘Ø�a‘Ø�a‘Ø�a‘Ø�a‘Ø�a‘ñð rO   c                 óD   — | j                  «       t        j                  k(  S rK   )ÚOrientationr2   ÚTopAbs_FORWARDr[   s    rP   Ú
is_forwardr�  ì  s   € Ø�?‰?ÓÔ 2× AÑ AÑAÐArO   c                 óz   — t        | t        «      rt        | «      }nt        | «      }t	        j
                  |«      S rK   )r}   r:   r   r
   r   ÚLength_s)Úedge_or_wirerÜ  s     rP   Úlengthr¡  ð  s1   € Ü�,¤Ô,Ü! ,Ó/‰ä% lÓ3ˆÜ×(Ñ(¨Ó/Ð/rO   c                 óô   — t        | t        «      rt        | «      }nt        | «      }t	        j
                  |«      }t	        |||z  |j                  «       «      j                  «       }|j                  |«      S rK   )	r}   r:   r   r
   r   rŸ  rÚ  Ú	Parameterrf  )r   rG   rÜ  ÚlÚ	parameters        rP   Úposition_atr¦  ø  si   € Ü�,¤Ô,Ü! ,Ó/‰ä% lÓ3ˆÜ×%Ñ% eÓ,€AÜ$Øˆq�8‰|˜U×1Ñ1Ó3óç�iƒkð ð �;‰;�yÓ!Ð!rO   c                 óp  — t        | t        «      rt        | «      }nt        | «      }t	        j
                  |«      }t	        |||z  |j                  «       «      j                  «       }t        «       }t        «       }|j                  |||«       t        | «      r|j                  «       }|t        |«      fS rK   )r}   r:   r   r
   r   rŸ  rÚ  r£  r!   r$   ÚD1r�  ÚReversedr   )r   rG   rÜ  r¤  r¥  ÚpntÚvecs          rP   Ú
tangent_atr¬    sš   € Ü�,¤Ô,Ü! ,Ó/‰ä% lÓ3ˆä×%Ñ% eÓ,€AÜ$Øˆq�8‰|˜U×1Ñ1Ó3óç�iƒkð ô ‹(€CÜ
‹(€CØ	‡H�HˆY˜˜SÔ!ä�,ÔØ�l‰l‹nˆØ”˜“ÐÐrO   c                 óÌ   — t        | |«      \  }}t        t        ddd«      |«      }|j                  t        |«      «       t        |j	                  «       «      }t        ||«      S rª   )r¬  r$   r!   rd   r  rÃ   )r   rG   rª  Údirr«  Úpnt2s         rP   Útangent_edge_atr°    sR   € Ü˜,¨Ó1�H€CˆÜ
”˜˜1˜a“ #Ó
&€CØ‡G�GŒF�3‹KÔÜ�#—'‘'“)Ó€DÜ��T‹?ÐrO   c           	      óä  — | €y 	 t        j                  «       }t        j                  | |||t        «       |j                  «       }|S # t        $ rž t        j                  «       5 }t        j                  j                  |d«      }t        j                  | |ddt        «       t        |d«      5 }|j                  «       }d d d «       n# 1 sw Y   nxY wd d d «       Y S # 1 sw Y   Y S xY ww xY w)Nú
shape.brepFÚrb)ÚioÚBytesIOr   ÚWrite_sr   ÚgetvalueÚ	ExceptionÚtempfileÚTemporaryDirectoryÚosÚpathÚjoinÚopenÚread)rk   Ú	trianglesÚnormalsÚbioÚbufferÚ
tmpdirnameÚfilenameÚfds           rP   Ú	serializerÇ  %  sÔ   € Ø€}Øð#Ü�j‰j‹lˆÜ×Ñ˜  Y°Ô9WÔXØ—‘“ˆð €Møô ò #Ü×(Ñ(Ô*¨jÜ—w‘w—|‘| J°Ó=ˆHÜ×ÑØ�x ¨Ô/Môô �h Ô%¨ØŸ™›�÷ &×%Ñ%ú÷ +Ð*ð €M÷ +Ð*ð €Múð#úsC   …AA ÁC/Á%A
C Â/C	Ã 	C Ã	CÃC ÃC/Ã C+	Ã%C/Ã+C/c                 óÀ  — | €y t        «       }	 t        j                  | «      }t        j                  ||«       |S # t
        $ r˜ t        j                  «       5 }t        j                  j                  |d«      }t        |d«      5 }|j                  | «       d d d «       n# 1 sw Y   nxY wt        j                  ||«       d d d «       Y |S # 1 sw Y   Y |S xY ww xY w)Nr²  Úwb)r=   r´  rµ  r   ÚRead_sr¸  r¹  rº  r»  r¼  r½  r¾  Úwrite)rÃ  rk   rÂ  rÄ  rÅ  rÆ  s         rP   ÚdeserializerÌ  8  s½   € Ø€~Øä‹N€Eð-Ü�j‰j˜Ó ˆÜ�‰˜˜sÔ#ð €Løô ò -Ü×(Ñ(Ô*¨jÜ—w‘w—|‘| J°Ó=ˆHÜ�h Ô%¨Ø—‘˜Ô ÷ &×%Ñ%úä�O‰O˜E 8Ô,÷	 +Ð*ð
 €L÷ +Ð*ð
 €Lúð-ús?   �+< ¼CÁ-CÂB!Â	CÂ!B*Â&CÃCÃC	ÃCÃCr{  rï  rK   )rW  )Trz  )FF)ðr´  re  r»  r4  r¹  Úcollections.abcr   Únumpyrj  rL   Ú
cachetoolsr   r   ÚOCP.BinToolsr   r   ÚOCP.Bndr   ÚOCP.BRepr	   ÚOCP.BRepAdaptorr
   r   r   ÚOCP.BRepExtremar   ÚOCP.BRepBndLibr   ÚOCP.BRepBuilderAPIr   r   r   r   r   ÚOCP.BRepGPropr   r   ÚOCP.BRepMeshr   ÚOCP.BRepToolsr   Ú
OCP.GCPntsr   ÚOCP.GeomAbsr   ÚOCP.GeomLibr   ÚOCP.gpr   r   r   r   r   r    r!   r"   r#   r$   r%   Ú	OCP.GPropr&   ÚOCP.Quantityr(   Ú
OCP.StlAPIr)   Ú
OCP.TopAbsr*   r+   r,   r-   r.   r/   r0   r1   r2   Ú
OCP.TopExpr3   r4   Ú
OCP.TopLocr5   Ú
OCP.TopoDSr6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   ÚOCP.TopToolsrB   rC   ÚutilsrE   rF   rG   rH   rI   rQ   rM   Ú
startswithrV   Úhashr\   rC  r:  r5  r0  ÚShell_sr,  ÚCompSolid_sr%  r^   ra   rh   rl   rp   rv   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í   rX   rZ   rY   ró   rõ   r÷   rü   râ   rß   rå   r  r  r  r  r
  r  r  r  r  r  r  r  r  r   r)  r.  r2  r7  rA  rE  rH  rP  rU  rc  rj  rn  rt  rw  rv  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)  r2  r9  ÚcacheÚobjectr>  r�  r�  r™  r�  r¡  r¦  r¬  r°  rÇ  rÌ  rN   rO   rP   Ú<module>rí     s×  ðó" 
Û Û 	Û 
Û Ý $ã Û 
ß 'ß AÝ Ý ÷ñ õ
 7Ý %÷õ ÷ 4Ý 1Ý #Ý +Ý )Ý /÷÷ ÷ ñ õ #Ý +Ý $÷
÷ 
õ 
÷ /Ý &÷÷ ÷ ó ÷÷
 CÕ Bòð ‡?�?×Ñ˜eÔ$ó*ð
 €Kòð �6—?‘?Ø�—‘Ø�—‘Ø�—‘Ø�&—.‘.Ø�&—.‘.Ø�f×(Ñ(Ø�V×&Ñ&ð	€òò
òòò
òòòò1ò0òVò9òBòò6òGòBò#òRò9ò;ò9òOòDòGò
òòò8ò?ò7ò2ò5ò6ò2ò2ò1ò1ò1ò3ò9ò
,ò#ò#ò#òDòGòHòDòDòCòCòCòEòSòGòò(6ò9ò3ò1ò1óò,5ò+ò2!òCó#òLóó$ò.2òòò%òò#òò&5ó.òIòò3òòò5ò	0ò0ò6òòò>ò!ò
%òòAò&òó"=òJò1òòò$ò	!ò"òò4óòñ 	Ð)°XÔ>€ôQ
�&ô Q
ñh ˆ�8Ôòó ðò ò,ò.Bò0ò	"òò(óó&rO   