Ë
    Ûvžj�
 ã                   óL  — d Z ddlZddlZddlm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mZmZmZmZ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 m!Z!m"Z"m#Z# i a$dddddœa%d„ Z&d„ Z'd„ Z( G d„ d«      Z)e
jT                   G d„ de
jV                  «      «       Z, G d„ d«      Z-y)z7This module is the Python part of the CAD Viewer widgeté    N)ÚPath)Údedent)Úembed_minimal_htmlÚdependency_state)ÚUnicodeÚDictÚListÚTupleÚIntegerÚFloatÚAnyÚBoolÚEnumÚCallableÚobserve)ÚHTMLÚupdate_display)ÚParseExceptioné   )Ú
get_parserÚto_jsonÚbsphereÚ	normalizeÚRÚCÚEÚ1)r   r   r   r   c                 óF   — | j                  «       D ]  \  }}|t        |<   Œ y ©N)ÚitemsÚCOLLAPSE)ÚcollapseÚkÚvs      úi/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/cad_viewer_widget/widget.pyÚ_set_collapser&   *   s"   € ð —‘Ö ‰ˆˆ1ØŒ�Šñ !ó    c                 ó,   — t         j                  | «      S r   )ÚVIEWERÚget)Úid_s    r%   Úget_viewer_by_idr,   1   s   € Ü�:‰:�c‹?Ðr'   c                  ó   — t         S r   )r)   © r'   r%   Úget_viewers_by_idr/   5   s   € Ü€Mr'   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚAnimationTrackaL	  
    Defining a three.js animation track.

    Parameters
    ----------
    path : string
        The path (or id) of the cad object for which this track is meant.
        Usually of the form `/top-level/level2/...`
    action : {"t", "tx", "ty", "tz", "q", "rx", "ry", "rz"}
        The action type:

        - "tx", "ty", "tz" for translations along the x, y or z-axis
        - "t" to add a position vector (3-dim array) to the current position of the CAD object
        - "rx", "ry", "rz" for rotations around x, y or z-axis
        - "q" to apply a quaternion to the location of the CAD object
    times : list of float or int
        An array of floats describing the points in time where CAD object (with id `path`) should be at the location
        defined by `action` and `values`
    values : list of float or int
        An array of same length as `times` defining the locations where the CAD objects should be according to the
        `action` provided. Formats:

        - "tx", "ty", "tz": float distance to move
        - "t": 3-dim tuples or lists defining the positions to move to
        - "rx", "ry", "rz": float angle in degrees
        - "q" quaternions of the form (x,y,z,w) the represent the rotation to be applied

    Examples
    --------
    ```
    AnimationTrack(
        '/bottom/left_middle/lower',                                # path
        'rz',                                                       # action
        [0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0],              # times (seconds)
        [-15.0, -15.0, -15.0, 9.7, 20.0, 9.7, -15.0, -15.0, -15.0]  # angles
    )

    AnimationTrack(
        'base/link_4_6',                                            # path
        't',                                                        # action
        [0.0, 1.0, 2.0, 3.0, 4.0],                                  # times (seconds)
        [[0.0, 0.0, 0.0], [0.0, 1.9509, 3.9049],
         [0.0 , -3.2974, -16.7545], [0.0 , 0.05894 , -32.0217],
         [0.0 , -3.2212, -13.3424]]                                 # 3-dim positions
    )
    ```

    See also
    --------

    - [three.js NumberKeyframeTrack](https://threejs.org/docs/index.html?q=track#api/en/animation/tracks/NumberKeyframeTrack)
    - [three.js QuaternionKeyframeTrack](https://threejs.org/docs/index.html?q=track#api/en/animation/tracks/QuaternionKeyframeTrack)

    c                 ó    — t        |«      t        |«      k7  rt        d«      ‚|| _        || _        || _        || _        t        |«      | _        y )Nz8Parameters 'times' and 'values' need to have same length)ÚlenÚ
ValueErrorÚpathÚactionÚtimesÚvaluesÚlength)Úselfr5   r6   r7   r8   s        r%   Ú__init__zAnimationTrack.__init__s   sE   € Üˆu‹:œ˜V›Ò$ÜÐWÓXÐXØˆŒ	ØˆŒØˆŒ
ØˆŒÜ˜%“jˆ�r'   c                 ó‚   ‡— ˆfd„Š| j                   | j                   ‰| j                  «       ‰| j                  «      gS )zã
        Create an array representation of the animation track

        Returns
        -------
        array-like
            The 4 dim array comprising of the instance variables `path`, `action`, `times` and `values`
        c                 ó¾   •— t        | t        j                  «      r| j                  «       S t        | t        t
        f«      r| D �cg c]
  } ‰|«      ‘Œ c}S | S c c}w r   )Ú
isinstanceÚnpÚndarrayÚtolistÚlistÚtuple)ÚobjÚsubarrayrA   s     €r%   rA   z'AnimationTrack.to_array.<locals>.tolist†   sO   ø€ Ü˜#œrŸz™zÔ*Ø—z‘z“|Ð#Ü˜C¤$¬ Ô/Ù9<Ó=¹¨X™˜xÕ(¸Ñ=Ð=à�
ùò >s   ÁA)r5   r6   r7   r8   )r:   rA   s    @r%   Úto_arrayzAnimationTrack.to_array|   s3   ø€ ô	ð —	‘	˜4Ÿ;™;©¨t¯z©zÓ(:¹FÀ4Ç;Á;Ó<OÐPÐPr'   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r;   rF   r.   r'   r%   r1   r1   :   s   „ ñ5òn!óQr'   r1   c                   ó¦  — e Zd ZdZ ed«      j                  d¬«      Z ed«      j                  d¬«      Z ed«      j                  d¬«      Z ed«      j                  d¬«      Z	 ed«      j                  d¬«      Z
 ed«      j                  d¬«      Z ed¬«      j                  d¬«      Z	  ed¬«      j                  d¬«      Z	  ed¬«      j                  d¬«      Z	  e«       j                  d¬«      Z	  ed¬«      j                  d¬«      Z	  ed¬«      j                  d¬«      Z	  edd	¬
«      j                  d¬«      Z	  ed¬«      j                  d¬«      Z	  edd	¬
«      j                  d¬«      Z	  edd	¬
«      j                  d¬«      Z	  e e e«        e«       «      d¬«      j                  d¬«      Z	  ed¬«      j                  de¬«      Z	  e e e«        e«       «      d¬«      j                  d¬«      Z	  e e e«        e«       «      d¬«      j                  d¬«      Z	  e d¬«      j                  d¬«      Z!	  edd	¬
«      j                  d¬«      Z"	  edd	¬
«      j                  d¬«      Z#	  edd	¬
«      j                  d¬«      Z$	  edd	¬
«      j                  d¬«      Z%	  e«       j                  d¬«      Z&	  e«       j                  d¬«      Z'	  edd	¬
«      j                  d¬«      Z(	  edd	¬
«      j                  d¬«      Z)	  e e«        e«        e«       d¬«      j                  d¬«      Z*	  edd	¬
«      j                  d¬«      Z+	  edd	¬
«      j                  d¬«      Z,	  ed¬«      j                  d¬«      Z-	  edd	¬
«      j                  d¬«      Z.	  edd	¬
«      j                  d¬«      Z/	  e0g d¢dd	¬
«      j                  d¬«      Z1	  ed¬«      j                  d¬«      Z2	  edd	¬
«      j                  d¬«      Z3	  edd	¬
«      j                  d¬«      Z4	  edd	¬
«      j                  d¬«      Z5	  edd	¬
«      j                  d¬«      Z6	  edd	¬
«      j                  d¬«      Z7	  edd	¬
«      j                  d¬«      Z8	  e0g d¢d¬«      j                  d¬«      Z9	  edd	¬
«      j                  d¬«      Z:	  edd	¬
«      j                  d¬«      Z;	  e e«        e«        e«       dd	¬
«      j                  d¬«      Z<	  e e«        e«        e«       dd	¬
«      j                  d¬«      Z=	  e e«        e«        e«       dd	¬
«      j                  d¬«      Z>	  edd	¬
«      j                  d¬«      Z?	  edd	¬
«      j                  d¬«      Z@	  edd	¬
«      j                  d¬«      ZA	  edd	¬
«      j                  d¬«      ZB	  e0g d¢dd	¬
«      j                  d¬«      ZC	  e e«        e«        e«       d¬«      j                  d¬«      ZD	  e e«        e«        e«        e«       d¬«      j                  d¬«      ZE	  e e«        e«        e«       d¬«      j                  d¬«      ZF	  ed¬«      j                  d¬«      ZG	  ed¬«      j                  d¬«      ZH	  ed¬«      j                  d¬«      ZI	  ed¬«      j                  d¬«      ZJ	  ed¬«      j                  d¬«      ZK	  e e«        eL«       dd¬«      j                  d¬«      ZM	  edd¬«      j                  d¬«      ZN	  eddd	¬«      j                  d¬«      ZO	  edd	¬
«      j                  d¬«      ZP	  edd	¬
«      j                  d¬«      ZQ	  ed¬«      j                  d¬«      ZR	  ed¬«      j                  d¬«      ZS	  e d¬«      j                  d¬«      ZT	  ed¬«      j                  d¬«      ZU	  eVd¬«      ZW eXd«      d„ «       ZY eXd«      d„ «       ZZ eXd«      d„ «       Z[y	)ÚCadViewerWidgetzThe CAD Viewer widget.ÚCadViewerViewT)ÚsyncÚCadViewerModelzcad-viewer-widgetz3.0.2)Ú
allow_noneN)rP   Údefault_value)rN   r   )r   r   r   r   )ÚtreeÚclipÚmaterial)ÚresetÚkeepÚcenter)Ú	key_traitÚvalue_traitrP   Ú	read_only)rP   rZ   F)ÚdefaultrP   rQ   Úresultc                 ó2  — |d   ��t        j                  |d   «      }|j                  d«      �/d|d   › d|d   › d|d	   › d
�}t        t	        |«      |d   ¬«       y| j
                  �Ot        | j
                  «      r:| j                  t        j                  |d   j                  d«      d   «      «       yt        |d   d«      5 }|j                  t        j                  |d   j                  d«      d   «      «       ddd«       yy# 1 sw Y   yxY w)aÜ  
        Handles changes in the observed trait and processes the new data accordingly.

        Parameters:
        change (dict): A dictionary containing information about the change.
                       Expected to have a "new" key with a JSON string value.

        The function performs the following actions based on the content of the "new" key:
        - If "display_id" is present in the data, it updates an HTML display with an image.
        - If "display_id" is not present and `self.test_func` is callable, it calls `self.test_func` with the decoded image data.
        - If "display_id" is not present and `self.test_func` is not callable, it writes the decoded image data to a file specified by "filename".
        ÚnewNÚ
