Ë
    ©eÿg$:  ã                   ó.  — d dl 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 d dlmZ d dlmZ d dl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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( d dl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA d dlBmCZC d dlDmEZE d dlFmGZG d dlHmIZI d dlJmKZK d dlLmMZM d dlNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZV  e j®                  eX«      ZYdZZdeeU   deQfd „Z[d!e	eUeeU   f   defd"„Z\	 dcd#eUd$e]d%e]deeU   fd&„Z^d'eUfd(„Z_d)eSdeVfd*„Z`d)eSdeaeV   fd+„Zb	 ddd,eVd-eeeV      deSfd.„Zc G d/„ d0ed«      Zed1eeV   deeS   fd2„Zfd)eSfd3„Zgd4eVde]fd5„Zhd1eeV   de]fd6„Zid7d8œd9eeR   d:e]deVfd;„Zjd4eVdeVfd<„Zkd4eVdeeR   fd=„Zld>e-deRfd?„Zmd@eRdefdA„Zn e*jÞ                  «       Zpe	e-e4ef   ZqdBe?dCe?de/fdD„ZrdEe?de*fdF„Zs	 	 ded7 e?d d d «       e=d d dG«      dHœdIetdJetdKetdLe]dMe?dNe=de	e,e/f   fdO„Zu	 	 ded7d  e?d d d «       e=d d dG«      dPœdQetdRetdJetdKetdSe]dTetdMe?dNe=de	e.e/f   fdU„Zvd>e-de+fdV„ZwdWdXdYœdZeqd[etd\exd]exdee*   f
d^„ZydWdXdYœd_e+d[etd\exd]exdee*   f
d`„ZzdZeqd[etdee?   fda„Z{dZeqde|e-e	e4ef   f   fdb„Z}y)fé    N)Úchain)Úradians)ÚIterableÚIteratorÚOptionalÚUnionÚcast)ÚBnd_Box)Ú	BRep_Tool©ÚBRepAdaptor_Curve)Ú
BRepBndLib)ÚBRepBuilderAPI_MakeEdgeÚBRepBuilderAPI_MakeFace)ÚBRepFeat)ÚBRepGProp_Face)ÚBRepLib_FindSurface)Ú	BRepToolsÚBRepTools_WireExplorer)ÚConvert_ParameterisationType)ÚGC_MakeArcOfCircleÚGC_MakeArcOfEllipseÚGC_MakeCircleÚGC_MakeEllipseÚGC_MakeSegment)ÚGCPnts_QuasiUniformDeflection)ÚGeom_BezierCurveÚGeom_BSplineCurveÚGeom_CircleÚ
Geom_CurveÚGeom_EllipseÚGeom_TrimmedCurve)ÚGeomAbs_CurveTypeÚGeomAbs_Shape)ÚGeomAdaptor_Curve)ÚGeomConvertÚGeomConvert_ApproxCurveÚ%GeomConvert_BSplineCurveToBezierCurve)Úgp_Ax1Úgp_Ax2Úgp_CircÚgp_DirÚgp_ElipsÚgp_PntÚgp_TrsfÚgp_Vec)ÚShapeExtend_WireData)ÚShapeFix_Face)ÚStandard_Failure)ÚStdFail_NotDone)ÚTColgp_Array1OfPnt)ÚTopAbs_Orientation)ÚTopoDSÚTopoDS_BuilderÚTopoDS_CompoundÚTopoDS_EdgeÚTopoDS_FaceÚTopoDS_IteratorÚTopoDS_ShapeÚTopoDS_Wireg:Œ0âŽyE>ÚshapesÚreturnc                 ó‚   — t        «       }t        «       }|j                  |«       | D ]  }|j                  ||«       Œ |S ©N)r9   r8   ÚMakeCompoundÚAdd)r?   ÚcompoundÚcomp_builderÚshapes       ú[/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/ocpsvg/ocp.pyÚmake_compoundrI   K   sA   € ÜÓ €HÜ!Ó#€LØ×Ñ˜hÔ'ãˆØ×Ñ˜ 5Õ)ð ð €Oó    Úshape_or_shapesc                 óz   — t        «       }t        | t        «      r| gn| D ]  }t        j                  ||«       Œ |S rB   )r
   Ú
isinstancer=   r   ÚAddOptimal_s)rK   ÚbboxrG   s      rH   Úbounding_boxrP   V   sJ   € ô ‹9€Dô �o¤|Ô4ð 
Ñàò	ð 	ô
 	×Ñ  tÕ,ð		ð
 €KrJ   rG   Úwith_orientationÚwith_locationc              #   ó®   K  — t        | ||«      }|j                  «       r4|j                  «       –— |j                  «        |j                  «       rŒ3yy­w)z*Iterate sub shapes with `TopoDS_Iterator`.N)r<   ÚMoreÚValueÚNext)rG   rQ   rR   Úiterators       rH   ÚtopoDS_iteratorrX   c   sA   è ø€ ô ˜uÐ&6¸ÓF€HØ
�-‰-Œ/Ø�n‰nÓÒØ�‰Œð �-‰-�/ùs   ‚AAÁAÚwire_or_edgec                 óD   — | j                  «       t        j                  k(  S rB   )ÚOrientationr6   ÚTopAbs_REVERSED)rY   s    rH   Úis_reversedr]   m   s   € Ø×#Ñ#Ó%Ô);×)KÑ)KÑKÐKrJ   Úfacec                 ó,   — t        j                  | «      S )zFind the outer wire of a face.)r   ÚOuterWire_s)r^   s    rH   Úface_outer_wirera   t   s   € ä× Ñ  Ó&Ð&rJ   c                 óž   — t        | «      }t        | «      D �cg c])  }|j                  |«      rŒt        j                  |«      ‘Œ+ c}S c c}w )zFind the inner wires of a face.)ra   rX   ÚIsSamer7   ÚWire_s)r^   ÚouterÚws      rH   Úface_inner_wiresrg   y   s>   € ä˜DÓ!€EÜ&5°dÔ&;ÓSÑ&; À1Ç8Á8ÈEÅ?ŒF�M‰M˜!ÕÐ&;ÑSÐSùÒSs
   ™A
°A
Ú
outer_wireÚinner_wiresc                 óä   — t        t        | «      d«      }|r!|D ]  }|j                  t        |«      «       Œ t        |j	                  «       «      }|j                  «        |j	                  «       S )z:Make a face from an outer wire and optional inner wire(s).T)r   Úclosed_wirerD   r2   ÚFaceÚFixOrientation)rh   ri   Úface_builderÚ
inner_wireÚface_fixs        rH   Úface_from_wiresrq      sb   € ô +¬;°zÓ+BÀDÓI€LÙÛ%ˆJØ×Ñœ[¨Ó4Õ5ð &ô ˜\×.Ñ.Ó0Ó1€HØ×ÑÔØ�=‰=‹?ÐrJ   c                   ó   — e Zd Zy)ÚInvalidWiresForFaceN)Ú__name__Ú
__module__Ú__qualname__© rJ   rH   rs   rs   �   s   „ ØrJ   rs   Úwiresc              #   ó°  ‡ ‡K  — t        ‰ «      Š ‰ D ]  }t        |g«      rŒt        d«      ‚ t        ‰ «      st        d«      ‚ˆ fd„} |«       D �cg c]  }t        |d«      j	                  «       ‘Œ }}t        |«      dk  rt        t        |«      E d{  –—†  yi Št        |«      D ]^  \  }}t        |«      D ]K  \  }}||k7  sŒt        j                  ||«      sŒ#‰j                  |t        «       «      j                  |«       ŒM Œ` i }t        t        |«      «      D ]£  }‰j                  |t        «       «      }	t        |	«      dz  rEt!        |	ˆfd„¬«      }
|j                  |
g g f«      \  }}|j#                  t%        ||   «      «       Œp|j                  |g g f«      \  }}|j#                  t%        ||   «      «       Œ¥ |j'                  «       D ]t  \  }}t        |«      d	k(  rt        t)        |d
   |«      «      –— Œ/t*        j-                  dt        |«      «       t/        ||«      D ]  }t        t)        |«      «      –— Œ Œv yc c}w 7 �Œ½­w)zJMake faces from unorganized, possibly nested (but non-intersecting) wires.zinvalid wirezwires are not coplanarc               3   óH   •K  — ‰D ]  } t        t        | «      «      –— Œ y ­wrB   )ra   rq   )Úwirerx   s    €rH   Ú	fix_wiresz'faces_from_wire_soup.<locals>.fix_wires�   s!   øè ø€ ÛˆDä!¤/°$Ó"7Ó8Ó8ñ ùs   ƒ"Té   Nc                 óJ   •— t        ‰j                  | t        «       «      «      S rB   )ÚlenÚgetÚset)ÚiÚincluded_ins    €rH   Ú<lambda>z&faces_from_wire_soup.<locals>.<lambda>³   s   ø€ ´C¸¿¹ÈÌ3Ë5Ó8QÔ4RrJ   )Úkeyé   r   z&invalid nesting (found %d outer wires))ÚlistÚare_wires_coplanarrs   r   rl   r   ÚmapÚensure_face_normal_upÚ	enumerater   Ú
