Ë
    Å�¢j]  ã                   ó²   — d Z ddl­ 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 dd	lmZ dd
lmZ ddlmZ ddlmZ ddlZd„ Zedk(  r e«        yy)zLEvaluate original CAD surface derivatives; no scan-derived curvature labels.é    )Ú*)ÚSTEPControl_Reader)ÚBRepMesh_IncrementalMesh)ÚTopExp_Explorer)ÚTopAbs_FACE)ÚTopoDS)Ú	BRep_Tool)ÚTopLoc_Location)ÚBRepAdaptor_Surface)ÚBRepLProp_SLProps)ÚcKDTreeNc                  ó"  — t        «       } | j                  t        t        t        j                  d«      «      «      «       | j                  «        | j                  «       }t        |dddd«       t        |t        «      }g }d}d}|j                  «       �r-t        j                  |j                  «       «      }t        j                   |t#        «       «      }t%        |d«      }|��¶|j'                  «       �r¥t)        d|j+                  «       dz   t-        d|j+                  «       dz  «      «      D �]h  }	|j/                  |	«      j1                  «       }
|
D �cg c]  }|j3                  |«      ‘Œ }}t5        d	„ |D «       «      d
z  }t5        d„ |D «       «      d
z  }	 t7        |||dd«      }|j9                  «       s|dz  }Œ‘|j;                  «       }|j=                  «       }|j?                  «       }|jA                  «       }|jC                  «       |jE                  «       |jG                  «       |jC                  «       |jE                  «       |jG                  «       |||g	}tH        jK                  tH        jM                  |«      «      r|jO                  |«       �Œk |dz  }|jS                  «        |j                  «       r�Œ-tH        jU                  |«      }tH        jW                  tX        dz  |d d …d d
…f   |d d …d
d…f   |d d …df   |d d …df   |d d …df   j[                  d«      ¬«       t\        j_                  tX        dz  ja                  «       «      }tH        jc                  |d   «      je                  dd
«      }tH        jc                  |d   «      je                  dd
«      }tg        |d d …d d
…f   «      ji                  |«      \  }}|d
k  tH        jk                  tH        j5                  |||d
d…f   z  d¬«      «      dkD  z  }tm        ||«      D ��cg c]:  \  }}|r1to        t-        tk        ||df   «      tk        ||df   «      «      «      nd ‘Œ< c}}|d<   |jq                  d
«      js                  «       |d<   d|d<   tX        dz  ju                  t\        jw                  |d¬«      «       ty        tH        j{                  tX        d z  «      «      }|j}                  ||df   j[                  d!«      ||df   j[                  d!«      ||j[                  d!«      ¬"«       tI        jV                  tX        d z  fi |¤Ž d#D ])  }t        j€                  tX        |z  t        d$z  |z  «       Œ+ tƒ        d%t…        |«      d&|d'|j5                  «       d(t…        |«      d)tH        j‡                  tH        j-                  tH        jk                  |d d …dd…f   «      d¬«      g d*¢«      d¬+«       y c c}w # tP        $ r	 |dz  }Y �ŒÖw xY wc c}}w ),Nz*.stpg333333Ó?Fgš™™™™™É?Tr   é   éd   c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­w©N)ÚX©Ú.0Úvs     úanalysis/cad_curvature.pyÚ	<genexpr>zmain.<locals>.<genexpr>   s   è ø€ ÐObÑ_aÐZ[ÐPQ×PSÑPS×PUÑ_aùó   ‚é   c              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr   )ÚYr   s     r   r   zmain.<locals>.<genexpr>   s   è ø€ Ðj}Ñz|ÐuvÐkl×knÑkn×kpÑz|ùr   é   gH¯¼šò×z>úcad_surface_curvature.npzé   é   é   Úint64)Ú	points_mmÚparameter_normalsÚ	k1_per_mmÚ	k2_per_mmÚface_idúdesign_graph.jsonÚ	positionséÿÿÿÿÚnormals)Úaxisgš™™™™™é?Úcurvature_max_abs_per_mmÚcurvature_mapping_distance_mmzéOriginal STEP analytic surface derivatives sampled at tessellation UV triangle centroids; nearest sample mapped to simplified graph only within 3 mm and |normal dot| > 0.8. Sharp face boundaries do not have a unique smooth curvature.Úcurvature_note)Ú,Ú:)Ú
separatorsúcad_graph.npzÚfloat32)r%   r&   Úcurvature_validr.   )r(   r3   r   zviewer/explorer_datazsurface samplesÚfailedzmapped graph nodesÚ/zk quantiles)g      à?gÍÌÌÌÌÌì?g®Gáz®ï?)Úflush)Dr   ÚReadFileÚstrÚnextÚDATAÚglobÚTransferRootsÚOneShaper   r   r   ÚMorer   ÚFaceÚCurrentr	   ÚTriangulation_sr
   r   Ú
