Ë
    Ûvžj—H  ã                   ó¨  — d Z ddlZddlZddl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mZmZm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#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+ ddl,m-Z-m.Z. 	 ddl/m0Z1 d„ Z2d„ Z3d„ Z4ejj                  jm                  d«      € e2«        dZ7dZ9	 	 	 	 	 d1d„Z:d„ Z;ejj                  jm                  d«      Z<e<€dZ<n e=e<«      dz  dz  Z< ee<e;¬«      Z>d „ Z?d!„ Z@d"„ ZA G d#„ d$«      ZB G d%„ d&«      ZCd2d'„ZD ee>e:¬(«      	 	 	 	 	 d3d)eEd*eEd+eEfd,„«       Z0d4d-„ZFd5d.„ZGd6d/„ZHd0„ ZIy# e8$ r dZ7Y Œ�w xY w)7zTessellator classé    N)ÚLRUCacheÚcached)Ú	BRep_Tool)ÚBRepAdaptor_Curve)ÚBRepGProp_Face)ÚBRepMesh_IncrementalMesh)Ú	BRepTools)ÚGCPnts_QuasiUniformAbscissaÚGCPnts_QuasiUniformDeflectionÚGCPnts_UniformDeflection)Úgp_PntÚgp_Vec)ÚTopAbs_OrientationÚTopAbs_SOLID)ÚTopExp_Explorer)ÚTopLoc_Locationé   )	Úget_edge_typeÚ	get_edgesÚget_face_typeÚ	get_facesÚ	get_pointÚget_verticesÚis_lineÚlengthÚmake_compound)ÚTrace)ÚTimerÚ	round_sig)Ú
tessellatec                  ó*   — dt         j                  d<   y )NÚ1ÚNATIVE_TESSELLATOR©ÚosÚenviron© ó    úk/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/ocp_tessellate/tessellator.pyÚenable_native_tessellatorr*   :   ó   € Ø+.Œ�
‰
Ð'Ò(r(   c                  ó*   — dt         j                  d<   y )NÚ0r#   r$   r'   r(   r)   Údisable_native_tessellatorr.   =   r+   r(   c                  óF   — t         j                  j                  d«      dk(  S )Nr#   r"   )r%   r&   Úgetr'   r(   r)   Úis_native_tessellator_enabledr1   @   s   € Ü�z‰z�~‰~Ð2Ó3°sÑ:Ð:r(   r#   TFzocp_tessellate.logc
                 ó–   — t        | t        t        f«      s| g} |||||f}
|�&t        j	                  |
«      �|j                  d«       |
S )NÚc)Ú
isinstanceÚtupleÚlistÚcacher0   Úupdate)ÚshapeÚ	cache_keyÚ	deviationÚqualityÚangular_toleranceÚcompute_edgesÚcompute_facesÚdebugÚprogressÚshape_idÚkeys              r)   Úmake_keyrD   S   sW   € ô �eœe¤T˜]Ô+Ø�ˆð 	ØØØØð€Cð Ð¤§	¡	¨#£Ð :Ø�‰˜Ôà€Jr(   c                 óì  — t        j                  | «      }t        | t        «      rF|t	        | j                  «       D ��cg c]  \  }}t        |«      t        |«      z   ‘Œ c}}«      z  }|S t        | t        j                  «      r(|| j                  | j                  j                  z  z  }|S t        | t        t        f«      r%|t	        | D �cg c]  }t        |«      ‘Œ c}«      z  }|S c c}}w c c}w ©N)ÚsysÚ	getsizeofr4   ÚdictÚsumÚitemsÚget_sizeÚlenÚnpÚndarrayÚsizeÚdtypeÚitemsizer5   r6   )ÚobjrP   ÚkÚvÚis        r)   rL   rL   t   sÌ   € Ü�=‰=˜Ó€DÜ�#”tÔØ”°c·i±i´kÔB±k©d¨a°”X˜a“[¤3 q£6Ó)°kÒBÓCÑCˆð
 €Kô	 