IsInside_sÚ
setdefaultr�   ÚaddÚranger€   ÚmaxÚappendra   Úvaluesrq   ÚloggerÚwarningr   )rx   r{   r|   Úfacesr‚   Úface_iÚjÚface_jÚouters_and_innersÚ	ancestorsÚparent_iÚ_ÚinnersÚoutersÚpathrƒ   s   `              @rH   Úfaces_from_wire_soupr    ‘   s  ùè ø€ ô �‹K€EãˆÜ! 4 &Õ)Ü% nÓ5Ð5ð ô ˜eÔ$Ü!Ð":Ó;Ð;ô9ñ
 ENÄKÓPÁK¸DÔ$ T¨4Ó0×5Ñ5Õ7ÀK€EÐPä
ˆ5ƒz�A‚~ÜÔ,¨eÓ4×4Ð4Øà')€KÜ˜uÖ%‰	ˆˆ6Ü" 5Ö)‰IˆAˆvØ�A‹vœ(×-Ñ-¨f°fÕ=Ø×&Ñ& q¬#«%Ó0×4Ñ4°QÕ7ñ *ð &ð
 QSÐä”3�u“:ÖˆØ—O‘O A¤s£uÓ-ˆ	Üˆy‹>˜AÒÜ˜9Ó*RÔSˆHØ)×4Ñ4°XÀÀB¸xÓH‰IˆAˆvØ�M‰Mœ/¨%°©(Ó3Õ4à)×4Ñ4°Q¸¸R¸ÓA‰IˆF�AØ�M‰Mœ/¨%°©(Ó3Õ4ð ð ,×2Ñ2Ö4‰ˆ�Üˆv‹;˜!ÒÜ'¬¸¸q¹	À6Ó(JÓKÓKô �N‰NÐCÄSÈÃ[ÔQÜ˜f fÖ-�Ü+¬O¸DÓ,AÓBÓBñ .ñ 5ùò1 Qð 	5ûs/   „I¢0IÁ!IÁ3#IÂIÂ.IÃIÃE7Ic                 óö   — t        j                  | «      \  }}}}t        «       }t        | «      j	                  ||z   dz  ||z   dz  t        «       |«       |j                  «       dk  r| j                  «        | S )Nr}   r   )r   Ú
UVBounds_sr0   r   ÚNormalr.   ÚZÚReverse)r^   Úu0Úu1Úv0Úv1Únormals         rH   rŠ   rŠ   Å   sg   € Ü×)Ñ)¨$Ó/�N€BˆˆB�Ü‹X€FÜ�4Ó×Ñ  b¡¨A¡°°R±¸1©}¼f»hÈÔOØ‡x�xƒz�A‚~Ø�‰ŒØ€KrJ   r{   c                 ó,   — t        j                  | «      S )zCheck whether a wire is closed.)r   Ú
IsClosed_s)r{   s    rH   Úis_wire_closedr­   Ñ   s   € ä×Ñ Ó%Ð%rJ   c                 ój   — t        | «      } |  xs$ t        t        | «      d¬«      j                  «       S )z!Check whether wires are coplanar.T)Ú	OnlyPlane)r‡   r   rI   ÚFound)rx   s    rH   rˆ   rˆ   Ö   s0   € ä�‹K€Eàˆ	ÒVÔ(¬°uÓ)=ÈÔN×TÑTÓVðrJ   F)ÚclosedÚedgesr±   c                ó˜   — t        t        «       «      }| D ]  }|j                  |d«       Œ |j                  «       }|rt	        |«      S |S )zXMake a single wire from known-continuous edges;
    with no reordering nor any checking.r   )r1   r>   ÚAddOrientedÚWireAPIMakerk   )r²   r±   ÚextendÚedger{   s        rH   Úwire_from_continuous_edgesr¸   Þ   sL   € ô
 "¤+£-Ó0€FÛˆØ×Ñ˜4 Õ#ð ð ×ÑÓ€DÙ &Œ;�tÓÐ0¨DÐ0rJ   c                 ór  — t        | «      r| S t        | «      }	 t        |«      x}}	 	 t        |«      }Œ# t        $ r Y nw xY wn# t        $ r | cY S w xY wt	        t        j                  |«      «      }|j                  |j                  «       «      }t	        t        j                  |«      «      }|j                  |j                  «       «      }|j                  |t        «      sQt        «       }|j                  | d«       |j                  t        t        ||«      «      d«       |j!                  «       } | S )zˆEnsure a wire is closed.
    - if already closed return it untouched.
    - otherwise return a new wire with a closing segment appended.r   )r­   rX   ÚnextÚStopIterationr   r7   ÚEdge_srU   ÚFirstParameterÚLastParameterÚIsEqualÚ
_TOLERANCEr1   r´   Úedge_from_curveÚsegment_curverµ   )r{   ÚitÚ
first_edgeÚ	last_edgeÚadaptorÚstartÚendr¶   s           rH   rk   rk   ë   s  € ô
 �dÔØˆä	˜Ó	€Bð	Ü!% b£Ð)ˆ
�YØðÜ  ›H�	ð øô !ò ÙðúØøÜò àŠðúô  ¤§¡¨jÓ 9Ó:€GØ�M‰M˜'×0Ñ0Ó2Ó3€Eä¤§¡¨iÓ 8Ó9€GØ
�-‰-˜×-Ñ-Ó/Ó
0€Cà�=‰=˜œjÔ)Ü%Ó'ˆØ×Ñ˜4 Ô#Ø×Ñœ?¬=¸¸eÓ+DÓEÀqÔIØ×!Ñ!Ó#ˆà€Ks0   šA ©5 ´A µ	A¾A Á AÁA ÁAÁAc              #   óª   K  — t        | «      }|j                  «       r4|j                  «       –— |j                  «        |j                  «       rŒ3yy­w)z,Iterate edges with `BRepTools_WireExplorer`.N)r   rT   ÚCurrentrV   )r{   Úexplorers     rH   Úwire_explorerrÌ     s<   è ø€ ä% dÓ+€HØ
�-‰-Œ/Ø×ÑÓ Ò Ø�‰Œð �-‰-�/ùs   ‚AAÁAÚcurvec                 ó4   — t        | «      j                  «       S rB   )r   ÚEdge©rÍ   s    rH   rÁ   rÁ     s   € Ü" 5Ó)×.Ñ.Ó0Ð0rJ   r·   c                 ó   — t        | «      S rB   r   )r·   s    rH   Úedge_to_curverÒ     s   € Ü˜TÓ"Ð"rJ   rÇ   rÈ   c                 óŠ   — 	 t        | |«      j                  «       S # t        t        f$ r}t	        d| › d|› �|«      ‚d }~ww xY w)Nz"could not make segment curve from z, )r   rU   r4   r3   Ú
ValueError)rÇ   rÈ   Úes      rH   rÂ   rÂ   )  sQ   € ðQÜ˜e SÓ)×/Ñ/Ó1Ð1øÜÔ-Ð.ò QÜÐ=¸e¸WÀBÀsÀeÐLÈaÓPÐPûðQús   ‚ œA«=½AÚcontrolsc                  óÚ   — t        | «      }d|cxk  r	t        k  sn t        dt        › d�«      ‚t        d|«      }t	        | d«      D ]  \  }}|j                  ||«       Œ t        |«      S )Nr}   z%bezier curve must have between 2 and z control pointsr†   )r   ÚBEZIER_MAX_DEGREErÔ   r5   r‹   ÚSetValuer   )rÖ   ÚnÚpolesr‚   Úcontrols        rH   Úbezier_curverÝ   0  sr   € ÜˆH‹€AØ�Ô&Ô&Ô&ÜØ3Ô4EÐ3FÀoÐVó
ð 	
ô ˜q !Ó$€EÜ ¨!Ö,‰
ˆˆ7Ø�‰�q˜'Õ"ð -ô ˜EÓ"Ð"rJ   r†   )ÚreversedÚcenterrª   ÚradiusÚstart_angleÚ	end_anglerÞ   rß   rª   c                ób  — t        t        t        «       |«      | «      }||k(  rt        |«      j	                  «       }n.t        |t        |«      t        |«      |«      j	                  «       }t        «       }|j                  t        |j                  «       «      «       |j                  |«       |S rB   )r+   r*   r.   r   rU   r   r   r/   ÚSetTranslationr0   ÚXYZÚ	Transform)	rà   rá   râ   rÞ   rß   rª   Ú	circle_gpÚcircleÚtrsfs	            rH   Úcircle_curverê   >  s’   € ô œœv›x¨Ó0°&Ó9€Ið �iÒÜ˜yÓ)×/Ñ/Ó1‰ä#Ø”w˜{Ó+¬W°YÓ-?Àó
ç
‰%‹'ð 	ô ‹9€DØ×Ñœ˜vŸz™z›|Ó,Ô-Ø
×Ñ�TÔà€MrJ   )Ú	clockwiseÚrotationrß   rª   Úmajor_radiusÚminor_radiusrë   rì   c                óö  — || kD  r|| }} d}nd}t        t        t        «       |«      | |«      }	|	j                  t	        «       t        |«      «       ||k(  rt        |	«      j                  «       }
n4t        |	t        ||z
  «      t        ||z
  «      |«      j                  «       }
|
j                  t	        t        «       |«      t        |«      «       |
j                  t        |j                  «       «      «       |
S )NéZ   r   )r-   r*   r.   ÚRotater)   r   r   rU   r   Ú	Translater0   rå   )rí   rî   rá   râ   rë   rì   rß   rª   Úangle_adjustmentÚ
ellipse_gpÚellipses              rH   Úellipse_curverö   X  sá   € ð �lÒ"Ø%1°<�lˆØÑàÐäœ&¤£¨6Ó2°LÀ,ÓO€JØ×Ñ”f“h¤Ð(8Ó 9Ô:ð �iÒÜ  Ó,×2Ñ2Ó4‰ä%ØÜ�KÐ"2Ñ2Ó3Ü�IÐ 0Ñ0Ó1Øó	
÷
 ‰%‹'ð 	ð ‡N�N”6œ&›( FÓ+¬W°XÓ->Ô?Ø×Ñ”f˜VŸZ™Z›\Ó*Ô+à€NrJ   c                 óJ   — t        j                  | t        j                  «      S rB   )r&   ÚCurveToBSplineCurve_sr   ÚConvert_RationalC1rÐ   s    rH   Úcurve_to_bsplinerú   }  s   € Ü×,Ñ,¨UÔ4P×4cÑ4cÓdÐdrJ   é   éd   )Ú
max_degreeÚmax_segmentsÚcurve_or_adaptorÚ	tolerancerý   rþ   c             #   óŠ  K  — t        | «      \  }}|j                  «       }|t        j                  k(  rM|j	                  |j                  «       «      }|j	                  |j                  «       «      }t        ||«      –— y |t        j                  k(  r£t        t        |j                  «       j                  «       «      }	|	j                  |j                  «       |j                  «       «       |	j                  «       |kD  s|	j                  «       r!t!        t#        |	«      |||¬«      E d {  –—†  y |	–— y |t        j$                  k(  rrt        t&        |j)                  «       j                  «       «      }
|
j                  |j                  «       |j                  «       «       t!        |
|||¬«      E d {  –—†  y t#        |«      }
|
j                  |j                  «       |j                  «       «       t+        |t,        «      r|
j/                  |j1                  «       «       t!        |
|||¬«      E d {  –—†  y 7 �Œ7 Œˆ7 Œ
­w)N)rý   rþ   r   )Úcurve_and_adaptorÚGetTyper#   ÚGeomAbs_LinerU   r½   r¾   rÝ   ÚGeomAbs_BezierCurver	   r   ÚBezierÚCopyÚSegmentÚDegreeÚ
IsRationalÚbspline_to_beziersrú   ÚGeomAbs_BSplineCurver   ÚBSplinerM   r   ræ   ÚTrsf)rÿ   r   rý   rþ   rÍ   rÆ   Ú
curve_typerÇ   rÈ   ÚbezierÚbsplines              rH   Úcurve_to_beziersr  �  sà  è ø€ ô 'Ð'7Ó8�N€Eˆ7Ø—‘Ó"€JàÔ&×3Ñ3Ò3Ø—‘˜g×4Ñ4Ó6Ó7ˆØ�m‰m˜G×1Ñ1Ó3Ó4ˆÜ˜5 #Ó&Ó&à	Ô(×<Ñ<Ò	<ÜÔ&¨¯©Ó(8×(=Ñ(=Ó(?Ó@ˆØ�‰�w×-Ñ-Ó/°×1FÑ1FÓ1HÔIØ�=‰=‹?˜ZÒ'¨6×+<Ñ+<Ô+>Ü)Ü  Ó(Ø%Ø)Ø#ô	÷ ñ ð ‹Là	Ô(×=Ñ=Ò	=ÜÔ(¨'¯/©/Ó*;×*@Ñ*@Ó*BÓCˆØ�‰˜×.Ñ.Ó0°'×2GÑ2GÓ2IÔJÜ%ØØ!Ø%Øô	
÷ 	
ñ 	
ô # 5Ó)ˆØ�‰˜×.Ñ.Ó0°'×2GÑ2GÓ2IÔJÜ�gÔ0Ô1Ø×Ñ˜gŸl™l›nÔ-Ü%ØØ!Ø%Øô	
÷ 	
ñ 	
ð1ùð	
øð	
ús8   ‚D*IÄ,H<Ä-B	IÆ6H?Æ7A?IÈ6IÈ7IÈ?IÉIr  c             #   ó"  K  — t        t        | j                  «       «      } | j                  | j	                  «       | j                  «       «       | j                  «       dkD  s| j                  «       r]t        | |t        j                  ||¬«      }|j                  «       r!|j                  «       r|j                  «       } nt        d| › �«      ‚t        | «      }t!        |j#                  «       «      D ]  }|j%                  |dz   «      –— Œ y ­w)Nrû   )ÚMaxSegmentsÚ	MaxDegreezcould not approximate b-spline r†   )r	   r   r  r  r½   r¾   r	  r
  r'   r$   Ú
GeomAbs_C0ÚIsDoneÚ	HasResultÚCurverÔ   r(   r�   ÚNbArcsÚArc)r  r   rý   rþ   ÚapproxÚbez_convertr‚   s          rH   r  r  ´  sÝ   è ø€ ô Ô$ g§l¡l£nÓ5€GØ‡O�O�G×*Ñ*Ó,¨g×.CÑ.CÓ.EÔFØ‡~�~Ó˜!Ò˜w×1Ñ1Ô3Ü(ØØÜ×$Ñ$Ø$Ø ô
ˆð �=‰=Œ?˜v×/Ñ/Ô1Ø—l‘l“n‰GäÐ>¸w¸iÐHÓIÐIä7¸Ó@€KÜ�;×%Ñ%Ó'Ö(ˆØ�o‰o˜a !™eÓ$Ó$ñ )ùs   ‚DDc             #   ó¶  K  — t        | «      \  }}|j                  «       }|j                  «       }|j                  «       }|t        j
                  k(  r'|j                  |«      –— |j                  |«      –— y t        ||||«      }|j                  «       r5t        |j                  «       «      D ]  }|j                  |dz   «      –— Œ y t        d«      ‚­w)Nr†   zcould not convert to polyline)r  r½   r¾   r  r#   r  rU   r   r  r�   ÚNbPointsrÔ   )	rÿ   r   Ú_curverÆ   rÇ   rÈ   r  Úpointsr‚   s	            rH   Úcurve_to_polyliner"  Ï  s¼   è ø€ ô
 (Ð(8Ó9�O€FˆGà×"Ñ"Ó$€EØ
×
Ñ
Ó
!€Cà—‘Ó"€JØÔ&×3Ñ3Ò3Ø�m‰m˜EÓ"Ò"Ø�m‰m˜CÓ Ó ä.¨w¸	À5È#ÓNˆØ�=‰=Œ?Ü˜6Ÿ?™?Ó,Ö-�Ø—l‘l 1 q¡5Ó)Ó)ñ .ô Ð<Ó=Ð=ùs   ‚CCc                 óÀ   — t        | t        «      r| t        | «      fS t        | t        «      r| j                  «       | fS | j                  «       j                  «       | fS rB   )rM   r    r%   r  )rÿ   s    rH   r  r  æ  s`   € ô Ð"¤JÔ/ØÔ!2Ð3CÓ!DÐDÐDÜ	Ð$Ô&7Ô	8Ø×%Ñ%Ó'Ð)9Ð9Ð9à×%Ñ%Ó'×-Ñ-Ó/Ð1AÐAÐArJ   )TTrB   )éh  r$  )~ÚloggingÚ	itertoolsr   Úmathr   Útypingr   r   r   r   r	   ÚOCP.Bndr
   ÚOCP.BRepr   ÚOCP.BRepAdaptorr   ÚOCP.BRepBndLibr   ÚOCP.BRepBuilderAPIr   r   ÚOCP.BRepFeatr   ÚOCP.BRepGPropr   ÚOCP.BRepLibr   ÚOCP.BRepToolsr   r   ÚOCP.Convertr   ÚOCP.GCr   r   r   r   r   Ú
OCP.GCPntsr   ÚOCP.Geomr   r   r   r    r!   r"   ÚOCP.GeomAbsr#   r$   ÚOCP.GeomAdaptorr%   ÚOCP.GeomConvertr&   r'   r(   ÚOCP.gpr)   r*   r+   r,   r-   r.   r/   r0   ÚOCP.ShapeExtendr1   ÚOCP.ShapeFixr2   ÚOCP.Standardr3   ÚOCP.StdFailr4   Ú
OCP.TColgpr5   Ú
OCP.TopAbsr6   Ú
OCP.TopoDSr7   r8   r9   r:   r;   r<   r=   r>   Ú	getLoggerrt   r“   rÀ   rI   rP   ÚboolrX   r]   ra   r‡   rg   rq   rÔ   rs   r    rŠ   r­   rˆ   r¸   rk   rÌ   rÁ   rÒ   ÚMaxDegree_srØ   ÚCurveOrAdaptorrÂ   rÝ   Úfloatrê   rö   rú   Úintr  r  r"  Útupler  rw   rJ   rH   Ú<module>rH     s·  ðÛ Ý Ý ß <Õ <å Ý Ý -Ý %ß OÝ !Ý (Ý +ß ;Ý 4÷õ õ 5÷÷ ÷ 9Ý -÷ñ ÷
	÷ 	ó 	õ 1Ý &Ý )Ý 'Ý )Ý )÷	÷ 	ó 	ð 