HasUVNodesÚrangeÚNbTrianglesÚmaxÚTriangleÚGetÚUVNodeÚsumr   ÚIsCurvatureDefinedÚValueÚNormalÚMaxCurvatureÚMinCurvaturer   r   ÚZÚnpÚallÚisfiniteÚappendÚ	ExceptionÚNextÚasarrayÚsavez_compressedÚOUTÚastypeÚjsonÚloadsÚ	read_textÚarrayÚreshaper   ÚqueryÚabsÚzipÚfloatÚroundÚtolistÚ
write_textÚdumpsÚdictÚloadÚupdateÚshutilÚcopy2ÚprintÚlenÚquantile)ÚrÚshapeÚexÚrowsr'   r6   ÚfaceÚtriÚsurfÚiÚidsÚjÚuvÚur   ÚpropsÚpÚnÚk1Úk2ÚrowÚaÚgÚdÚidxÚvalidÚokÚgraphÚnames                                r   Úmainr‹      s*  € ÜÓ€A˜1Ÿ:™:¤c¬$¬t¯y©y¸Ó/AÓ*BÓ&CÔDÀQÇ_Á_ÔEVÐ]^×]gÑ]gÓ]iÐW\Ü˜U 2 e¨B¨tÔ4Ü�uœ[Ó)€B¨r¨$¸!°'À1¸FØ
�'‰'�)Ü�[‰[˜Ÿ™›Ó&ˆ¬9×+DÑ+DÀTÌ/ÓJ[Ó+\ sÔbuÐvzÐ{ó  cAÐ]aØ‰?˜sŸ~™~Õ/Ü˜1˜SŸ_™_Ó.¨qÑ0´°Q°s·±Ó7HÈ#Ñ7MÓ1N×O�Ø—L‘L “O×'Ñ'Ó)�ÁSÓ-IÁSÀ¨c¯j©j¸­mÀS¨"Ð-IÌCÑObÑ_aÓObÓLbÐcdÑLdÈ!ÔgjÑj}Ñz|Ój}Óg}Ð~ÑgÐefð+Ü+¨D°°1°Q°tÓ<�EØ ×3Ñ3Ô5°f¸a±i°fÀØ—k‘k“m�A e§l¡l£n A¸×8JÑ8JÓ8L°RÐPU×PbÑPbÓPdÈRØŸ™›˜qŸs™s›u Q§S¡S£U¨1¯3©3«5°·±³°q·s±s³u¸RÀÀ7ÐK�CÜ—v‘vœbŸk™k¨#Ó.Ô/°·±¸CÔ0@ùð Pð 	�‰
ˆ�2—7‘7”9ð �'‰'Ž)ô 	‡j�j�Ó€A”r×*Ñ*¬3Ð/JÑ+JÐUVÒWXÐY[ÐZ[ÐY[ÐW[ÑU\ÐopÒqrÐstÐuvÐsvÐqvÑowð  CDò  EFð  GHð  EHñ  CIð  TUò  VWð  XYð  VYñ  TZð  cdò  efð  ghð  ehñ  ci÷  cpñ  cpð  qxó  cyÐ*ô  zÜ
‡j�j”#Ð)Ñ)×4Ñ4Ó6Ó7€A¼"¿(¹(À1À[Á>Ó:R×:ZÑ:ZÐ[]Ð^_Ó:`¸Ôce×ckÑckÐlmÐnwÑlxÓcy÷  dBñ  dBð  CEð  FGó  dHÐabÜ
�!’A�b�q�b�D‘'Ó
×
 Ñ
  Ó
#�E€A€c¨1¨Q©3´·±¼¿¹¸qÀÀ3ÀqÈÀsÀ7Á¹|ÐQR¸Ó8SÓ1TÐUWÑ1WÑ*X EÜcfÐgjÐkpÔcqÔ"rÑcqÑ[_Ð[\Ð]_É"¤5¬¬S°°1°Q°3±«[¼¸Q¸qÀ¸s¹V»Ó)EÔ#FÐRVÑ#VÐcqÒ"r€AÐ Ñ!Ø'(§w¡w¨q£z×'8Ñ'8Ó':€AÐ%Ñ&ð D€AÐÑÜÐ	Ñ×(Ñ(¬¯©°AÀ¨Ó)KÔLÜ
Œr�w‰w”s˜?Ñ*Ó+Ó
,€E¨U¯\©\ÀAÀcÈ!ÀeÁHÇOÁOÐT]ÓD^ÐijÐknÐopÐkpÑiq×ixÑixð  zCó  jDð  UZð  yz÷  yAñ  yAð  BKó  yL¨\ô  .MÜ×Ñœ˜OÑ+Ñ4¨eÒ4ÛQˆÔRX×R^ÑR^Ô_bÐcgÑ_gÔhlð  nDñ  iDð  EIñ  iIõ  SJÐQÜ	Ð
œC ›F 8¨FÐ3GÈÏ	É	ËÐTWÔX[Ð\]ÓX^Ð_lÔmo×mxÑmxÔy{×yÑyô  AC÷  AGñ  AGð  HIò  JKð  LMð  NOð  LOð  JOñ  HPó  AQð  WXÐyó  zYò  Zeó  nfð  mqö  rùò' .Jøô !Ò* ¨¡£Ð*üó
 #ss%   ÅW1Æ$W6ÇCW6Ð?X×6XØXÚ__main__)Ú__doc__Ú
ac28_auditÚOCP.STEPControlr   ÚOCP.BRepMeshr   Ú
OCP.TopExpr   Ú
OCP.TopAbsr   Ú
OCP.TopoDSr   ÚOCP.BRepr	   Ú
OCP.TopLocr
   ÚOCP.BRepAdaptorr   ÚOCP.BRepLPropr   Úscipy.spatialr   rl   r‹   Ú__name__© ó    r   Ú<module>rœ      sC   ðÙ RÜ Ý .Ý 1Ý &Ý "Ý Ý Ý &Ý /Ý +Ý !Û òrð: ˆZÒ™�Ðr›   