�CœŸ™Ô	$Ø�—‘˜3Ÿ9™9×-Ñ-Ñ-Ñ-ˆð €Kô 
�Cœ%¤˜Ô	'Ø”©#Ó.©# Q”X˜a•[¨#Ñ.Ó/Ñ/ˆØ€Kùó Cùò /s   ¿!C+ÃC1
ÚOCP_CACHE_SIZE_MBi   i   )ÚmaxsizerH   c                 ó‚   — t        | «      dkD  rt        | «      n| d   }t        |«      t        |«      t	        |«      |dœS )Nr   r   )ÚfacesÚedgesÚverticesÚid)rM   r   r   r   r   )r9   r]   Úcompounds      r)   Úface_mapperr_   ‡   sA   € Ü'*¨5£z°A¢~Œ}˜UÔ#¸5À¹8€Hä˜8Ó$Ü˜8Ó$Ü  Ó*Øñ	ð r(   c                 óT   — g }| D ]  }|j                  t        |«      «       Œ | ||dœS )N)r[   r\   r]   )Úextendr   )r[   r]   r\   Úes       r)   Úedge_mapperrc   ‘   s6   € Ø€HÛˆØ�‰œ Q›Õ(ð ð ØØñð r(   c                 ó   — | |dœS )N©r\   r]   r'   re   s     r)   Úvertex_mapperrf   �   s   € àØñð r(   c                   ót   — e 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„ Zd„ Zd„ Zd„ Zy)ÚTessellatorc                 óž   — || _         g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _	        d | _
        y rF   )rB   Ú	trianglesÚtriangles_per_facer\   Únormalsr[   Úsegments_per_edgeÚobj_verticesÚ
face_typesÚ
edge_typesr9   ©ÚselfrB   s     r)   Ú__init__zTessellator.__init__¥   sR   € Ø ˆŒØˆŒØ"$ˆÔØˆŒØˆŒØˆŒ
Ø!#ˆÔàˆÔØˆŒØˆŒàˆ�
r(   c                 ó–   — d}t        |t        «      }|j                  «       r&|dz  }|j                  «        |j                  «       rŒ&|S )Nr   r   )r   r   ÚMoreÚNext)rr   r9   Úcountrb   s       r)   Únumber_solidszTessellator.number_solids´   s@   € ØˆÜ˜E¤<Ó0ˆØ�f‰fŒhØ�Q‰JˆEØ�F‰FŒHð �f‰f�hð ˆr(   c                 ór  — || _         | j                  |«      }t        |ddd|«      5  t        ||d|d«       d d d «       t	        t
        «      }|r(t        |ddd«      5  | j                  |«       d d d «       |r(t        |ddd«      5  | j                  |«       d d d «       t        t        |«      «      D ]J  \  }	}
|j                  | j                  › d|	› �|
«       | j                  j                  t        |
«      «       ŒL |j                  «        y # 1 sw Y   ŒÞxY w# 1 sw Y   Œ±xY w# 1 sw Y   Œ“xY w)	NÚ zmesh incrementallyé   FTz get nodes, triangles and normalsz	get edgesú/vertices/vertex)r9   rx   r   r   r   ÚLOG_FILEr    r>   Ú	enumerater   ÚvertexrB   rn   ra   r   Úclose)rr   r9   r<   r=   r?   r>   r@   rw   ÚtraceÚindrU   s              r)   ÚcomputezTessellator.compute¼   s  € ð ˆŒ
à×"Ñ" 5Ó)ˆÜØØØ ØØõ
ô % U¨G°UÐ<MÈtÔT÷
ô ”h“ˆáÜ�u˜bÐ"DÀaÕHØ—‘ Ô&÷ Iñ Ü�u˜b +¨qÕ1Ø×"Ñ" 5Ô)÷ 2ô  ¤¨UÓ 3Ö4‰FˆC�Ø�L‰L˜DŸM™M˜?Ð*:¸3¸%Ð@À!ÔDØ×Ñ×$Ñ$¤Y¨q£\Õ2ð 5ð 	�‰�÷7
ð 
ú÷  IÐHú÷ 2Ð1ús#   ¨DÁD!Â	D-ÄDÄ!D*Ä-D6c                 óf  — t        «       }t        «       }t        «       }d}t        t	        | j
                  «      «      D �]ï  \  }}|j                  | j                  › d|› �|«       |j                  «       t        j                  k(  rd\  }}	nd\  }}	|j                  «       t        j                  k(  }