ˆ×	Ñ	˜8Ó	$€ð €
ð˜( <Ñ0ð °_ó ð
Ø˜<¨°,Ñ)?Ð?Ñ@ð
àó
ð OSñØðØ+/ðØGKðàˆlÑóðL˜ló Lð'˜+ð '¨+ó 'ð
T˜;ð T¨4°Ñ+<ó Tð MQñØðØ*2°8¸KÑ3HÑ*Iðàóô	˜*ô 	ð1C ¨Ñ 5ð 1C¸(À;Ñ:Oó 1Cðh ó ð&˜ð &¨ó &ð
˜h {Ñ3ð ¸ó ð 5:ò
1Ø�KÑ ð
1Ø-1ð
1àó
1ð �kð   kó  ðF˜ð ¨°Ñ(=ó ð1˜:ð 1¨+ó 1ð#˜ð #Ð(9ó #ð 1Ð$×0Ñ0Ó2Ð à�zÐ#4Ð6GÐGÑH€ðQ˜ð Q fð QÐ1Bó Qð#˜Fð #Ð'7ó #ð  Øðð
 Ù˜A˜q !“_Ù˜A˜q !“_òØðàðð ðð
 ðð ðð ðð ˆ;Ð)Ð)Ñ*óð: Øð	"ð ØÙ˜A˜q !“_Ù˜A˜q !“_ò"Øð"àð"ð ð"ð ð	"ð ð"ð ð"ð ð"ð ð"ð ˆ<Ð*Ð*Ñ+ó"ðJe˜Jð eÐ+<ó eð Øò0
Ø$ð0
ð ð0
ð ð	0
ð
 ð0
ð ÐÑó0
ðn Øò%Øð%ð ð%ð ð	%ð
 ð%ð ÐÑó%ð6>Ø$ð>ð ð>ð ˆfÑó	>ð.BØ$ðBà
ˆ:�uÐ.Ð0AÐAÑBÐBÑCôBrJ   