display_idz
<img src="Úsrcz	" width="Úwidthzpx" height="Úheightzpx"/>)r_   Ú,r   ÚfilenameÚwb)ÚorjsonÚloadsr*   r   r   Ú	test_funcÚcallableÚbase64Ú	b64decodeÚsplitÚopenÚwrite)r:   ÚchangeÚdataÚhtmlÚfds        r%   ÚfunczCadViewerWidget.funcŒ  sÿ   € ð �%‰=Ñ$Ü—<‘<  u¡Ó.ˆDà�x‰x˜Ó%Ð1Ø% d¨5¡k ]°)¸DÀ¹M¸?È,ÐW[Ð\dÑWeÐVfÐfkÐn�Üœt D›z°d¸<Ñ6HÖIà—>‘>Ð-´(¸4¿>¹>Ô2Jà—N‘N¤6×#3Ñ#3°D¸±K×4EÑ4EÀcÓ4JÈ1Ñ4MÓ#NÕOä˜d :Ñ.°Ô5¸ØŸ™¤×!1Ñ!1°$°u±+×2CÑ2CÀCÓ2HÈÑ2KÓ!LÔM÷ 6Ð5ð %÷ 6Ð5ús   Ã	:DÄDÚ
activeToolc                 óX   — |d   r%| j                  | j                  d|d   i«      \  }}y y )Nr^   rt   )Úmeasure_callbackÚid©r:   ro   Ústatusr\   s       r%   Úactive_toolzCadViewerWidget.active_tool¨  s4   € à�%Š=Ø!×2Ñ2Ø—‘˜,¨¨u©Ð6ó‰NˆF‘Fð r'   ÚselectedShapeIDsc                 ó   — |d   r‰| j                  | j                  d|d   i«      \  }}|dk(  rSt        j                  |«      }|j	                  d«      �|d   | _        y |j	                  d«      �t        d|d   «       y y t        d|«       y y )Nr^   r{   éÈ   ÚsuccessÚerrorzError:)rv   rw   rf   rg   r*   ÚmeasureÚprintrx   s       r%   Úselected_shape_idsz"CadViewerWidget.selected_shape_ids¯  s•   € à�%Š=Ø!×2Ñ2Ø—‘Ð,¨f°U©mÐ<ó‰NˆF�Fð ˜Š}ÜŸ™ fÓ-�Ø—:‘:˜iÓ(Ð4Ø#)¨)Ñ#4�D•LØ—Z‘Z Ó(Ð4Ü˜( F¨7¡OÕ4ð 5ô �h Õ'ð r'   )\rG   rH   rI   rJ   r   ÚtagÚ
_view_nameÚ_model_nameÚ_view_moduleÚ_model_moduleÚ_view_module_versionÚ_model_module_versionrw   ÚtitleÚanchorr   Ú	cad_widthrb   Ú
tree_widthr   Úaspect_ratioÚthemer   ÚpinningÚnew_tree_behaviorr   r
   Úkeymapr   ÚshapesÚstatesÚstate_updatesr	   ÚtracksÚtimeitÚtoolsÚglassÚorthoÚcontrolÚupÚaxesÚaxes0ÚgridÚcenter_gridÚexplodeÚticksÚtransparentÚblack_edgesr   r"   Ú