| j                  j                  t        |«      «       t        j                   ||«      }|€Œ²|j#                  «       }g }t%        d|j'                  «       dz   «      D ]?  }|j)                  |j+                  |«      j-                  |«      j/                  «       «       ŒA | j0                  j)                  |«       g }t%        d|j3                  «       dz   «      D ]G  }|j5                  |«      j7                  «       }|j)                  |d   |z   ||   |z   ||	   |z   f«       ŒI | j8                  j)                  |«       | j:                  j                  |j3                  «       «       |j=                  «       rât?        |«      }g }t%        d|j'                  «       dz   «      D ]š  }|jA                  |«      j/                  «       \  }}|jC                  ||||«       |jE                  «       dkD  r|jG                  «        |j)                  |
r|jI                  «       j/                  «       n|j/                  «       «       Œœ | jJ                  j)                  |«       ||j'                  «       z  }�Œò y )Néÿÿÿÿz/faces/faces_)é   r   )r   r†   r   r   )&r   r   r   r~   r   r9   ÚfacerB   ÚOrientationr   ÚTopAbs_REVERSEDÚTopAbs_INTERNALro   Úappendr   r   ÚTriangulation_sÚTransformationÚrangeÚNbNodesra   ÚNodeÚTransformedÚCoordr\   ÚNbTrianglesÚTriangleÚGetrj   rk   Ú
HasUVNodesr   ÚUVNodeÚNormalÚSquareMagnitudeÚ	NormalizeÚReversedrl   )rr   r�   Úp_bufÚn_bufÚloc_bufÚoffsetr‚   r‡   Úi1Úi2ÚinternalÚpolyÚTrsfÚflatrV   ÚcoordÚpropÚurU   s                      r)   r    zTessellator.tessellateè   s¡  € ä“ˆÜ“ˆÜ!Ó#ˆàˆô #¤9¨T¯Z©ZÓ#8×9‰IˆC�Ø�J‰J˜$Ÿ-™-˜¨°c°UÐ;¸TÔBØ×ÑÓ!Ô%7×%GÑ%GÒGØ‘�‘Bà‘��Bà×'Ñ'Ó)Ô-?×-OÑ-OÑOˆHà�O‰O×"Ñ"¤=°Ó#6Ô7ä×,Ñ,¨T°7Ó;ˆDØÑØ×-Ñ-Ó/�ð �Ü˜q $§,¡,£.°1Ñ"4Ö5�AØ—K‘K §	¡	¨!£× 8Ñ 8¸Ó >× DÑ DÓ FÕGð 6à—‘×$Ñ$ TÔ*ð �Ü˜q $×"2Ñ"2Ó"4°qÑ"8Ö9�AØ ŸM™M¨!Ó,×0Ñ0Ó2�EØ—K‘KØ˜q™ FÑ*¨E°"©I¸Ñ,>ÀÀbÁ	ÈFÑ@RÐSõð :ð
 —‘×%Ñ% dÔ+Ø×'Ñ'×.Ñ.¨t×/?Ñ/?Ó/AÔBð —?‘?Ô$Ü)¨$Ó/�DØ�DÜ" 1 d§l¡l£n°qÑ&8Ö9˜Ø#Ÿ{™{¨1›~×3Ñ3Ó5™˜˜1ØŸ™ A q¨%°Ô7Ø ×0Ñ0Ó2°QÒ6Ø!ŸO™OÔ-ØŸ™Ù8@˜EŸN™NÓ,×2Ñ2Ô4ÀeÇkÁkÃmõð :ð —L‘L×'Ñ'¨Ô-à˜$Ÿ,™,›.Ñ(’ñ[ :r(   c                 óð  — t        j                  | j                  «      j                  dd«      }t        j                  | j                  «      j                  dd«      }t        j
                  t        | j                  «      «      j                  dd«      | _        |D ]Q  }||   }|d   |d   z
  }|d   |d   z
  }t        j                  ||«      }|D ]  }| j                  |xx   |z  cc<   Œ ŒS t        t        | j                  «      «      D ]E  }t         j                  j                  | j                  |   «      }	| j                  |xx   |	z  cc<   ŒG | j                  j                  «       | _        y )Nr…   r{   r†   r   r   )rN   Úasarrayr\   Úreshaperj   ÚzerosrM   rl   ÚcrossrŽ   ÚlinalgÚnormÚravel)
rr   r\   rj   Útriangler3   Úv1Úv2ÚnrV   r¯   s
             r)   Ú_compute_missing_normalsz$Tessellator._compute_missing_normals   s&  € Ü—:‘:˜dŸm™mÓ,×4Ñ4°R¸Ó;ˆÜ—J‘J˜tŸ~™~Ó.×6Ñ6°r¸1Ó=ˆ	Ü—x‘x¤ D§M¡MÓ 2Ó3×;Ñ;¸BÀÓBˆŒÛ!ˆHØ˜Ñ"ˆAØ�1‘˜˜!™‘ˆBØ�1‘˜˜!™‘ˆBÜ—‘˜˜RÓ ˆAó �Ø—‘˜Q“ 1Ñ$”ñ ð "ô ”s˜4Ÿ<™<Ó(Ö)ˆAÜ—9‘9—>‘> $§,¡,¨q¡/Ó2ˆDØ�L‰L˜‹O˜tÑ#ŒOð *ð —|‘|×)Ñ)Ó+ˆ�r(   c                 óD  — t        j                  | j                  «      j                  dd«      }t        j                  | j                  «      j                  dd«      }|D ]=  }||   }| j
                  j                  |d   |d   f|d   |d   f|d   |d   fg«       Œ? y )Nr…   r{   r   r   r†   )rN   rª   r\   r«   rj   r[   ra   )rr   r\   rj   r±   r3   s        r)   Ú_compute_missing_edgesz"Tessellator._compute_missing_edges4  s‘   € Ü—:‘:˜dŸm™mÓ,×4Ñ4°R¸Ó;ˆÜ—J‘J˜tŸ~™~Ó.×6Ñ6°r¸1Ó=ˆ	Û!ˆHØ˜Ñ"ˆAØ�J‰J×Ñ  !¡ a¨¡d˜|¨a°©d°A°a±D¨\¸A¸a¹DÀ!ÀAÁ$¸<ÐHÕIñ "r(   c                 óö  — t        t        | j                  d«      «      D �]­  \  }\  }}|j                  | j                  › d|› �|«       | j
                  j                  t        |«      «       g }t        «       }t        j                  ||«      }t        j                  |||«      }|€Œ‹t        |d«      r*t        d|j                  «       dz   «      }	|j                  }