normal_lenÚdefault_edgecolorÚdefault_opacityÚambient_intensityÚdirect_intensityÚ	metalnessÚ	roughnessÚtabÚclip_intersectionÚclip_planesÚclip_normal_0Úclip_normal_1Úclip_normal_2Úclip_slider_0Úclip_slider_1Úclip_slider_2Úclip_object_colorsÚreset_cameraÚpositionÚ
quaternionÚtargetÚzoomÚ
zoom_speedÚ	pan_speedÚrotate_speedÚanimation_speedr   ÚlastPickr\   ÚdisposedÚ
initializeÚdebugÚimage_idrt   r{   r€   r   rv   r   rs   rz   r‚   r.   r'   r%   rL   rL   ‘   sâ  „ ñ !á˜Ó)×-Ñ-°4Ð-Ó8€JÙÐ*Ó+×/Ñ/°TÐ/Ó:€KÙÐ.Ó/×3Ñ3¸Ð3Ó>€LÙÐ/Ó0×4Ñ4¸$Ð4Ó?€MÙ" 7Ó+×/Ñ/°TÐ/Ó:ÐÙ# GÓ,×0Ñ0°dÐ0Ó;Ðñ
 
˜DÔ	!×	%Ñ	%¨4Ð	%Ó	0€BØ?ñ ˜tÔ$×(Ñ(¨dÐ(Ó3€EØgá Ô%×)Ñ)¨tÐ)Ó4€FØpá“	—‘ 4�Ó(€IØSá Ô%×)Ñ)¨tÐ)Ó4€FØ7á DÔ)×-Ñ-°4Ð-Ó8€JØ/á D¸Ô=×AÑAÀtÐAÓL€LØ%á˜tÔ$×(Ñ(¨dÐ(Ó3€EØBá˜d°$Ô7×;Ñ;ÀÐ;ÓF€GØ7á¨¸DÔA×EÑEÈ4ÐEÓPÐØiñ ‘%™›	¡7£9Ó-¸$Ô?×CÑCÈÐCÓN€FØqá˜TÔ"×&Ñ&¨D¸'Ð&ÓB€FØ3á‘%™›	¡7£9Ó-¸$Ô?×CÑCÈÐCÓN€Fð Aá™™w›y©'«)Ó4ÀÔF×JÑJÐPTÐJÓU€Mð Pá˜TÔ"×&Ñ&¨DÐ&Ó1€Fð Wá˜T°Ô6×:Ñ:ÀÐ:ÓE€FØVá˜D°Ô5×9Ñ9¸tÐ9ÓD€EØ;á˜D°Ô5×9Ñ9¸tÐ9ÓD€EØXá˜D°Ô5×9Ñ9¸tÐ9ÓD€EØOá‹i�m‰m ˆmÓ&€GØZá	‹�‰˜DˆÓ	!€BØbá˜4¨tÔ4×8Ñ8¸dÐ8ÓC€DØAá˜D°Ô5×9Ñ9¸tÐ9ÓD€EØná‘“™›¡£°DÔ9×=Ñ=À4Ð=ÓH€DØ<á $°dÔ;×?Ñ?ÀTÐ?ÓJ€KØ?á˜d°$Ô7×;Ñ;ÀÐ;ÓF€GØ;á˜tÔ$×(Ñ(¨dÐ(Ó3€EØ_á $°dÔ;×?Ñ?ÀTÐ?ÓJ€KØOá $°dÔ;×?Ñ?ÀTÐ?ÓJ€KØDáÒ(°TÈÔN×RÑRØð Só €Hð Sá $Ô'×+Ñ+°Ð+Ó6€JØ`á¨4¸tÔD×HÑHÈdÐHÓSÐØCá t¸4Ô@×DÑDÈ$ÐDÓO€OØ:á¨¸TÔB×FÑFÈDÐFÓQÐØ/á¨¸DÔA×EÑEÈ4ÐEÓPÐØ.á °TÔ:×>Ñ>ÀDÐ>ÓI€IØ$á °TÔ:×>Ñ>ÀDÐ>ÓI€IØ$ñ Ò+¸Ô
=×
AÑ
AÀtÐ
AÓ
L€CØmá¨¸DÔA×EÑEÈ4ÐEÓPÐØFá $°dÔ;×?Ñ?ÀTÐ?ÓJ€KØIáÙ‹‘“™%›'¨dÀ$ôç	�cˆt€cƒnð ð JáÙ‹‘“™%›'¨dÀ$ôç	�cˆt€cƒnð ð JáÙ‹‘“™%›'¨dÀ$ôç	�cˆt€cƒnð ð Já T¸Ô>×BÑBÈÐBÓM€MØ-á T¸Ô>×BÑBÈÐBÓM€MØ-á T¸Ô>×BÑBÈÐBÓM€MØ-á¨¸TÔB×FÑFÈDÐFÓQÐØWáÚ#°ÀDôç	�cˆt€cƒnð ð rá‘U“W™e›g¡u£w¸4Ô@×DÑDÈ$ÐDÓO€HØEá‘u“w¡£©«±%³'ÀdÔK×OÑOØð Pó €Jð Bá‘5“7™E›G¡U£W¸Ô>×BÑBÈÐBÓM€FØ<á˜DÔ!×%Ñ%¨4Ð%Ó0€DØ%á $Ô'×+Ñ+°Ð+Ó6€JØ,á Ô&×*Ñ*°Ð*Ó5€IØ,á DÔ)×-Ñ-°4Ð-Ó8€LØ-á tÔ,×0Ñ0°dÐ0Ó;€OØñ Ù“)©«¸4È4ôç	�cˆt€cƒnð ð >á °Ô5×9Ñ9¸tÐ9ÓD€FØ<ñ ˜E¨dÀ$ÔG×KÑKÐQUÐKÓV€HØ?á °TÔ:×>Ñ>ÀDÐ>ÓI€JØJá˜D°Ô5×9Ñ9¸tÐ9ÓD€EØNá $Ô'×+Ñ+°Ð+Ó6€HØCá DÔ)×-Ñ-°4Ð-Ó8€JØ&á tÔ,×0Ñ0°dÐ0Ó;ÐØ)á˜dÔ#×'Ñ'¨TÐ'Ó2€GØ'á¨4Ô0ÐáˆXÓñNó ðNñ6 ˆ\Óñó ðñ ÐÓ ñ(ó !ñ(r'   rL   c                   óè	  — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 dwd„Zd„ Zd„ Zd„ Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dxd„Zd„ Z	d	„ Z
ed
„ «       Zd„ Zed„ «       Zed„ «       Zej                   d„ «       Zed„ «       Zej                   d„ «       Zed„ «       Zej                   d„ «       Zed„ «       Zej                   d„ «       Zed„ «       Zej                   d„ «       Zed„ «       Zej                   d„ «       Zed„ «       Zej                   d„ «       Zed„ «       Zej                   d„ «       Zed„ «       Zej                   d„ «       Zed„ «       Zej                   d „ «       Zed!„ «       Zej                   d"„ «       Zed#„ «       Zej                   d$„ «       Zed%„ «       Zed&„ «       Zej                   d'„ «       Zed(„ «       Zej                   d)„ «       Zed*„ «       Zej                   d+„ «       Zed,„ «       Z e j                   d-„ «       Z ed.„ «       Z!e!j                   d/„ «       Z!ed0„ «       Z"e"j                   d1„ «       Z"ed2„ «       Z#e#j                   d3„ «       Z#ed4„ «       Z$e$j                   d5„ «       Z$ed6„ «       Z%e%j                   d7„ «       Z%ed8„ «       Z&e&j                   d9„ «       Z&ed:„ «       Z'e'j                   d;„ «       Z'ed<„ «       Z(e(j                   d=„ «       Z(ed>„ «       Z)e)j                   d?„ «       Z)ed@„ «       Z*e*j                   dA„ «       Z*edB„ «       Z+e+j                   dC„ «       Z+edD„ «       Z,e,j                   dE„ «       Z,edF„ «       Z-e-j                   dG„ «       Z-edH„ «       Z.e.j                   dI„ «       Z.edJ„ «       Z/e/j                   dK„ «       Z/edL„ «       Z0e0j                   dM„ «       Z0edN„ «       Z1e1j                   dO„ «       Z1edP„ «       Z2e2j                   dQ„ «       Z2edR„ «       Z3e3j                   dS„ «       Z3edT„ «       Z4e4j                   dU„ «       Z4edV„ «       Z5edW„ «       Z6edX„ «       Z7edY„ «       Z8e8j                   dZ„ «       Z8ed[„ «       Z9e9j                   d\„ «       Z9ed]„ «       Z:e:j                   d^„ «       Z:ed_„ «       Z;e;j                   d`„ «       Z;da„ Z<db„ Z=dc„ Z>dd„ Z?dyde„Z@df„ ZAdg„ ZBdh„ ZCdi„ ZDdj„ ZEedk„ «       ZFe:j                   dl„ «       ZFdm„ ZGdn„ ZHdo„ ZIdp„ ZJdq„ ZKdr„ ZLdzds„ZMd{dt„ZNd|du„ZOd|dv„ZPy)}Ú	CadViewera×  
    The main class for the CAD Viewer encapsulating the three-cad-viewer Javascript module

    Parameters
    ----------
    cad_width : int, default: 800
        Width of the canvas element
    height : int, default: 600
        Height of the canvas element
    tree_width : int, default: 240
        Width of the navigation tree element
    theme : string, default: 'light'
        UI theme, can be 'dark' or 'light' (default)
    tools : bool, default: True
        Whether to show CAD tools (True) or not (False)
    glass : bool, default: False
        Whether to use glass mode (True) or not (False)
    pinning: bool, default: False
        Whether to allow replacing the CAD View by a canvas screenshot

    See also
    --------

    - [three-cad-viewer](https://github.com/bernhard-42/three-cad-viewer) ([Demo](https://bernhard-42.github.io/three-cad-viewer/example.html))
    - [threejs](https://threejs.org/docs/index.html#manual/en/introduction/Creating-a-scene)

    Nc                 óø   — |dk  rt        d«      ‚|dk  rt        d«      ‚t        |||||||||	|
|dd|¬«      | _        d | j                  _        d| _        t        «       | _        d	| _        d	| _        g | _	        y )
Ni  zEnsure cad_width >= 780éð   zEnsure tree_width >= 240ÚZÚ	trackball)rŒ   rb   r�   rŽ   r�   r™   r˜   r�   rŠ   r‹   r‘   rœ   r›   rw   r   T)
r4   rL   Úwidgetrh   Úmsg_idr   ÚparserÚemptyÚ_splashr–   )r:   rŒ   rb   r�   rŽ   r�   r™   r˜   r�   rŠ   r‹   r‘   r+   s                r%   r;   zCadViewer.__init__Ý  s”   € ð �sŠ?ÜÐ6Ó7Ð7Ø˜ÒÜÐ7Ó8Ð8ä%ØØØ!Ø%ØØØØØØØ/ØØØô
ˆŒð  !%ˆ�‰ÔØˆŒÜ “lˆŒàˆŒ
ØˆŒØˆ�r'   c                 ó>   — | t         | j                  j                  <   y r   )r)   rÊ   rw   ©r:   s    r%   Úregister_viewerzCadViewer.register_viewer	  s   € à!%Œˆt�{‰{�~‰~Òr'   c                 ót   — 	 | j                   j                  |«      j                  «       S # t        $ r Y y w xY wr   )rÌ   ÚparseStringÚasListr   )r:   Ústrings     r%   Ú_parsezCadViewer._parse  s7   € ð	Ø—;‘;×*Ñ*¨6Ó2×9Ñ9Ó;Ð;øÜò 	Ùð	ús   ‚(+ «	7¶7c                 ó&   — | j                  d«       y)z(
        Dispose the CAD Viewer
        zviewer.disposeN©ÚexecuterÐ   s    r%   ÚdisposezCadViewer.dispose  s   € ð
 	�‰Ð%Õ&r'   c-                 óž  — |dk(  r|�t        d«      ‚|dk(  r|�|€t        d«      ‚|dvrt        d|› d�«      ‚|€g d	¢}|+| j                  _        d
| j                  _        d| j                  _        | j                  j
                  €d| j                  _        | j                  j                  «       5  || j                  _        || j                  _        || j                  _        || j                  _	        || j                  _
        || j                  _        |	| j                  _        || j                  _        || j                  _        || j                  _        |
�|
| j                  _        |�|| j                  _        || j                  _        || j                  _        || j                  _        || j                  _        || j                  _        || _        || j                  _        || j                  _        || j                  _        || j                  _        || j                  _        || j                  _        || j                  _        || j                  _        || j                  _         || j                  _!        |'| j                  _"        |(| j                  _#        |)| j                  _$        |*| j                  _%        || j                  _&        || j                  _'        | | j                  _(        |!| j                  _)        |"| j                  _*        |#| j                  _+        |$| j                  _,        |%| j                  _-        |&| j                  _.        | j_                  |«       ddd«       d| j                  _        |
�|
| j                  _        |�|| j                  _        |,sd| _0        yy# 1 sw Y   ŒKxY w)az*  
        Adding shapes to the CAD view

        Parameters
        ----------
        shapes : dict
            Nested tessellated shapes
        tracks : list or tuple, default None
            List of animation track arrays, see [AnimationTrack.to_array](/widget.html#cad_viewer_widget.widget.AnimationTrack.to_array)
        title: str, default: None
            Name of the title view to display the shapes.
        ortho : bool, default True
            Whether to use orthographic view (True) or perspective view (False)
        cad_width : int, default: None
            Width of the canvas element
        height : int, default: None
            Height of the canvas element
        tree_width : int, default: None
            Width of the navigation tree element
        tools : bool, default: None
            Whether to show CAD tools (True) or not (False)
        glass : bool, default: None
            Whether to use glass mode (True) or not (False)
        control : string, default 'trackball'
            Whether to use trackball controls ('trackball') or orbit controls ('orbit')
        up : string, default 'Z'
            Whether camera up direction is Z ('Z') or Y ('Y') or the lagacy Z orientation ('L')
        axes : bool, default False
            Whether to show coordinate axes (True) or not (False)
        axes0 : bool, default False
            Whether to center coordinate axes at the origin [0,0,0] (True) or at the CAD object center (False)
        grid : 3-dim list of bool, default None
            Whether to show the grids for `xy`, `xz`, `yz` (`None` means `(False, False, False)`)
        explode : bool, default: None
            Whether to show the explode widget (True) or not (False)
        ticks : int, default 10
            Hint for the number of ticks for the grids (will be adjusted for nice intervals)
        transparent : bool, default False
            Whether to show the CAD objects transparently (True) or not (False)
        black_edges : bool, default False
            Whether to shows the edges in black (True) or not(False)
        collapse : int, default 0
            Collapse CAD tree (1: collapse nodes with single leaf, 2: collapse all nodes)
        normal_Len : int, default 0
            If > 0, the vertex normals will be rendered with the length given be this parameter
        default_edgecolor : string, default "#707070"
            The default edge color in web format, e.g. '#707070'
        default_opacity : float, default 0.5
            The default opacity level for transparency between 0.0 an 1.0
        ambient_intensity : float, default 1.0
            The intensity of the ambient light
        direct_intensity : float, default 1.1
            The intensity of the direct light
        metalness : float, default 0.3
            The degree of material metalness
        roughness : float, default 0.65
            The degree of material roughness
        position : 3-dim list of float, default None
            Position of the camera as a 3-dim tuple of float (x,y,z)
        quaternion : 4-dim list of float, default None
            Rotation of the camera as 4-dim quaternion (x,y,z,w)
        target :  3-dim list of float, default None
            Camera target to look at, default is the center of the object's bounding box
        zoom : float, default None
            Zoom value of the camera
        reset_camera : bool, default True
            Keep the camera position and rotation when showing new shapes (True) or not (False)
        zoom_speed : float, default 1.0
            Speed of zooming with the mouse
        pan_speed : float, default 1.0
            Speed of panning with the mouse
        rotate_speed : float, default 1.0
            Speed of rotation with the mouse
        timeit : bool, default False
            Whether to output timing info to the browser console (True) or not (False)

        Examples
        --------

        A simple cube with edge len of 1 is tessellated like the `shape` element of the first (and only) element of
        the `parts` list:

        ```
        shapes = {
            "name": "Group",
            "id": "/Group",
            "loc": None,  # would be (<position>, <quaternion>), e.g. ([0,0,0), (0,0,0,1)]),
            "bb": {
                "xmin": -0.5, "xmax": 0.5,
                "ymin": -0.5, "ymax": 0.5,
                "zmin": -0.5, "zmax": 0.5
            }
            "parts": [{
                "name": "Part_0",
                "id": "/Group/Part_0",
                "type": "shapes",
                "shape": {"vertices": [
                    [-0.5, -0.5, -0.5], [-0.5, -0.5, 0.5], [-0.5, 0.5, -0.5], [-0.5, 0.5, 0.5],
                    [0.5, -0.5, -0.5], [0.5, -0.5, 0.5], [0.5, 0.5, -0.5], [0.5, 0.5, 0.5],
                    [-0.5, -0.5, -0.5], [0.5, -0.5, -0.5], [-0.5, -0.5, 0.5], [0.5, -0.5, 0.5],
                    [-0.5, 0.5, -0.5], [0.5, 0.5, -0.5], [-0.5, 0.5, 0.5], [0.5, 0.5, 0.5],
                    [-0.5, -0.5, -0.5], [-0.5, 0.5, -0.5], [0.5, -0.5, -0.5], [0.5, 0.5, -0.5],
                    [-0.5, -0.5, 0.5], [-0.5, 0.5, 0.5], [0.5, -0.5, 0.5], [0.5, 0.5, 0.5]],
                "triangles": [
                    1, 2, 0, 1, 3, 2, 5, 4, 6, 5, 6, 7, 11, 8, 9, 11, 10, 8, 15, 13,
                    12, 15, 12, 14, 19, 16, 17, 19, 18, 16, 23, 21, 20, 23, 20, 22 ],
                "normals": [
                    [-1, 0, 0], [-1, 0, 0], [-1, 0, 0], [-1, 0, 0],
                    [1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0],
                    [0, -1, 0], [0, -1, 0], [0, -1, 0], [0, -1, 0],
                    [0, 1, 0], [0, 1, 0], [0, 1, 0], [0, 1, 0],
                    [0, 0, -1], [0, 0, -1], [0, 0, -1], [0, 0, -1],
                    [0, 0, 1], [0, 0, 1], [0, 0, 1], [0, 0, 1]
                ],
                "edges": [
                    [[-0.5, -0.5, -0.5], [-0.5, -0.5, 0.5]],
                    [[-0.5, -0.5, 0.5], [-0.5, 0.5, 0.5]],
                    [[-0.5, 0.5, -0.5], [-0.5, 0.5, 0.5]],
                    [[-0.5, -0.5, -0.5], [-0.5, 0.5, -0.5]],
                    [[0.5, -0.5, -0.5], [0.5, -0.5, 0.5]],
                    [[0.5, -0.5, 0.5], [0.5, 0.5, 0.5]],
                    [[0.5, 0.5, -0.5], [0.5, 0.5, 0.5]],
                    [[0.5, -0.5, -0.5], [0.5, 0.5, -0.5]],
                    [[-0.5, -0.5, -0.5], [0.5, -0.5, -0.5]],
                    [[-0.5, -0.5, 0.5], [0.5, -0.5, 0.5]],
                    [[-0.5, 0.5, -0.5], [0.5, 0.5, -0.5]],
                    [[-0.5, 0.5, 0.5], [0.5, 0.5, 0.5]]
                ]},
                "color": "#e8b024",
                "renderback": false
            }]
        }
        states = {'/Group/Part_0': [1, 1]}
        ```

        A nested object (with shapes shortened) looks like:

        ```
        {
            'id': '/bottom', 'name': 'bottom', 'loc': ['<position>', '<quaternion>'],
            'parts': [{
                    'id': '/bottom/bottom_0', 'name': 'bottom_0', 'type': 'shapes', 'color': '#bfbfbf',
                    'shape': {'vertices': [...], 'triangles': [...], 'normals': [...], 'edges': [...]},
                }, {
                    'id': '/bottom/top', 'name': 'top', 'loc': ['<position>', '<quaternion>'],
                    'parts': [{
                        'id': '/bottom/top/top_0', 'name': 'top_0', 'type': 'shapes', 'color': '#bfbfbf',
                        'shape': {'vertices': [...], 'triangles': [...], 'normals': [...], 'edges': [...]},
                    }]
                }, {
                    'id': '/bottom/front_stand', 'name': 'front_stand', 'loc': ['<position>', '<quaternion>'],
                    'parts': [{
                        'id': '/bottom/front_stand/front_stand_0', 'name': 'front_stand_0', 'type': 'shapes', 'color': '#7fcce5',
                        'shape': {'vertices': [...], 'triangles': [...], 'normals': [...], 'edges': [...]},
                    }]
                }, {
                    'id': '/bottom/back_stand', 'name': 'back_stand', 'loc': ['<position>', '<quaternion>'],
                    'parts': [{
                        'id': '/bottom/back_stand/back_stand_0', 'name': 'back_stand_0', 'type': 'shapes', 'color': '#7fcce5',
                        'shape': {'vertices': [...], 'triangles': [...], 'normals': [...], 'edges': [...]},
                    }]
                }, {
                    'id': '/bottom/right_back', 'name': 'right_back', 'loc': ['<position>', '<quaternion>'],
                    'parts': [{
                        'id': '/bottom/right_back/right_back_0', 'name': 'right_back_0', 'type': 'shapes', 'color': '#ffa500',
                        'shape': {'vertices': [...], 'triangles': [...], 'normals': [...], 'edges': [...]},
                    }, {
                        'id': '/bottom/right_back/lower', 'name': 'lower', 'loc': ['<position>', '<quaternion>'],
                        'parts': [{
                            'id': '/bottom/right_back/lower/lower_0', 'name': 'lower_0', 'type': 'shapes', 'color': '#ffa500',
                            'shape': {'vertices': [...], 'triangles': [...], 'normals': [...], 'edges': [...]},
                        }]
                    }]
                },
                ...
            ]
        }
        states = {
            '/bottom/bottom_0': [1, 1],
            '/bottom/top/top_0': [1, 1],
            '/bottom/front_stand/front_stand_0': [1, 1],
            '/bottom/back_stand/back_stand_0': [1, 1],
            '/bottom/right_back/right_back_0': [1, 1],
            '/bottom/right_back/lower/lower_0': [1, 1],
            ...
        }
        ```

        Notes
        -----

        Vector     : float[3]     := [x, y, z]
        VectorList : Vector[n]    := [ [x0, y0, z0], [x1, xy1, z1], ... ]
        Index      : int[m]       := [ i0, i1, i2, ... ]
        Edge       : Vector[2]    := [ [x0, y0, z0], [x1, xy1, z1]]
        EdgeList   : Edge[k]      := [ [[x0, y0, z0], [x1, xy1, z1]], [[x2, y2, z2], [x3, xy3, z3]], ... ]

        Shape, Faces := {
            "id": "<str>",
            "name": "<str>",
            "type": "shapes",
            "color": "#ffffff",
            "renderback": false
            "shape": {
                "vertices": <VectorList>,
                "triangles": <Index>,
                "normals": <VectorList>,
                "edges": <EdgeList>
            }
        }

        Edges := {
            "id": "</path/to/<name>>",
            "name": "<name>",
            "type": "edges",
            "color": "#ffffff",
            "width": 3,
            "renderback": false
            "shape": <EdgeList>
        }

        Vertices := {
            "id": "</path/to/<name>>",
            "name": "<name>",
            "type": "vertices",
            "color": "#ffffff",
            "size": 6
            "shape": <VectorList>
        }
        ÚorbitNz:Camera quaternion cannot be used with Orbit camera controlrÉ   zPFor Trackball camera control, position paramater also needs quaternion parameter)rÈ   ÚYÚLzCamera up value 'z' can only be Y or Z or L)FFFTç      è?F)1r4   rÊ   rÂ   rÁ   r“   rŽ   Úhold_trait_notificationsr¦   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°   r±   r­   r®   rµ   Ú
add_tracksrÎ   )-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°   r±   r­   r®   rµ   r»   r¼   r½   r—   rÂ   Ú_is_logos-                                                r%   Ú
add_shapeszCadViewer.add_shapes  s  € ðr �gÒ *Ð"8ÜØLóð ð �kÒ! hÐ&:¸zÐ?QÜØbóð ð �_Ñ$ÜÐ0°°Ð4MÐNÓOÐOàˆ<Ú(ˆDà!ˆ�‰ÔØ!%ˆ�‰Ôð "ˆ�‰Ôà�;‰;×#Ñ#Ð+Ø'+ˆD�K‰KÔ$à�[‰[×1Ñ1Õ3Ø!'ˆD�K‰KÔà,=ˆD�K‰KÔ)Ø*9ˆD�K‰KÔ'Ø,=ˆD�K‰KÔ)Ø+;ˆD�K‰KÔ(Ø$-ˆD�K‰KÔ!Ø$-ˆD�K‰KÔ!Ø%/ˆD�K‰KÔ"Ø")ˆD�K‰KÔØˆD�K‰KŒNØÐ Ø$)�—‘Ô!ØÐ Ø$)�—‘Ô!Ø,=ˆD�K‰KÔ)Ø#ˆD�K‰KÔØ %ˆD�K‰KÔØ#ˆD�K‰KÔØ&1ˆD�K‰KÔ#Ø"ˆDŒLØ %ˆD�K‰KÔØ %ˆD�K‰KÔØ&1ˆD�K‰KÔ#Ø&1ˆD�K‰KÔ#Ø#+ˆD�K‰KÔ Ø'3ˆD�K‰KÔ$Ø#+ˆD�K‰KÔ Ø%/ˆD�K‰KÔ"Ø!'ˆD�K‰KÔØ#ˆD�K‰KÔØ%/ˆD�K‰KÔ"Ø$-ˆD�K‰KÔ!Ø'3ˆD�K‰KÔ$Ø!'ˆD�K‰KÔØ(5ˆD�K‰KÔ%Ø(5ˆD�K‰KÔ%Ø(5ˆD�K‰KÔ%Ø(5ˆD�K‰KÔ%Ø(5ˆD�K‰KÔ%Ø(5ˆD�K‰KÔ%Ø,=ˆD�K‰KÔ)Ø&1ˆD�K‰KÔ#Ø-?ˆD�K‰KÔ*à�O‰O˜FÔ#÷] 4ð` "'ˆ�‰ÔàÐØ %ˆD�K‰KÔàÐØ %ˆD�K‰KÔáØ ˆD�Lð ÷q 4Ð3ús   Â4KOÏOc                 ó(   — | j                  dg «       y)z6Sync position, quaternion and zoom of camera to PythonÚupdateCameraNrØ   rÐ   s    r%   Úupdate_camera_locationz CadViewer.update_camera_location‡  s   € à�‰�^ RÕ(r'   c                 ó&   — d| j                   _        y)z8
        Close the underlying Javascript viewer
        TN©rÊ   rÀ   rÐ   s    r%   ÚclosezCadViewer.close‹  s   € ð  $ˆ�‰Õr'   c                 ó.   — | j                   j                  S )zF
        Get the states of the objects in the navigation tree
        )rÊ   r”   rÐ   s    r%   r”   zCadViewer.states‘  ó   € ð �{‰{×!Ñ!Ð!r'   c                 óÐ   — | j                   j                  j                  «       }i }|j                  «       D ]  \  }}|j	                  |«      €Œ|||<   Œ || j                   _        y r   )rÊ   r”   Úcopyr    r*   r•   )r:   r”   Ú
old_statesÚ
new_statesr#   r$   s         r%   Úupdate_stateszCadViewer.update_states™  sY   € Ø—[‘[×'Ñ'×,Ñ,Ó.ˆ
Øˆ
à—L‘L–N‰DˆAˆqØ�~‰~˜aÓ Ñ,Ø !�
˜1’ð #ð %/ˆ�‰Õ!r'   c                 ó.   — | j                   j                  S )z;
        Whether the Javascript viewer is disposed
        rè   rÐ   s    r%   rÀ   zCadViewer.disposed¢  s   € ð �{‰{×#Ñ#Ð#r'   c                 ó.   — | j                   j                  S )zÈ
        Get or set the CadViewerWidget traitlet `ambient_intensity`.
        see [CadViewerWidget.ambient_intensity](./widget.html#cad_viewer_widget.widget.CadViewerWidget.ambient_intensity)
        ©rÊ   r¨   rÐ   s    r%   r¨   zCadViewer.ambient_intensity®  ó   € ð �{‰{×,Ñ,Ð,r'   c                 ó&   — || j                   _        y r   ró   ©r:   Úvalues     r%   r¨   zCadViewer.ambient_intensity·  ó   € à(-ˆ�‰Õ%r'   c                 ó.   — | j                   j                  S )zÄ
        Get or set the CadViewerWidget traitlet `direct_intensity`
        see [CadViewerWidget.direct_intensity](./widget.html#cad_viewer_widget.widget.CadViewerWidget.direct_intensity)
        ©rÊ   r©   rÐ   s    r%   r©   zCadViewer.direct_intensity»  s   € ð �{‰{×+Ñ+Ð+r'   c                 ó&   — || j                   _        y r   rú   rö   s     r%   r©   zCadViewer.direct_intensityÄ  s   € à',ˆ�‰Õ$r'   c                 ó.   — | j                   j                  S )z¶
        Get or set the CadViewerWidget traitlet `metalness`
        see [CadViewerWidget.direct_intensity](./widget.html#cad_viewer_widget.widget.CadViewerWidget.metalness)
        ©rÊ   rª   rÐ   s    r%   rª   zCadViewer.metalnessÈ  ó   € ð �{‰{×$Ñ$Ð$r'   c                 ó&   — || j                   _        y r   rý   rö   s     r%   rª   zCadViewer.metalnessÑ  ó   € à %ˆ�‰Õr'   c                 ó.   — | j                   j                  S )z¶
        Get or set the CadViewerWidget traitlet `roughness`
        see [CadViewerWidget.direct_intensity](./widget.html#cad_viewer_widget.widget.CadViewerWidget.roughness)
        ©rÊ   r«   rÐ   s    r%   r«   zCadViewer.roughnessÕ  rþ   r'   c                 ó&   — || j                   _        y r   r  rö   s     r%   r«   zCadViewer.roughnessÞ  r   r'   c                 ó.   — | j                   j                  S )z 
        Get or set the CadViewerWidget traitlet `axes`
        see [CadViewerWidget.axes](./widget.html#cad_viewer_widget.widget.CadViewerWidget.axes)
        ©rÊ   r�   rÐ   s    r%   r�   zCadViewer.axesâ  ó   € ð �{‰{×ÑÐr'   c                 ó&   — || j                   _        y r   r  rö   s     r%   r�   zCadViewer.axesë  ó   € à ˆ�‰Õr'   c                 ó.   — | j                   j                  S )z£
        Get or set the CadViewerWidget traitlet `axes0`
        see [CadViewerWidget.axes0](./widget.html#cad_viewer_widget.widget.CadViewerWidget.axes0)
        ©rÊ   rž   rÐ   s    r%   rž   zCadViewer.axes0ï  ó   € ð �{‰{× Ñ Ð r'   c                 ó&   — || j                   _        y r   r
  rö   s     r%   rž   zCadViewer.axes0ø  ó   € à!ˆ�‰Õr'   c                 ó.   — | j                   j                  S )z 
        Get or set the CadViewerWidget traitlet `grid`
        see [CadViewerWidget.grid](./widget.html#cad_viewer_widget.widget.CadViewerWidget.grid)
        ©rÊ   rŸ   rÐ   s    r%   rŸ   zCadViewer.gridü  r  r'   c                 ó&   — || j                   _        y r   r  rö   s     r%   rŸ   zCadViewer.grid  r  r'   c                 ó.   — | j                   j                  S )z®
        Get or set the CadViewerWidget traitlet `center_grid`
        see [CadViewerWidget.grid](./widget.html#cad_viewer_widget.widget.CadViewerWidget.center_grid)
        ©rÊ   r    rÐ   s    r%   r    zCadViewer.center_grid	  ó   € ð �{‰{×&Ñ&Ð&r'   c                 ó&   — || j                   _        y r   r  rö   s     r%   r    zCadViewer.center_grid  ó   € à"'ˆ�‰Õr'   c                 ó.   — | j                   j                  S )z©
        Get or set the CadViewerWidget traitlet `explode`
        see [CadViewerWidget.explode](./widget.html#cad_viewer_widget.widget.CadViewerWidget.explode)
        ©rÊ   r¡   rÐ   s    r%   r¡   zCadViewer.explode  ó   € ð �{‰{×"Ñ"Ð"r'   c                 ó&   — || j                   _        y r   r  rö   s     r%   r¡   zCadViewer.explode  s   € à#ˆ�‰Õr'   c                 ó.   — | j                   j                  S )z£
        Get or set the CadViewerWidget traitlet `ortho`
        see [CadViewerWidget.ortho](./widget.html#cad_viewer_widget.widget.CadViewerWidget.ortho)
        ©rÊ   rš   rÐ   s    r%   rš   zCadViewer.ortho#  r  r'   c                 ó&   — || j                   _        y r   r  rö   s     r%   rš   zCadViewer.ortho,  r  r'   c                 ó.   — | j                   j                  S )zµ
        Get or set the CadViewerWidget traitlet `transparent`
        see [CadViewerWidget.transparent](./widget.html#cad_viewer_widget.widget.CadViewerWidget.transparent)
        ©rÊ   r£   rÐ   s    r%   r£   zCadViewer.transparent0  r  r'   c                 ó&   — || j                   _        y r   r  rö   s     r%   r£   zCadViewer.transparent9  r  r'   c                 ó.   — | j                   j                  S )zµ
        Get or set the CadViewerWidget traitlet `black_edges`
        see [CadViewerWidget.black_edges](./widget.html#cad_viewer_widget.widget.CadViewerWidget.black_edges)
        ©rÊ   r¤   rÐ   s    r%   r¤   zCadViewer.black_edges=  r  r'   c                 ó&   — || j                   _        y r   r!  rö   s     r%   r¤   zCadViewer.black_edgesF  r  r'   c                 ó.   — | j                   j                  S )zF
        Get or set the CadViewerWidget traitlet `normal_len`
        r!  rÐ   s    r%   r¥   zCadViewer.normal_lenJ  s   € ð �{‰{×&Ñ&Ð&r'   c                 ó.   — | j                   j                  S )zÇ
        Get or set the CadViewerWidget traitlet `default_edgecolor`
        see [CadViewerWidget.default_edgecolor](./widget.html#cad_viewer_widget.widget.CadViewerWidget.default_edgecolor)
        )rÊ   r¦   rÐ   s    r%   r¦   zCadViewer.default_edgecolorR  rô   r'   c                 ór   — |j                  d«      r|| j                  _        y d|› �| j                  _        y )NÚ#)Ú
startswithrÊ   r¦   rö   s     r%   r¦   zCadViewer.default_edgecolor[  s.   € à×Ñ˜CÔ Ø,1ˆD�K‰KÕ)à./°¨w¨KˆD�K‰KÕ)r'   c                 ó.   — | j                   j                  S )zÁ
        Get or set the CadViewerWidget traitlet `default_opacity`
        see [CadViewerWidget.default_opacity](./widget.html#cad_viewer_widget.widget.CadViewerWidget.default_opacity)
        ©rÊ   r§   rÐ   s    r%   r§   zCadViewer.default_opacityb  s   € ð �{‰{×*Ñ*Ð*r'   c                 ó&   — || j                   _        y r   r)  rö   s     r%   r§   zCadViewer.default_opacityk  s   € à&+ˆ�‰Õ#r'   c                 ó.   — | j                   j                  S )zÇ
        Get or set the CadViewerWidget traitlet `clip_intersection`
        see [CadViewerWidget.clip_intersection](./widget.html#cad_viewer_widget.widget.CadViewerWidget.clip_intersection)
        ©rÊ   r­   rÐ   s    r%   r­   zCadViewer.clip_intersectiono  rô   r'   c                 ó&   — || j                   _        y r   r,  rö   s     r%   r­   zCadViewer.clip_intersectionx  rø   r'   c                 ó.   — | j                   j                  S )z»
        Get or set the CadViewerWidget traitlet `clip_normal_0`
        see [CadViewerWidget.clip_normal_0](./widget.html#cad_viewer_widget.widget.CadViewerWidget.clip_normal_0)
        ©rÊ   r¯   rÐ   s    r%   r¯   zCadViewer.clip_normal_0|  ó   € ð �{‰{×(Ñ(Ð(r'   c                 ó&   — || j                   _        y r   r/  rö   s     r%   r¯   zCadViewer.clip_normal_0…  ó   € à$)ˆ�‰Õ!r'   c                 ó.   — | j                   j                  S )z»
        Get or set the CadViewerWidget traitlet `clip_normal_1`
        see [CadViewerWidget.clip_normal_1](./widget.html#cad_viewer_widget.widget.CadViewerWidget.clip_normal_1)
        ©rÊ   r°   rÐ   s    r%   r°   zCadViewer.clip_normal_1‰  r0  r'   c                 ó&   — || j                   _        y r   r4  rö   s     r%   r°   zCadViewer.clip_normal_1’  r2  r'   c                 ó.   — | j                   j                  S )z»
        Get or set the CadViewerWidget traitlet `clip_normal_2`
        see [CadViewerWidget.clip_normal_2](./widget.html#cad_viewer_widget.widget.CadViewerWidget.clip_normal_2)
        ©rÊ   r±   rÐ   s    r%   r±   zCadViewer.clip_normal_2–  r0  r'   c                 ó&   — || j                   _        y r   r7  rö   s     r%   r±   zCadViewer.clip_normal_2Ÿ  r2  r'   c                 ó.   — | j                   j                  S )z»
        Get or set the CadViewerWidget traitlet `clip_slider_0`
        see [CadViewerWidget.clip_slider_0](./widget.html#cad_viewer_widget.widget.CadViewerWidget.clip_slider_0)
        ©rÊ   r²   rÐ   s    r%   r²   zCadViewer.clip_slider_0£  r0  r'   c                 ó&   — || j                   _        y r   r:  rö   s     r%   r²   zCadViewer.clip_slider_0¬  r2  r'   c                 ó.   — | j                   j                  S )z»
        Get or set the CadViewerWidget traitlet `clip_slider_1`
        see [CadViewerWidget.clip_slider_1](./widget.html#cad_viewer_widget.widget.CadViewerWidget.clip_slider_1)
        ©rÊ   r³   rÐ   s    r%   r³   zCadViewer.clip_slider_1°  r0  r'   c                 ó&   — || j                   _        y r   r=  rö   s     r%   r³   zCadViewer.clip_slider_1¹  r2  r'   c                 ó.   — | j                   j                  S )z»
        Get or set the CadViewerWidget traitlet `clip_slider_2`
        see [CadViewerWidget.clip_slider_2](./widget.html#cad_viewer_widget.widget.CadViewerWidget.clip_slider_2)
        ©rÊ   r´   rÐ   s    r%   r´   zCadViewer.clip_slider_2½  r0  r'   c                 ó&   — || j                   _        y r   r@  rö   s     r%   r´   zCadViewer.clip_slider_2Æ  r2  r'   c                 ó.   — | j                   j                  S )zµ
        Get or set the CadViewerWidget traitlet `clip_planes`
        see [CadViewerWidget.clip_planes](./widget.html#cad_viewer_widget.widget.CadViewerWidget.clip_planes)
        ©rÊ   r®   rÐ   s    r%   r®   zCadViewer.clip_planesÊ  r  r'   c                 ó&   — || j                   _        y r   rC  rö   s     r%   r®   zCadViewer.clip_planesÓ  r  r'   c                 ó.   — | j                   j                  S )zÃ
        Get or set the CadViewerWidget traitlet `clip_object_colors`
        see [CadViewerWidget.clip_planes](./widget.html#cad_viewer_widget.widget.CadViewerWidget.clip_object_colors)
        ©rÊ   rµ   rÐ   s    r%   rµ   zCadViewer.clip_object_colors×  s   € ð �{‰{×-Ñ-Ð-r'   c                 ó&   — || j                   _        y r   rF  rö   s     r%   rµ   zCadViewer.clip_object_colorsà  s   € à).ˆ�‰Õ&r'   c                 ó.   — | j                   j                  S )z£
        Get or set the CadViewerWidget traitlet `debug`
        see [CadViewerWidget.debug](./widget.html#cad_viewer_widget.widget.CadViewerWidget.debug)
        ©rÊ   rÂ   rÐ   s    r%   rÂ   zCadViewer.debugä  r  r'   c                 ó&   — || j                   _        y r   rI  rö   s     r%   rÂ   zCadViewer.debugí  r  r'   c                 ó.   — | j                   j                  S )z£
        Get or set the CadViewerWidget traitlet `tools`
        see [CadViewerWidget.tools](./widget.html#cad_viewer_widget.widget.CadViewerWidget.tools)
        ©rÊ   r˜   rÐ   s    r%   r˜   zCadViewer.toolsñ  r  r'   c                 ó&   — || j                   _        y r   rL  rö   s     r%   r˜   zCadViewer.toolsú  r  r'   c                 ó.   — | j                   j                  S )z£
        Get or set the CadViewerWidget traitlet `glass`
        see [CadViewerWidget.tools](./widget.html#cad_viewer_widget.widget.CadViewerWidget.glass)
        ©rÊ   r™   rÐ   s    r%   r™   zCadViewer.glassþ  r  r'   c                 ó&   — || j                   _        y r   rO  rö   s     r%   r™   zCadViewer.glass  r  r'   c                 ó.   — | j                   j                  S )z«
        Get or set the CadViewerWidget traitlet `cad_width`
        see [CadViewerWidget.tools](./widget.html#cad_viewer_widget.widget.CadViewerWidget.cad_width)
        ©rÊ   rŒ   rÐ   s    r%   rŒ   zCadViewer.cad_width  rþ   r'   c                 ó&   — || j                   _        y r   rR  rö   s     r%   rŒ   zCadViewer.cad_width  r   r'   c                 ó.   — | j                   j                  S )z­
        Get or set the CadViewerWidget traitlet `tree_width`
        see [CadViewerWidget.tools](./widget.html#cad_viewer_widget.widget.CadViewerWidget.tree_width)
        ©rÊ   r�   rÐ   s    r%   r�   zCadViewer.tree_width  ó   € ð �{‰{×%Ñ%Ð%r'   c                 ó&   — || j                   _        y r   rU  rö   s     r%   r�   zCadViewer.tree_width!  ó   € à!&ˆ�‰Õr'   c                 ó.   — | j                   j                  S )z¥
        Get or set the CadViewerWidget traitlet `height`
        see [CadViewerWidget.tools](./widget.html#cad_viewer_widget.widget.CadViewerWidget.height)
        ©rÊ   rb   rÐ   s    r%   rb   zCadViewer.height%  s   € ð �{‰{×!Ñ!Ð!r'   c                 ó&   — || j                   _        y r   rZ  rö   s     r%   rb   zCadViewer.height.  ó   € à"ˆ�‰Õr'   c                 ó.   — | j                   j                  S )z¯
        Get or set the CadViewerWidget traitlet `pan_speed`
        see [CadViewerWidget.pan_speed](./widget.html#cad_viewer_widget.widget.CadViewerWidget.pan_speed)
        ©rÊ   r¼   rÐ   s    r%   r¼   zCadViewer.pan_speed2  rþ   r'   c                 ó&   — || j                   _        y r   r^  rö   s     r%   r¼   zCadViewer.pan_speed;  r   r'   c                 ó.   — | j                   j                  S )z¸
        Get or set the CadViewerWidget traitlet `rotate_speed`
        see [CadViewerWidget.rotate_speed](./widget.html#cad_viewer_widget.widget.CadViewerWidget.rotate_speed)
        ©rÊ   r½   rÐ   s    r%   r½   zCadViewer.rotate_speed?  s   € ð �{‰{×'Ñ'Ð'r'   c                 ó&   — || j                   _        y r   ra  rö   s     r%   r½   zCadViewer.rotate_speedH  s   € à#(ˆ�‰Õ r'   c                 ó.   — | j                   j                  S )z²
        Get or set the CadViewerWidget traitlet `zoom_speed`
        see [CadViewerWidget.zoom_speed](./widget.html#cad_viewer_widget.widget.CadViewerWidget.zoom_speed)
        ©rÊ   r»   rÐ   s    r%   r»   zCadViewer.zoom_speedL  rV  r'   c                 ó&   — || j                   _        y r   rd  rö   s     r%   r»   zCadViewer.zoom_speedU  rX  r'   c                 ó.   — | j                   j                  S )z 
        Get or set the CadViewerWidget traitlet `zoom`
        see [CadViewerWidget.zoom](./widget.html#cad_viewer_widget.widget.CadViewerWidget.zoom)
        ©rÊ   rº   rÐ   s    r%   rº   zCadViewer.zoom]  r  r'   c                 ó&   — || j                   _        y r   rg  rö   s     r%   rº   zCadViewer.zoomf  r  r'   c                 ó.   — | j                   j                  S )z¬
        Get or set the CadViewerWidget traitlet `position`
        see [CadViewerWidget.position](./widget.html#cad_viewer_widget.widget.CadViewerWidget.position)
        ©rÊ   r·   rÐ   s    r%   r·   zCadViewer.positionj  ó   € ð �{‰{×#Ñ#Ð#r'   c                 ó&   — || j                   _        y r   rj  rö   s     r%   r·   zCadViewer.positions  s   € à$ˆ�‰Õr'   c                 ó.   — | j                   j                  S )z²
        Get or set the CadViewerWidget traitlet `quaternion`
        see [CadViewerWidget.quaternion](./widget.html#cad_viewer_widget.widget.CadViewerWidget.quaternion)
        )rÊ   r¸   rÐ   s    r%   r¸   zCadViewer.quaternionw  rV  r'   c                 óp   — | j                   j                  dk(  rt        d«       y || j                   _        y )NrÜ   z2quaternion controlled internally for orbit control)rÊ   r›   r�   r¸   rö   s     r%   r¸   zCadViewer.quaternion€  s)   € à�;‰;×Ñ 'Ò)ÜÐFÕGà%*ˆD�K‰KÕ"r'   c                 ó.   — | j                   j                  S )z¨
        Get or set the CadViewerWidget traitlet `target`
        see [CadViewerWidget.position](./widget.html#cad_viewer_widget.widget.CadViewerWidget.target)
        ©rÊ   r¹   rÐ   s    r%   r¹   zCadViewer.target‡  s   € ð �{‰{×!Ñ!Ð!r'   c                 ó&   — || j                   _        y r   rp  rö   s     r%   r¹   zCadViewer.target‘  r\  r'   c                 ó.   — | j                   j                  S )z¬
        Get or set the CadViewerWidget traitlet `lastPick`
        see [CadViewerWidget.lastPick](./widget.html#cad_viewer_widget.widget.CadViewerWidget.lastPick)
        )rÊ   r¿   rÐ   s    r%   Ú	last_pickzCadViewer.last_pick•  rk  r'   c                 ó.   — | j                   j                  S )z©
        Get or set the CadViewerWidget traitlet `control`
        see [CadViewerWidget.control](./widget.html#cad_viewer_widget.widget.CadViewerWidget.control)
        )rÊ   r›   rÐ   s    r%   r›   zCadViewer.controlž  r  r'   c                 ó.   — | j                   j                  S )zš
        Get or set the CadViewerWidget traitlet `up`
        see [CadViewerWidget.up](./widget.html#cad_viewer_widget.widget.CadViewerWidget.up)
        )rÊ   rœ   rÐ   s    r%   rœ   zCadViewer.up§  s   € ð �{‰{�~‰~Ðr'   c                 ó.   — | j                   j                  S )z©
        Get or set the CadViewerWidget traitlet `pinning`
        see [CadViewerWidget.pinning](./widget.html#cad_viewer_widget.widget.CadViewerWidget.pinning)
        ©rÊ   r�   rÐ   s    r%   r�   zCadViewer.pinning°  s   € ð �{‰{×"Ñ"Ð"r'   c                 ó&   — || j                   _        y r   rw  )r:   Úflags     r%   r�   zCadViewer.pinning¸  s   € à"ˆ�‰Õr'   c                 ó<   — t         | j                  j                     S )z¬
        Get or set the CadViewerWidget traitlet `collapse`
        see [CadViewerWidget.collapse](./widget.html#cad_viewer_widget.widget.CadViewerWidget.collapse)
        )r!   rÊ   r"   rÐ   s    r%   r"   zCadViewer.collapse¼  s   € ô ˜Ÿ™×,Ñ,Ñ-Ð-r'   c                 ó  — t        |t        «      r|| j                  _        y t        |t        «      r<t
        j                  «       D ��ci c]  \  }}||“Œ
 }}}||   | j                  _        y t        dt        |«      › d�«      ‚c c}}w )NzUnknown type z for collapse)	r>   ÚstrrÊ   r"   r   r!   r    Ú	TypeErrorÚtype)r:   r÷   r#   r$   Úrev_mappings        r%   r"   zCadViewer.collapseÄ  su   € ä�eœSÔ!Ø#(ˆD�K‰KÕ Ü˜œtÔ$Ü,4¯N©NÔ,<Ô=Ñ,<¡D A q˜1˜a™4Ð,<ˆKÑ=Ø#.¨uÑ#5ˆD�K‰KÕ ä˜m¬D°«K¨=¸ÐFÓGÐGùó >s   Á
Bc                 ó.   — | j                   j                  S )z¦
        Get or set the CadViewerWidget traitlet `keymap`
        see [CadViewerWidget.keymap](./widget.html#cad_viewer_widget.widget.CadViewerWidget.keymap)
        ©rÊ   r’   rÐ   s    r%   r’   zCadViewer.keymapÎ  rë   r'   c                 ó&   — || j                   _        y r   r�  rö   s     r%   r’   zCadViewer.keymapÖ  r\  r'   c                 ó.   — | j                   j                  S )zÇ
        Get or set the CadViewerWidget traitlet `new_tree_behavior`
        see [CadViewerWidget.new_tree_behavior](./widget.html#cad_viewer_widget.widget.CadViewerWidget.new_tree_behavior)
        ©rÊ   r‘   rÐ   s    r%   r‘   zCadViewer.new_tree_behaviorÚ  s   € ð �{‰{×,Ñ,Ð,r'   c                 ó&   — || j                   _        y r   r„  rö   s     r%   r‘   zCadViewer.new_tree_behaviorâ  rø   r'   c                 ó4   — g | _         g | j                  _         y)z7
        Remove animation tracks from CAD view
        N)r–   rÊ   rÐ   s    r%   Úclear_trackszCadViewer.clear_tracksê  s   € ð
 ˆŒØˆ�‰Õr'   c                 ó¸  — | j                   j                  j                  «       }t        |D �cg c]#  }|› d�j	                  |j
                  › d�«      ‘Œ% c}«      s#t        |j
                  › dt        |«      › �«      ‚g d¢}|j                  |vr#t        |j                  › dt        |«      › �«      ‚t        |j                  «      t        |j                  «      k7  rt        d«      ‚t        |j                  D �cg c]  }t        |t        t        f«      ‘Œ c}«      st        d«      ‚|j                  dv rPt        |j                  D �cg c]  }t        |t        t        f«      ‘Œ c}«      st        d|j                  › d	�«      ‚|j                  d
v r§|j                  dk(  rdnd}t        |j                  D ��cg c]W  }t        |t        t         f«      xr= t        |«      |k(  xr- t        |D �cg c]  }t        |t        t        f«      ‘Œ c}«      ‘ŒY c}}«      st        d|› d|j                  › d	�«      ‚|S c c}w c c}w c c}w c c}w c c}}w )NÚ/z" is not a valid subpath of any of )ÚtÚtxÚtyÚtzÚqÚrxÚryÚrzz is not a valid action z/Track times and values need to have same lengthz#Time values need to be int or float)r‹  rŒ  r�  r�  r�  r‘  z1Value values need to be int or float for action 'Ú')rŠ  rŽ  rŠ  é   é   zValue values need to be z' dim lists of int or float for action ')rÊ   r”   ÚkeysÚanyr'  r5   r4   rB   r6   r3   r7   r8   Úallr>   ÚintÚfloatrC   )	r:   ÚtrackÚpathsr5   ÚactionsrŠ  Úsizer$   Úxs	            r%   Ú_check_trackzCadViewer._check_trackò  s4  € Ø—‘×"Ñ"×'Ñ'Ó)ˆÜÉ%ÓPÉ%À$˜�v˜Q�Z×+Ñ+¨u¯z©z¨l¸!Ð,<Õ=È%ÑPÔQÜØ—:‘:�,Ð@ÄÀeÃÀÐNóð ò AˆØ�|‰|˜wÑ&Ü §¡˜~Ð-DÄTÈ'Ã]ÀOÐTÓUÐUäˆu�{‰{Óœs 5§<¡<Ó0Ò0ÜÐNÓOÐOä¸¿ºÓE¹°A”J˜q¤3¬ ,Õ/¸ÑEÔFÜÐBÓCÐCà�<‰<Ð?Ñ?Ü¸U¿\º\ÓJ¹\¸œ
 1¤s¬E lÕ3¸\ÑJÔKÜ ØGÈÏÉÀ~ÐUVÐWóð ð �<‰<˜:Ñ%ØŸ™¨Ò+‘1°ˆDÜð
 #Ÿ\š\ô	ñ *˜ô ˜q¤4¬ -Ó0ò FÜ˜Q› 4™òFäÁ!ÓDÁ!¸QœZ¨¬C´¨<Õ8À!ÑDÓEñFð *ò	ôô !Ø.¨t¨fÐ4[Ð\a×\hÑ\hÐ[iÐijÐkóð ð ˆùòG Qùò Fùò Kùò Eùós)   ®(IÃ>IÅIÇ 6I
Ç6IÈ	I
ÉI
c                 óX   — | j                   j                  | j                  |«      «       y)zá
        Add an animation track to CAD view

        Parameters
        ----------
        track: AnimationTrack
            Animation track, see [AnimationTrack](/widget.html#cad_viewer_widget.widget.AnimationTrack)
        N)r–   ÚappendrŸ  )r:   rš  s     r%   Ú	add_trackzCadViewer.add_track  s!   € ð 	�‰×Ñ˜4×,Ñ,¨UÓ3Õ4r'   c                 ób   — |€g n|D �cg c]  }| j                  |«      ‘Œ c}}|| _        yc c}w )zû
        Add a list of animation tracks to CAD view

        Parameters
        ----------
        tracks: list of AnimationTrack
            List of Animation tracks, see [AnimationTrack](/widget.html#cad_viewer_widget.widget.AnimationTrack)
        N)rŸ  r–   )r:   r–   rš  Úchecked_trackss       r%   rá   zCadViewer.add_tracks%  s;   € ð �.‰BÉVÓ&TÉVÀE t×'8Ñ'8¸Õ'?ÈVÑ&Tð 	ð %ˆ�ùò 'Us   ‰,c                 óÀ   — | j                   D �cg c]  }|j                  «       ‘Œ c}| j                  _         || j                  _        | j	                  d«       yc c}w )zÊ
        Send animation tracks to CAD view

        Parameters
        ----------
        speed : float, default: 1
            Animation speed, will be forwarded via `animation_speed` traitlet
        ÚanimateN)r–   rF   rÊ   r¾   rÙ   )r:   Úspeedrš  s      r%   r¦  zCadViewer.animate3  sI   € ð =A¿KºKÓH¹K°5˜eŸn™nÕ.¸KÑHˆ�‰ÔØ&+ˆ�‰Ô#Ø�‰�YÕùò Is   �Ac                 ó*   — | j                  ddg«       y)z,
        Start or unpause animation
        úviewer.controlAnimationÚplayNrØ   rÐ   s    r%   rª  zCadViewer.playB  ó   € ð
 	�‰Ð.°°Õ9r'   c                 ó*   — | j                  ddg«       y)z 
        Stop animation
        r©  ÚstopNrØ   rÐ   s    r%   r­  zCadViewer.stopI  r«  r'   c                 ó*   — | j                  ddg«       y)z,
        Pause or unpause animation
        r©  ÚpauseNrØ   rÐ   s    r%   r¯  zCadViewer.pauseP  s   € ð
 	�‰Ð.°°	Õ:r'   c                 ó(   — | j                  dd«       y)z%
        Pin CAD View as PNG
        ÚpinAsPngNrØ   rÐ   s    r%   Ú
pin_as_pngzCadViewer.pin_as_pngW  s   € ð
 	�‰�Z Õ&r'   c                 ó²   — t        |«      }|j                  «       s|j                  «       |z  }t        d|› �«       | j	                  dt        |«      «       y)z&
        Save CAD View as PNG
        zSaving CAD view to Ú	saveAsPngN)r   Úis_absoluteÚcwdr�   rÙ   r|  )r:   rd   r5   s      r%   Ú
export_pngzCadViewer.export_png^  sK   € ô �H‹~ˆØ×ÑÔ!Ø—8‘8“: Ñ$ˆDÜÐ# D 6Ð*Ô+Ø�‰�[¤# d£)Õ,r'   c                 ó.   — | j                   j                  S )z�
        Get or set the CadViewerWidget traitlet `tab`
        see [CadViewerWidget.tab](./widget.html#cad_viewer_widget.widget.CadViewerWidget.tab)
        ©rÊ   r¬   rÐ   s    r%   r¬   zCadViewer.tabl  s   € ð �{‰{�‰Ðr'   c                 ó&   — || j                   _        y r   r¹  rö   s     r%   r¬   zCadViewer.tabt  s   € àˆ�‰�r'   c                 óN   — | j                  d|g«       | j                  dg «       y)zÏ
        Set camera to one of the predefined locations

        Parameters
        ----------
        direction : string
            one of ["iso", "top", "bottom", "left", "right", "front", "rear"]
        zviewer.camera.presetCamerazviewer.updateNrØ   )r:   Ú	directions     r%   Ú
set_camerazCadViewer.set_camera|  s#   € ð 	�‰Ð1°I°;Ô?Ø�‰�_ bÕ)r'   c                 ó^   — | j                   dk7  rt        d«      ‚| j                  d|f«       y)z¯
        Rotate CAD obj around x-axis - trackball controls only

        Parameters
        ----------
        angle : float
            The rotation angle in degrees
        rÉ   z(rotateX only works for trackball controlzviewer.controls.rotateXN©r›   Ú	NameErrorrÙ   ©r:   Úangles     r%   Úrotate_xzCadViewer.rotate_x‰  ó-   € ð �<‰<˜;Ò&ÜÐFÓGÐGØ�‰Ð.°°Õ9r'   c                 ó^   — | j                   dk7  rt        d«      ‚| j                  d|f«       y)z¯
        Rotate CAD obj around y-axis - trackball controls only

        Parameters
        ----------
        angle : float
            The rotation angle in degrees
        rÉ   z(rotateY only works for trackball controlzviewer.controls.rotateYNr¿  rÁ  s     r%   Úrotate_yzCadViewer.rotate_y—  rÄ  r'   c                 ó^   — | j                   dk7  rt        d«      ‚| j                  d|f«       y)z¯
        Rotate CAD obj around z-axis - trackball controls only

        Parameters
        ----------
        angle : float
            The rotation angle in degrees
        rÉ   z(rotateZ only works for trackball controlzviewer.controls.rotateZNr¿  rÁ  s     r%   Úrotate_zzCadViewer.rotate_z¥  rÄ  r'   c                 ó^   — | j                   dk7  rt        d«      ‚| j                  d|f«       y)zË
        Rotate CAD obj up (positive angle) and down (negative angle) - orbit controls only

        Parameters
        ----------
        angle : float
            The rotation angle in degrees
        rÜ   z%rotateUp only works for orbit controlzviewer.controls.rotateUpNr¿  rÁ  s     r%   Ú	rotate_upzCadViewer.rotate_up³  s-   € ð �<‰<˜7Ò"ÜÐCÓDÐDØ�‰Ð/°%°Õ:r'   c                 ó^   — | j                   dk7  rt        d«      ‚| j                  d|f«       y)zÕ
        Rotate CAD obj to the left (positive angle) and right (negative angle) - orbit controls only

        Parameters
        ----------
        angle : float
            The rotation angle in degrees
        rÜ   z'rotateLeft only works for orbit controlzviewer.controls.rotateLeftNr¿  rÁ  s     r%   Úrotate_leftzCadViewer.rotate_leftÁ  s-   € ð �<‰<˜7Ò"ÜÐEÓFÐFØ�‰Ð1°E°8Õ<r'   c                 ó  — | j                   j                  �$| j                   j                  dk(  st        d«      ‚| j                  }d| _        t	        ||| j                   gt        | j                   «      ¬«       || _        y)aö  
        Exports the current widget view to an HTML file.

        Parameters:
        filename (str): The name of the HTML file to export. Default is "cadquery.html".
        title (str): The title of the HTML document. Default is "CadQuery".

        Raises:
        RuntimeError: If the widget is displayed in a sidecar.

        Notes:
        - This method temporarily disables pinning while exporting the HTML.
        - The state of the widget is captured and embedded in the HTML file.
        NÚ zNExport_html does not work with sidecar. Show the object again in a cell viewerF)rŠ   ÚviewsÚstate)rÊ   rŠ   ÚRuntimeErrorr�   r   r   )r:   rd   rŠ   r�   s       r%   Úexport_htmlzCadViewer.export_htmlÓ  ss   € ð —‘×!Ñ!Ð)¨T¯[©[×->Ñ->À"Ò-DÜØ`óð ð —,‘,ˆØˆŒäØØØ—;‘;�-Ü" 4§;¡;Ó/õ		
ð ˆ�r'   c                 ó\   ‡ ‡‡— dˆˆˆ fd„	}‰�t        ‰t        t        f«      s‰gŠ |«       S )aª  
        Execute a method of a Javascript object

        Parameters
        ----------
        method : string
            A 'CadViewer' object based Javascrip object path, e.g. `abc.def[3].method(args)` where `abc.def[3]` is the
            object notation relative to the 'CadViewer' object and `method` is the method to call
        args : list of any
            The arguments passed to `abc.def[3].method(args)`
        c                 óÊ   •— | €`‰xj                   dz  c_         ‰j                  ‰«      }d‰j                   |‰dœ}‰j                  j                  |d ¬«       ‰j                   S y )Nr   Úcad_viewer_method)r~  rw   ÚmethodÚargs)ÚcontentÚbuffers)rË   rÖ   rÊ   Úsend)ro   r5   rØ  r×  rÖ  r:   s      €€€r%   Úwrapperz"CadViewer.execute.<locals>.wrapper  se   ø€ Øˆ~Ø—’˜qÑ •à—{‘{ 6Ó*�ð 0ØŸ+™+Ø"Ø ñ	�ð —‘× Ñ ¨¸$Ð Ô?à—{‘{Ð"ð r'   r   )r>   rC   rB   )r:   rÖ  r×  rÛ  s   ``` r%   rÙ   zCadViewer.execute÷  s,   ú€ ÷	#ð  Ð¤J¨t´e¼T°]Ô$CØ�6ˆDÙ‹yÐr'   c                 ó
  — i d| j                   j                  “d| j                   j                  “d| j                   j                  “d| j                   j                  “d| j                   j
                  “d| j                   j                  “d| j                   j                  “d| j                   j                  “d	| j                   j                  “d
| j                   j                  “d| j                   j                  “d| j                   j                  “d| j                   j                  “d| j                   j                  “d| j                   j                  “d| j                   j                   “d| j                   j"                  “i d| j                   j$                  “d| j                   j&                  “d| j                   j(                  “d| j                   j*                  “d| j                   j,                  “d| j                   j.                  “d| j                   j0                  “d| j                   j2                  “d| j                   j4                  “d| j                   j6                  “d| j                   j8                  “d| j                   j:                  “d| j                   j<                  “d| j                   j>                  “d | j                   j@                  “d!| j                   jB                  “d"| j                   jD                  “¥| j                   jF                  | j                   jH                  | j                   jJ                  | j                   jL                  | j                   jN                  | j                   jP                  | j                   jR                  | j                   jT                  | j                   jV                  | j                   jX                  | j                   jZ                  | j                   j\                  | j                   j^                  | j                   j`                  | j                   jb                  d#œ¥}|r{|je                  | j                   jf                  | j                   jh                  | j                   jj                  | j                   jl                  | j                   jn                  d$œ«       |jq                  «       D ��ci c]  \  }}|€Œ	|i k7  sŒ||“Œ c}}S c c}}w )%a	  
        Returns the status of the widget with various properties.

        Args:
            shapes (bool): If True, includes the shapes in the status. Defaults to False.

        Returns:
            dict: A dictionary containing the status of the widget
        rŠ   r‹   rŒ   rb   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´   r¶   r·   r¸   r¹   rº   r»   r¼   r½   r¾   r¿   )r’   r“   r¥   r—   r‘   )9rÊ   rŠ   r‹   rŒ   rb   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´   r¶   r·   r¸   r¹   rº   r»   r¼   r½   r¾   r¿   Úupdater’   r“   r¥   r—   r‘   r    )r:   r—  r\   r#   r$   s        r%   ry   zCadViewer.status  sI  € ð2
Ø�T—[‘[×&Ñ&ð2
à�d—k‘k×(Ñ(ð2
ð ˜Ÿ™×.Ñ.ð2
ð �d—k‘k×(Ñ(ð	2
ð
 ˜$Ÿ+™+×0Ñ0ð2
ð �T—[‘[×&Ñ&ð2
ð �t—{‘{×*Ñ*ð2
ð �d—k‘k×(Ñ(ð2
ð �d—k‘k×(Ñ(ð2
ð   §¡×!>Ñ!>ð2
ð ˜tŸ{™{×:Ñ:ð2
ð   §¡×!>Ñ!>ð2
ð  §¡× <Ñ <ð2
ð ˜Ÿ™×.Ñ.ð2
ð ˜Ÿ™×.Ñ.ð2
ð  �T—[‘[×&Ñ&ð!2
ð" �T—[‘[×&Ñ&ñ#2
ð$ �T—[‘[×&Ñ&ð%2
ð& �t—{‘{×*Ñ*ð'2
ð( �$—+‘+—.‘.ð)2
ð* �D—K‘K×$Ñ$ð+2
ð, �T—[‘[×&Ñ&ð-2
ð. �D—K‘K×$Ñ$ð/2
ð0 ˜4Ÿ;™;×2Ñ2ð12
ð2 �t—{‘{×*Ñ*ð32
ð4 �T—[‘[×&Ñ&ð52
ð6 ˜4Ÿ;™;×2Ñ2ð72
ð8 ˜4Ÿ;™;×2Ñ2ð92
ð: ˜Ÿ™×,Ñ,ð;2
ð< �4—;‘;—?‘?ð=2
ð>   §¡×!>Ñ!>ð?2
ð@ ! $§+¡+×"@Ñ"@ðA2
ðB ˜4Ÿ;™;×2Ñ2ðC2
ðD ˜TŸ[™[×6Ñ6ñE2
ðF "Ÿ[™[×6Ñ6Ø!Ÿ[™[×6Ñ6Ø!Ÿ[™[×6Ñ6Ø!Ÿ[™[×6Ñ6Ø!Ÿ[™[×6Ñ6Ø ŸK™K×4Ñ4ØŸ™×,Ñ,ØŸ+™+×0Ñ0Ø—k‘k×(Ñ(Ø—K‘K×$Ñ$ØŸ+™+×0Ñ0ØŸ™×.Ñ.Ø ŸK™K×4Ñ4Ø#Ÿ{™{×:Ñ:ØŸ™×,Ñ,òc2
ˆñf Ø�M‰Mà"Ÿk™k×0Ñ0Ø"Ÿk™k×0Ñ0Ø"&§+¡+×"8Ñ"8Ø"Ÿk™k×0Ñ0Ø)-¯©×)FÑ)Fñôð "(§¡¤ÔM¡™˜˜A°1±=ÀQÈ"ÃW��1‘ ÒMÐMùÓMs   Ó!
S;Ó,S;Ó2S;c                 óª  — t        t        dj                  g d‘| j                  j                  › ‘d‘| j                  j
                  › ‘d‘| j                  j                  › ‘d‘| j                  j                  › ‘d‘| j                  j                  › ‘d‘| j                  j                  › ‘d‘| j                  j                  › ‘d	‘|r| j                  j                  nd
› ‘d‘| j                  j                  › ‘d‘| j                  j                  › ‘d‘| j                  j                  › ‘d‘| j                  j                  › ‘d‘| j                  j                   › ‘d‘| j                  j"                  › ‘d‘| j                  j$                  › ‘d‘| j                  j&                  › ‘d‘| j                  j(                  › ‘d‘| j                  j*                  › ‘d‘| j                  j,                  › ‘d‘| j                  j.                  › ‘d‘| j                  j0                  › ‘d‘| j                  j2                  › ‘d‘| j                  j4                  › ‘d‘| j                  j6                  › ‘d‘| j                  j8                  › ‘d‘| j                  j:                  › ‘d‘| j                  j<                  › ‘d‘| j                  j>                  › ‘d‘| j                  j@                  › ‘d ‘| j                  jB                  › ‘d!‘| j                  jD                  › ‘d"‘| j                  jF                  › ‘d#‘| j                  jH                  › ‘d$‘| j                  jJ                  › ‘d%‘| j                  jL                  › ‘d&‘| j                  jN                  › ‘d'‘| j                  jP                  › ‘d(‘| j                  jR                  › ‘d)‘| j                  jT                  › ‘d*‘| j                  jV                  › ‘d+‘| j                  jX                  › ‘d,‘| j                  jZ                  › ‘d-‘| j                  j\                  › ‘d.‘| j                  j^                  › ‘d/‘| j                  j`                  › ‘d0‘| j                  jb                  › ‘d1‘| j                  jd                  › ‘d2‘| j                  jf                  › ‘d3‘| j                  jh                  › ‘d4‘| j                  jj                  › ‘d5‘| j                  jl                  › ‘d6‘| j                  jn                  › ‘d7‘| j                  jp                  › ‘d8‘| j                  jr                  › ‘d9‘| j                  jt                  › ‘d:‘| j                  jv                  › ‘d;‘| j                  jx                  › ‘d<‘| j                  jz                  › ‘d=‘«      «      «       y>)?z²
        Dumps the status of the widget with various properties.

        Args:
            shapes (bool): If True, includes the shapes in the status. Defaults to False.
        rÎ  zE
                        DISPLAY
                title:              z%
                anchor:             z%
                cad_width:          z%
                height:             z%
                tree_width:         z%
                theme:              z%
                pinning:            zI

                            SHAPES
                shapes:             z... (set shapes=True)z%
                states:             z%
                tracks:             zg
                            
                            RENDERER
                normal_len:         z)
                default_edgecolor:      z%
                default_opacity:    z%
                ambient_intensity:  z%
                direct_intensity:   z%
                metalness:          z%
                roughness:          zs              
                            
                            VIEWER
                timeit:             z%
                tools:              z%
                glass:              z%
                ortho:              z%
                control:            z%
                up:                 z%
                axes:               z%
                axes0:              z%
                grid:               z%
                center_grid:        z%
                explode:            z%
                ticks:              z%
                transparent:        z%
                black_edges:        z%
                collapse:           z%
                tab:                z%
                clip_intersection:  z%
                clip_planes:        z%
                clip_normal_0:      z%
                clip_normal_1:      z%
                clip_normal_2:      z%
                clip_slider_0:      z%
                clip_slider_1:      z%
                clip_slider_2:      z%
                reset_camera:       z%
                position:           z%
                quaternion:         z%
                target:             z%
                zoom:               z%
                zoom_speed:         z%
                pan_speed:          z%
                rotate_speed:       z%
                animation_speed:    z%
                lastPick:           z%
                keymap:             z%
                new_tree_behavior:  zK

                            INTERNAL
                result:             z%
                disposed:           z%
                initialize:         z%
                debug:              z%
                image_id:           z
                N)>r�   r   ÚjoinrÊ   rŠ   r‹   rŒ   rb   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²   r³   r´   r¶   r·   r¸   r¹   rº   r»   r¼   r½   r¾   r¿   r’   r‘   r\   rÀ   rÁ   rÂ   rÃ   )r:   r“   s     r%   Ú
dump_modelzCadViewer.dump_modela  s±  € ô 	Ü÷Dó Dð %ð Dà%)§[¡[×%6Ñ%6Ð$7ðDð8%ðDð &*§[¡[×%7Ñ%7Ð$8ðDð9%ðDð &*§[¡[×%:Ñ%:Ð$;ð	Dð<%ð	Dð
 &*§[¡[×%7Ñ%7Ð$8ðDð
9%ðDð &*§[¡[×%;Ñ%;Ð$<ðDð=%ðDð &*§[¡[×%6Ñ%6Ð$7ðDð8%ðDð &*§[¡[×%8Ñ%8Ð$9ðDð:%ðDñ <B T§[¡[×%7Ò%7ÐG^Ð$_ðDð`%ðDð &*§[¡[×%7Ñ%7Ð$8ðDð9%ðDð &*§[¡[×%7Ñ%7Ð$8ðDð9%ðDð  &*§[¡[×%;Ñ%;Ð$<ð!Dð =)ð!Dð" *.¯©×)FÑ)FÐ(Gð#Dð"H%ð#Dð$ &*§[¡[×%@Ñ%@Ð$Að%Dð$B%ð%Dð& &*§[¡[×%BÑ%BÐ$Cð'Dð&D%ð'Dð( &*§[¡[×%AÑ%AÐ$Bð)Dð(C%ð)Dð* &*§[¡[×%:Ñ%:Ð$;ð+Dð*<%ð+Dð, &*§[¡[×%:Ñ%:Ð$;ð-Dð,<%ð-Dð2 &*§[¡[×%7Ñ%7Ð$8ð3Dð29%ð3Dð4 &*§[¡[×%6Ñ%6Ð$7ð5Dð48%ð5Dð6 &*§[¡[×%6Ñ%6Ð$7ð7Dð68%ð7Dð8 &*§[¡[×%6Ñ%6Ð$7ð9Dð88%ð9Dð: &*§[¡[×%8Ñ%8Ð$9ð;Dð::%ð;Dð< &*§[¡[§^¡^Ð$4ð=Dð<5%ð=Dð> &*§[¡[×%5Ñ%5Ð$6ð?Dð>7%ð?Dð@ &*§[¡[×%6Ñ%6Ð$7ðADð@8%ðADðB &*§[¡[×%5Ñ%5Ð$6ðCDðB7%ðCDðD &*§[¡[×%<Ñ%<Ð$=ðEDðD>%ðEDðF &*§[¡[×%8Ñ%8Ð$9ðGDðF:%ðGDðH &*§[¡[×%6Ñ%6Ð$7ðIDðH8%ðIDðJ &*§[¡[×%<Ñ%<Ð$=ðKDðJ>%ðKDðL &*§[¡[×%<Ñ%<Ð$=ðMDðL>%ðMDðN &*§[¡[×%9Ñ%9Ð$:ðODðN;%ðODðP &*§[¡[§_¡_Ð$5ðQDðP6%ðQDðR &*§[¡[×%BÑ%BÐ$CðSDðRD%ðSDðT &*§[¡[×%<Ñ%<Ð$=ðUDðT>%ðUDðV &*§[¡[×%>Ñ%>Ð$?ðWDðV@%ðWDðX &*§[¡[×%>Ñ%>Ð$?ðYDðX@%ðYDðZ &*§[¡[×%>Ñ%>Ð$?ð[DðZ@%ð[Dð\ &*§[¡[×%>Ñ%>Ð$?ð]Dð\@%ð]Dð^ &*§[¡[×%>Ñ%>Ð$?ð_Dð^@%ð_Dð` &*§[¡[×%>Ñ%>Ð$?ðaDð`@%ðaDðb &*§[¡[×%=Ñ%=Ð$>ðcDðb?%ðcDðd &*§[¡[×%9Ñ%9Ð$:ðeDðd;%ðeDðf &*§[¡[×%;Ñ%;Ð$<ðgDðf=%ðgDðh &*§[¡[×%7Ñ%7Ð$8ðiDðh9%ðiDðj &*§[¡[×%5Ñ%5Ð$6ðkDðj7%ðkDðl &*§[¡[×%;Ñ%;Ð$<ðmDðl=%ðmDðn &*§[¡[×%:Ñ%:Ð$;ðoDðn<%ðoDðp &*§[¡[×%=Ñ%=Ð$>ðqDðp?%ðqDðr &*§[¡[×%@Ñ%@Ð$AðsDðrB%ðsDðt &*§[¡[×%9Ñ%9Ð$:ðuDðt;%ðuDðv &*§[¡[×%7Ñ%7Ð$8ðwDðv9%ðwDðx &*§[¡[×%BÑ%BÐ$CðyDðxD%ðyDð~ &*§[¡[×%7Ñ%7Ð$8ðDð~9%ðDð@ &*§[¡[×%9Ñ%9Ð$:ðADð@;%ðADðB &*§[¡[×%;Ñ%;Ð$<ðCDðB=%ðCDðD &*§[¡[×%6Ñ%6Ð$7ðEDðD8%ðEDðF &*§[¡[×%9Ñ%9Ð$:ðGDðF;ôGDóFõH	
r'   )i   iX  rÇ   rß   ÚbrowserFTFNNTN)+Nr   z#707070g      à?g      ð?gš™™™™™ñ?g333333Ó?gÍÌÌÌÌÌä?NNNNNTNNNNNé
   NNNNNNNNNNNNNNNNNNNNFFF)r   )zcadquery.htmlÚCadQueryr   )F)QrG   rH   rI   rJ   r;   rÑ   rÖ   rÚ   rã   ræ   ré   Úpropertyr”   rð   rÀ   r¨   Úsetterr©   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�   rb   r¼   r½   r»   rº   r·   r¸   r¹   rs  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Ù   ry   rà  r.   r'   r%   rÅ   rÅ   ¿  sÿ  „ ñð< ØØØØØØØØØØØó*òX&òò'ð àØ#ØØØØØàØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØó_k!òZ)ò$ð ñ"ó ð"ò/ð ñ$ó ð$ð ñ-ó ð-ð ×Ññ.ó ð.ð ñ,ó ð,ð ×Ññ-ó ð-ð ñ%ó ð%ð ×Ññ&ó ð&ð ñ%ó ð%ð ×Ññ&ó ð&ð ñ ó ð ð 
‡[�[ñ!ó ð!ð ñ!ó ð!ð ‡\�\ñ"ó ð"ð ñ ó ð ð 
‡[�[ñ!ó ð!ð ñ'ó ð'ð ×Ññ(ó ð(ð ñ#ó ð#ð ‡^�^ñ$ó ð$ð ñ!ó ð!ð ‡\�\ñ"ó ð"ð ñ'ó ð'ð ×Ññ(ó ð(ð ñ'ó ð'ð ×Ññ(ó ð(ð ñ'ó ð'ð ñ-ó ð-ð ×Ññ8ó ð8ð ñ+ó ð+ð ×Ññ,ó ð,ð ñ-ó ð-ð ×Ññ.ó ð.ð ñ)ó ð)ð ×Ññ*ó ð*ð ñ)ó ð)ð ×Ññ*ó ð*ð ñ)ó ð)ð ×Ññ*ó ð*ð ñ)ó ð)ð ×Ññ*ó ð*ð ñ)ó ð)ð ×Ññ*ó ð*ð ñ)ó ð)ð ×Ññ*ó ð*ð ñ'ó ð'ð ×Ññ(ó ð(ð ñ.ó ð.ð ×Ññ/ó ð/ð ñ!ó ð!ð ‡\�\ñ"ó ð"ð ñ!ó ð!ð ‡\�\ñ"ó ð"ð ñ!ó ð!ð ‡\�\ñ"ó ð"ð ñ%ó ð%ð ×Ññ&ó ð&ð ñ&ó ð&ð ×Ññ'ó ð'ð ñ"ó ð"ð ‡]�]ñ#ó ð#ð ñ%ó ð%ð ×Ññ&ó ð&ð ñ(ó ð(ð ×Ññ)ó ð)ð ñ&ó ð&ð ×Ññ'ó ð'ð ñ ó ð ð 
‡[�[ñ!ó ð!ð ñ$ó ð$ð ‡_�_ñ%ó ð%ð ñ&ó ð&ð ×Ññ+ó ð+ð ñ"ó ð"ð ‡]�]ñ#ó ð#ð ñ$ó ð$ð ñ#ó ð#ð ñó ðð ñ#ó ð#ð ‡^�^ñ#ó ð#ð ñ.ó ð.ð ‡_�_ñHó ðHð ñ"ó ð"ð ‡]�]ñ#ó ð#ð ñ-ó ð-ð ×Ññ.ó ð.ò ò%òN
5ò%ó ò:ò:ò;ò'ò-ð ñó ðð ‡]�]ñ ó ð ò*ò:ò:ò:ò;ò=ó$óHóBGNôRO
r'   rÅ   ).rJ   rj   rf   Úpathlibr   Útextwrapr   Únumpyr?   Ú
ipywidgetsÚwidgetsÚipywidgets.embedr   r   Ú	traitletsr   r   r	   r
   r   r   r   r   r   r   r   ÚIPython.displayr   r   Ú	pyparsingr   Úutilsr   r   r   r   r)   r!   r&   r,   r/   r1   ÚregisterÚOutputrL   rÅ   r.   r'   r%   Ú<module>rò     s­   ðá =ã Û Ý Ý ã ã ß A÷÷ ÷ ñ ÷ 1Ý $ç :Ó :ð 
€à	Ø	Ø	Ø	ñ	€òòò÷
TQñ TQðn 	×Ñôj(Ø‡N�Nój(ó ðj(÷Z	q
ò q
r'   