nG|j!                  «       }t        |j#                  «       |j%                  «       dz   «      }	|j&                  }
|j)                  «       }d }|	D ]M  }|j                   |
|«      «      j+                  |«      j-                  «       }|�|j/                  ||f«       |}ŒO | j0                  j/                  |«       | j2                  j                  t5        |«      dz  «       �Œ° t5        | j0                  «      dk(  r| j7                  «        y y )NTú/edges/edges_r�   r   r†   r   )r~   r   r9   ÚedgerB   rp   r‹   r   r   r   rŒ   ÚPolygonOnTriangulation_sÚhasattrrŽ   r�   r�   ÚNodesÚLowerÚUpperÚValuer�   r‘   r’   ra   r[   rm   rM   r·   )rr   r�   r‚   rº   r‡   r[   Úlocr±   r£   ÚnrangeÚindexÚindicesÚtransfr²   Újr³   s                   r)   r>   zTessellator.compute_edges;  s   € Ü!*¬9°T·Z±ZÀÓ+F×!GÑˆC‘�$˜Ø�J‰J˜$Ÿ-™-˜¨°c°UÐ;¸TÔBØ�O‰O×"Ñ"¤=°Ó#6Ô7àˆEÜ!Ó#ˆCÜ ×0Ñ0°°sÓ;ˆHÜ×5Ñ5°d¸HÀcÓJˆDàˆ|Øä�t˜VÔ$Ü˜q $§,¡,£.°1Ñ"4Ó5�ØŸ	™	‘àŸ*™*›,�Ü˜wŸ}™}›°·±³À!Ñ0CÓD�ØŸ™�à×'Ñ'Ó)ˆFØˆBÛ�Ø—]‘]¡5¨£8Ó,×8Ñ8¸Ó@×FÑFÓH�Ø�>Ø—L‘L " b Ô*Ø‘ð	 ð
 �J‰J×Ñ˜eÔ$Ø×"Ñ"×)Ñ)¬#¨e«*¸©/Ö:ð9 "Hô< ˆt�z‰z‹?˜aÒØ×'Ñ'Õ)ð  r(   c                 ó`   — t        j                  | j                  t         j                  ¬«      S ©N©rQ   )rN   rª   r\   Úfloat32©rr   s    r)   r   zTessellator.get_vertices]  s   € Ü�z‰z˜$Ÿ-™-¬r¯z©zÔ:Ð:r(   c                 ó`   — t        j                  | j                  t         j                  ¬«      S rÈ   )rN   rª   rj   Úint32rË   s    r)   Úget_triangleszTessellator.get_triangles`  s   € Ü�z‰z˜$Ÿ.™.´·±Ô9Ð9r(   c                 ó`   — t        j                  | j                  t         j                  ¬«      S rÈ   )rN   rª   rk   rÍ   rË   s    r)   Úget_triangles_per_facez"Tessellator.get_triangles_per_facec  s   € Ü�z‰z˜$×1Ñ1¼¿¹ÔBÐBr(   c                 ó`   — t        j                  | j                  t         j                  ¬«      S rÈ   )rN   rª   ro   rÍ   rË   s    r)   Úget_face_typeszTessellator.get_face_typesf  ó   € Ü�z‰z˜$Ÿ/™/´·±Ô:Ð:r(   c                 ó`   — t        j                  | j                  t         j                  ¬«      S rÈ   )rN   rª   rp   rÍ   rË   s    r)   Úget_edge_typeszTessellator.get_edge_typesi  rÓ   r(   c                 ó°   — t        | j                  «      dk(  r| j                  «        t        j                  | j                  t        j
                  ¬«      S )Nr   rÉ   )rM   rl   rµ   rN   rª   rÊ   rË   s    r)   Úget_normalszTessellator.get_normalsl  s8   € Üˆt�|‰|Ó Ò!Ø×)Ñ)Ô+Ü�z‰z˜$Ÿ,™,¬b¯j©jÔ9Ð9r(   c                 ó`   — t        j                  | j                  t         j                  ¬«      S rÈ   )rN   rª   r[   rÊ   rË   s    r)   r   zTessellator.get_edgesq  s   € Ü�z‰z˜$Ÿ*™*¬B¯J©JÔ7Ð7r(   c                 ó`   — t        j                  | j                  t         j                  ¬«      S rÈ   )rN   rª   rm   rÍ   rË   s    r)   Úget_segments_per_edgez!Tessellator.get_segments_per_edget  s   € Ü�z‰z˜$×0Ñ0¼¿¹ÔAÐAr(   c                 ó`   — t        j                  | j                  t         j                  ¬«      S rÈ   )rN   rª   rn   rÊ   rË   s    r)   Úget_obj_verticeszTessellator.get_obj_verticesw  s   € Ü�z‰z˜$×+Ñ+´2·:±:Ô>Ð>r(   N©TTF)Ú__name__Ú
__module__Ú__qualname__rs   rx   rƒ   r    rµ   r·   r>   r   rÎ   rÐ   rÒ   rÕ   r×   r   rÚ   rÜ   r'   r(   r)   rh   rh   ¤   sc   „ òòð ØØó'òX6)òp,ò(Jò *òD;ò:òCò;ò;ò:ò
8òBó?r(   rh   c                   óV   — e 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y)ÚNativeTessellatorc                 ó    — || _         d | _        y rF   )rB   Úmeshrq   s     r)   rs   zNativeTessellator.__init__|  s   € Ø ˆŒØˆ�	r(   c           
      ó2   — t        |||||dd|«      | _        y )NTr   )Útessellate_crä   )rr   r9   r<   r=   r?   r>   r@   s          r)   rƒ   zNativeTessellator.compute€  s(   € ô !ØØØØØØØØó	
ˆ�	r(   c                 ó.   — | j                   j                  S rF   )rä   r\   rË   s    r)   r   zNativeTessellator.get_vertices”  ó   € Ø�y‰y×!Ñ!Ð!r(   c                 ó.   — | j                   j                  S rF   )rä   rj   rË   s    r)   rÎ   zNativeTessellator.get_triangles—  s   € Ø�y‰y×"Ñ"Ð"r(   c                 ó.   — | j                   j                  S rF   )rä   rk   rË   s    r)   rÐ   z(NativeTessellator.get_triangles_per_faceš  s   € Ø�y‰y×+Ñ+Ð+r(   c                 ó.   — | j                   j                  S rF   )rä   ro   rË   s    r)   rÒ   z NativeTessellator.get_face_types�  ó   € Ø�y‰y×#Ñ#Ð#r(   c                 ó.   — | j                   j                  S rF   )rä   rp   rË   s    r)   rÕ   z NativeTessellator.get_edge_types   rì   r(   c                 ó.   — | j                   j                  S rF   )rä   rl   rË   s    r)   r×   zNativeTessellator.get_normals£  s   € Ø�y‰y× Ñ Ð r(   c                 ó.   — | j                   j                  S rF   )rä   ÚsegmentsrË   s    r)   r   zNativeTessellator.get_edges¦  rè   r(   c                 ó.   — | j                   j                  S rF   )rä   rm   rË   s    r)   rÚ   z'NativeTessellator.get_segments_per_edge©  s   € Ø�y‰y×*Ñ*Ð*r(   c                 ó.   — | j                   j                  S rF   )rä   rn   rË   s    r)   rÜ   z"NativeTessellator.get_obj_vertices¬  s   € Ø�y‰y×%Ñ%Ð%r(   NrÝ   )rÞ   rß   rà   rs   rƒ   r   rÎ   rÐ   rÒ   rÕ   r×   r   rÚ   rÜ   r'   r(   r)   râ   râ   {  sD   „ òð ØØó
ò("ò#ò,ò$ò$ò!ò"ò+ó&r(   râ   c                 ó®   — t        t        | j                  d«      t        | j                  d«      z   t        | j                  d«      z   dz  |z  d«      }|S )Nr{   i,  )r   ÚxsizeÚysizeÚzsize)Úbbr;   r<   s      r)   Úcompute_qualityrø   °  sV   € äÜ	�2—8‘8˜QÓ	¤)¨B¯H©H°aÓ"8Ñ	8¼9ÀRÇXÁXÈqÓ;QÑ	QØ
ñ	à
ñ	ð 	
ó	€Gð €Nr(   )rC   r;   r<   r=   c
           
      óF  — t        | t        t        f«      rt        | «      dk(  r| d   } nt	        d«      ‚t
        r)t        «       r|�|j                  d«       t        |	«      }
n|�|j                  d«       t        |	«      }
|
j                  | |||||«       |
j                  «       |
j                  «       |
j                  «       |
j                  «       |
j                  «       |
j!                  «       |
j#                  «       |
j%                  «       |
j'                  «       dœ	S )Nr   r   z Only single shapes are supportedÚ*Ú+)	r\   rj   rl   r[   rn   ro   rp   rk   rm   )r4   r6   r5   rM   ÚRuntimeErrorÚNATIVEr1   r8   râ   rh   rƒ   r   rÎ   r×   r   rÜ   rÒ   rÕ   rÐ   rÚ   )r9   r:   r;   r<   r=   r?   r>   r@   rA   rB   Útesss              r)   r    r    ¼  s  € ô �%œ$¤˜Ô'Üˆu‹:˜Š?Ø˜!‘H‰EäÐAÓBÐBõ Ô/Ô1ØÐØ�O‰O˜CÔ Ü  Ó*‰àÐØ�O‰O˜CÔ Ü˜8Ó$ˆà‡L�L�˜Ð!2°MÀ=ÐRWÔXà×%Ñ%Ó'Ø×'Ñ'Ó)Ø×#Ñ#Ó%Ø—‘Ó!à×-Ñ-Ó/Ø×)Ñ)Ó+Ø×)Ñ)Ó+à"×9Ñ9Ó;Ø!×7Ñ7Ó9ñð r(   c                 óP  — t        | «      }|rt        «       }n
t        «       }|j                  |||j	                  «       |j                  «       «       |j                  «       st        d«      ‚t        d|j                  «       dz   «      D �cg c]0  }|j                  |j                  |«      «      j                  «       ‘Œ2 }}g }t        t        |«      dz
  «      D ]  }|j                  ||   ||dz      f«       Œ  t        j                   |t        j"                  ¬«      S c c}w )NzDiscretizer not done.r   rÉ   )r   r   r   Ú
InitializeÚFirstParameterÚLastParameterÚIsDoneÚAssertionErrorrŽ   ÚNbPointsrÀ   Ú	Parameterr’   rM   r‹   rN   rª   rÊ   )rº   Ú
deflectionÚquasiÚcurve_adaptatorÚdiscretizerrV   Úpointsr[   s           r)   Údiscretize_edger  í  s  € Ü'¨Ó-€OáÜ3Ó5‰ä.Ó0ˆØ×ÑØØØ×&Ñ&Ó(Ø×%Ñ%Ó'ô	ð ×ÑÔÜÐ4Ó5Ð5ô �q˜+×.Ñ.Ó0°1Ñ4Ô5óá5ˆAð 	×Ñ˜k×3Ñ3°AÓ6Ó7×=Ñ=Õ?Ø5ð ð ð €EÜ”3�v“; ‘?Ö#ˆØ�‰�f˜Q‘i ¨¨A©¡Ð/Õ0ð $ô �:‰:�e¤2§:¡:Ô.Ð.ùòs   Â5D#c                 óD  — g }g }g }g }t        t        «      }t        | «      D ]Ë  \  }}	|j                  |› d|› �|	«       |j	                  t        |	«      «       t        |	|«      }
t        |
«      dk(  rt        |	«      st        |	|dz  d¬«      }
|j                  |
j                  «       «       |j	                  t        |
«      «       t        |	«      D ]  }||vsŒ|j	                  |«       Œ ŒÍ g }t        |«      D ]6  \  }}|j                  |› d|› �|«       |j                  t        |«      «       Œ8 |j                  «        t        j                   |d¬«      t        j                   |d	¬«      t        j                   |d	¬«      t        j                   |d¬«      d
œS )Nr¹   r   é
   F)r  r  r|   rÊ   rÉ   rÍ   )r[   rm   rp   rn   )r   r}   r~   rº   r‹   r   r  rM   r   ra   Úflattenr   r   r   r€   rN   rª   )r[   r  rB   Úd_edgesrm   r\   rp   r�   r‚   rº   ÚdrU   Ú
d_verticess                r)   Údiscretize_edgesr    sk  € Ø€GØÐØ€HØ€Jä”(‹O€Eä˜uÖ%‰	ˆˆTØ�
‰
�h�Z˜}¨S¨EÐ2°DÔ9Ø×Ñœ-¨Ó-Ô.ä˜D *Ó-ˆÜˆq‹6�QŠ;œw tœ}ô   °¸b±ÈÔNˆAà�‰�q—y‘y“{Ô#Ø× Ñ ¤ Q£Ô(ä˜dÖ#ˆAØ˜Ò Ø—‘ Õ"ñ $ð &ð$ €JÜ˜HÖ%‰ˆˆQØ�‰˜�zÐ!1°#°Ð7¸Ô;Ø×Ñœ) A›,Õ'ð &ð 
‡K�K„Mä—‘˜G¨9Ô5ÜŸZ™ZÐ(9ÀÔIÜ—j‘j °7Ô;ÜŸ
™
 :°YÔ?ñ	ð r(   c                 óþ   — g }t        t        «      }t        | «      D ]6  \  }}|j                  |› d|› �|«       |j	                  t        |«      «       Œ8 |j                  «        dt        j                  |d¬«      iS )Nr|   rn   rÊ   rÉ   )	r   r}   r~   r   ra   r   r€   rN   rª   )r\   rB   Ú
n_verticesr�   r‚   r   s         r)   Úconvert_verticesr  3  sq   € Ø€Jä”(‹O€Eä  Ö*‰ˆˆVØ�‰˜�zÐ!1°#°Ð7¸Ô@Ø×Ñœ) FÓ+Õ,ð +ð 
‡K�K„MàœBŸJ™J z¸ÔCÐDÐDr(   c                 ó   — t        j                  g | d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘| d   ‘d¬«      S )	NÚxmaxÚymaxÚzminÚzmaxÚyminÚxminrÊ   rÉ   )rN   rª   )r÷   s    r)   Ú
bbox_edgesr  A  s¨  € Ü�:‰:ðI	
Øˆv‰JðI	
àˆv‰JðI	
ð ˆv‰JðI	
ð ˆv‰Jð	I	
ð
 ˆv‰JðI	
ð ˆv‰JðI	
ð ˆv‰JðI	
ð ˆv‰JðI	
ð ˆv‰JðI	
ð ˆv‰JðI	
ð ˆv‰JðI	
ð ˆv‰JðI	
ð ˆv‰JðI	
ð ˆv‰JðI	
ð ˆv‰JðI	
ð  ˆv‰Jð!I	
ð" ˆv‰Jð#I	
ð$ ˆv‰Jð%I	
ð& ˆv‰Jð'I	
ð( ˆv‰Jð)I	
ð* ˆv‰Jð+I	
ð, ˆv‰Jð-I	
ð. ˆv‰Jð/I	
ð0 ˆv‰Jð1I	
ð2 ˆv‰Jð3I	
ð4 ˆv‰Jð5I	
ð6 ˆv‰Jð7I	
ð8 ˆv‰Jð9I	
ð: ˆv‰Jð;I	
ð< ˆv‰Jð=I	
ð> ˆv‰Jð?I	
ð@ ˆv‰JðAI	
ðB ˆv‰JðCI	
ðD ˆv‰JðEI	
ðF ˆv‰JðGI	
ðH ˆv‰JðII	
ðJ ˆv‰JðKI	
ðL ˆv‰JðMI	
ðN ˆv‰JðOI	
ðP ˆv‰JðQI	
ðR ˆv‰JðSI	
ðT ˆv‰JðUI	
ðV ˆv‰JðWI	
ðX ˆv‰JðYI	
ðZ ˆv‰Jð[I	
ð\ ˆv‰Jð]I	
ð^ ˆv‰Jð_I	
ð` ˆv‰JðaI	
ðb ˆv‰JðcI	
ðd ˆv‰JðeI	
ðf ˆv‰JðgI	
ðh ˆv‰JðiI	
ðj ˆv‰JðkI	
ðl ˆv‰JðmI	
ðn ˆv‰JðoI	
ðp ˆv‰JðqI	
ðr ˆv‰JðsI	
ðt ˆv‰JðuI	
ðv ˆv‰JðwI	
ðx ˆv‰JðyI	
ðz ˆv‰Jð{I	
ð| ˆv‰Jð}I	
ð~ ˆv‰JðI	
ð@ ˆv‰JðAI	
ðB ˆv‰JðCI	
ðD ˆv‰JðEI	
ðF ˆv‰JðGI	
ðH ˆv‰JðII	
ðJ ˆv‰JðKI	
ðL ˆv‰JðMI	
ðN ˆv‰JðOI	
ðP ˆv‰JðQI	
ðT ôWLð Lr(   )TTFNN)çš™™™™™¹?)TTFNrz   )r  T)r  rz   )rz   )JÚ__doc__r%   rG   ÚnumpyrN   Ú
cachetoolsr   r   ÚOCP.BRepr   ÚOCP.BRepAdaptorr   ÚOCP.BRepGPropr   ÚOCP.BRepMeshr   ÚOCP.BRepToolsr	   Ú
OCP.GCPntsr
   r   r   ÚOCP.gpr   r   Ú
OCP.TopAbsr   r   Ú
OCP.TopExpr   Ú
OCP.TopLocr   Ú	ocp_utilsr   r   r   r   r   r   r   r   r   r�   r   Úutilsr   r   Úocp_addons.tessellatorr    ræ   r*   r.   r1   r&   r0   rý   ÚImportErrorr}   rD   rL   Ú
cache_sizeÚintr7   r_   rc   rf   rh   râ   rø   Úfloatr  r  r  r  r'   r(   r)   Ú<module>r4     s“  ðñ" ã 	Û 
ã ß 'Ý Ý -Ý (Ý 1Ý #÷ñ ÷ "ß 7Ý &Ý &÷
÷ 
õ 
õ ß #ðÝAò/ò/ò;ð 
‡z�z‡~�~Ð*Ó+Ð3Ù!Ô#à€Fð  €ð ØØ
ØØóòBð �Z‰Z�^‰^Ð/Ó0€
ØÐØ"�Já�Z“ 4Ñ'¨$Ñ.€JÙ˜¨xÔ8€òò	ò÷T?ñ T?÷n2&ñ 2&ójñ ˆ�8Ôð ØØ
ØØñ-ð ð	-ð
 ð-ð ò-ó ð-ó`/ó<%óPEóMøðs ò à‚Fðús   Â 3E ÅEÅE