§
    ¡)ýfûñ  ã                   óò  — 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mZ d dlmZmZmZmZ d dlmZmZmZ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#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z<m=Z= d dl>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZM d dlNmOZOmPZPmQZQ d dlRZRd dlSZSd d	lTmUZU d d
lVmWZWmXZXmYZYmZZZm[Z[ d dl\m]Z] g Z^g Z_g Z` G d„ de9¦  «        Za G d„ de9¦  «        Zb G d„ deb¦  «        Zc G d„ d¦  «        Zd G d„ ded¦  «        Ze G d„ de9ed¦  «        Zf G d„ dea¦  «        Zg G d„ dec¦  «        Zh G d„ deeec¦  «        Zi G d„ dea¦  «        Zj G d „ d!ec¦  «        Zk G d"„ d#eeec¦  «        Zl G d$„ d%ea¦  «        Zm G d&„ d'ec¦  «        Zn G d(„ d)eeec¦  «        Zo G d*„ d+ea¦  «        Zp G d,„ d-ec¦  «        Zq G d.„ d/eeec¦  «        Zr G d0„ d1eeeb¦  «        Zs G d2„ d3ea¦  «        Zt G d4„ d5ec¦  «        Zu G d6„ d7eeec¦  «        Zv G d8„ d9¦  «        Zw G d:„ d;eeebew¦  «        Z; G d<„ d=eaew¦  «        Zx G d>„ d?ecew¦  «        Zyd@„ Zz G dA„ dBea¦  «        Z{ G dC„ dDec¦  «        Z| G dE„ dFeeec¦  «        Z}dG„ Z~ G dH„ dIea¦  «        Z G dJ„ dKec¦  «        Z€ G dL„ dMeeec¦  «        Z� G dN„ dOe9¦  «        Z‚ G dP„ dQe9¦  «        Zƒ G dR„ dSe9¦  «        Z„ G dT„ dUe9¦  «        Z… G dV„ dWe9¦  «        Z† G dX„ dYe9¦  «        Z‡ G dZ„ d[e	¦  «        Zˆd\„ Z‰ G d]„ d^e	¦  «        ZŠ G d_„ d`e¦  «        Z‹ G da„ dbe¦  «        ZŒ G dc„ dd¦  «        Z� G de„ dfe9¦  «        ZŽ G dg„ dhe¦  «        Z� G di„ dje	¦  «        Z� G dk„ dle	¦  «        Z‘ G dm„ dne	¦  «        Z’ G do„ dpe¦  «        Z“ G dq„ dre¦  «        Z” G ds„ dte¦  «        Z• G du„ dv¦  «        Z– e–¦   «         Z—dw„ Z˜dx„ Z™ejš        ej›        ejœ        ej�        ejž        dyœZŸdz„ Z dS ){é    )ÚBinaryPredicate1DÚIntegrationTypeÚInterface0DIteratorÚNatureÚNoiseÚ	OperatorsÚStrokeAttributeÚUnaryPredicate0DÚUnaryPredicate1DÚTVertexÚMaterialÚViewEdge)ÚChainPredicateIteratorÚChainSilhouetteIteratorÚ pySketchyChainSilhouetteIteratorÚpySketchyChainingIterator)ÚCurvature2DAngleF0DÚNormal2DF0DÚQuantitativeInvisibilityF1DÚVertexOrientation2DF0DÚCurveMaterialF0D)ÚAndUP1DÚContourUP1DÚExternalContourUP1DÚ	FalseBP1DÚ	FalseUP1DÚLength2DBP1DÚNotBP1DÚNotUP1DÚOrUP1DÚQuantitativeInvisibilityUP1DÚTrueBP1DÚTrueUP1DÚWithinImageBoundaryUP1DÚpyNFirstUP1DÚpyNatureUP1DÚpyProjectedXBP1DÚpyProjectedYBP1DÚpyZBP1D)ÚBackboneStretcherShaderÚBezierCurveShaderÚBlenderTextureShaderÚConstantColorShaderÚGuidingLinesShaderÚPolygonalizationShaderÚpyBluePrintCirclesShaderÚpyBluePrintEllipsesShaderÚpyBluePrintSquaresShaderÚRoundCapShaderÚSamplingShaderÚSpatialNoiseShaderÚSquareCapShaderÚStrokeShaderÚStrokeTextureStepShaderÚThicknessNoiseShaderÚTipRemoverShader)Úangle_x_normalÚboundÚBoundedPropertyÚContextFunctionsÚcurvature_from_stroke_vertexÚgetCurrentSceneÚiter_distance_along_strokeÚiter_distance_from_cameraÚiter_distance_from_objectÚiter_material_valueÚiter_t2d_along_strokeÚnormal_at_I0DÚpairwiseÚsimplifyÚstroke_normal)Ú	blendRampÚevaluateColorRampÚevaluateCurveMappingFN)ÚVector)ÚpiÚsinÚcosÚacosÚradians)Úcyclec                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚColorRampModifierz"Primitive for the color modifiers.c                 óX   — t          j        | ¦  «         || _        || _        || _        d S ©N)r7   Ú__init__ÚblendÚ	influenceÚramp)ÚselfrY   rZ   r[   s       ú`/home/blender/git/blender-v430/install_release/4.3/scripts/freestyle/modules/parameter_editor.pyrX   zColorRampModifier.__init__t   s,   € ÝÔ˜dÑ#Ô#Ð#ØˆŒ
Ø"ˆŒØˆŒ	ˆ	ˆ	ó    c                 ó:   — t          | j        |¦  «        }|j        S rW   )rK   r[   Úxyz)r\   ÚtÚcols      r]   ÚevaluatezColorRampModifier.evaluatez   s   € Ý ¤	¨1Ñ-Ô-ˆØŒwˆr^   c                 ó:   — t          | j        || j        |¦  «        S rW   )rJ   rY   rZ   )r\   ÚaÚbs      r]   Ú
blend_rampzColorRampModifier.blend_ramp~   s   € Ý˜œ Q¨¬¸Ñ:Ô:Ð:r^   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rX   rc   rg   © r^   r]   rU   rU   q   sG   € € € € € Ø,Ð,ðð ð ðð ð ð;ð ;ð ;ð ;ð ;r^   rU   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚScalarBlendModifierz,Primitive for alpha and thickness modifiers.c                 óJ   — t          j        | ¦  «         || _        || _        d S rW   )r7   rX   Ú
blend_typerZ   )r\   rp   rZ   s      r]   rX   zScalarBlendModifier.__init__…   s%   € ÝÔ˜dÑ#Ô#Ð#Ø$ˆŒØ"ˆŒˆˆr^   c                 ó  — | j         }d|z
  }| j        dk    r||z  ||z  z   }nÝ| j        dk    r	|||z  z  }nÉ| j        dk    r||||z  z   z  }n²| j        dk    r	|||z  z  }nž| j        dk    r|dk    r||z  ||z  |z  z   n|}n|| j        dk    r||z  |t          ||z
  ¦  «        z  z   }nU| j        d	k    rt          ||z  |¦  «        }n6| j        d
k    rt	          ||z  |¦  «        }nt          d| j        z   ¦  «        ‚|S )Nç      ð?ÚMIXÚADDÚMULTIPLYÚSUBTRACTÚDIVIDEç        Ú
DIFFERENCEÚMINIMUMÚMAXIMUMzunknown curve blend type: )rZ   rp   ÚabsÚminÚmaxÚ
ValueError)r\   Úv1Úv2ÚfacÚfacms        r]   rY   zScalarBlendModifier.blendŠ   sI  € ØŒnˆØ�S‰yˆØŒ?˜eÒ#Ð#Ø˜‘˜S 2™XÑ%ˆBˆBØŒ_ Ò%Ð%Ø�#˜‘(‰NˆBˆBØŒ_ 
Ò*Ð*Ø�$˜˜r™‘/Ñ!ˆBˆBØŒ_ 
Ò*Ð*Ø�#˜‘(‰NˆBˆBØŒ_ Ò(Ð(Ø.0°Cªi¨i�˜‘˜S 2™X¨™]Ñ*Ð*¸RˆBˆBØŒ_ Ò,Ð,Ø˜‘˜S¥3 r¨B¡w¡<¤<Ñ/Ñ/ˆBˆBØŒ_ 	Ò)Ð)Ý�S˜2‘X˜rÑ"Ô"ˆBˆBØŒ_ 	Ò)Ð)Ý�S˜2‘X˜rÑ"Ô"ˆBˆBåÐ9¸D¼OÑKÑLÔLÐLØˆ	r^   N)rh   ri   rj   rk   rX   rY   rl   r^   r]   rn   rn   ‚   s8   € € € € € Ø6Ð6ð#ð #ð #ð
ð ð ð ð r^   rn   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚCurveMappingModifierc                 ó�   — t                                | ||¦  «         |dv sJ ‚t          | |¦  «        | _        || _        || _        d S )N>   ÚCURVEÚLINEAR)rn   rX   Úgetattrrc   ÚinvertÚcurve)r\   rY   rZ   ÚmappingrŠ   r‹   s         r]   rX   zCurveMappingModifier.__init__£   sO   € Ý×$Ò$ T¨5°)Ñ<Ô<Ð<ØÐ-Ð-Ð-Ð-Ð-Ý  gÑ.Ô.ˆŒØˆŒØˆŒ
ˆ
ˆ
r^   c                 ó   — | j         rd|z
  n|S )Nrr   )rŠ   )r\   ra   s     r]   rˆ   zCurveMappingModifier.LINEARª   s   € Ø œKÐ.��a‘�¨QÐ.r^   c                 ó²   — | j         }|                     ¦   «          |                     |j        d         |¬¦  «        }t	          |j        ||j        ¦  «        S )Nr   )r‹   Úposition)r‹   Ú
initializerc   Úcurvesr<   Ú
clip_min_yÚ
clip_max_y)r\   ra   r‹   Úresults       r]   r‡   zCurveMappingModifier.CURVE­   sP   € à”
ˆØ×ÒÑÔÐØ—’ e¤l°1¤oÀ�ÑBÔBˆõ �UÔ% v¨uÔ/?Ñ@Ô@Ð@r^   N)rh   ri   rj   rX   rˆ   r‡   rl   r^   r]   r…   r…   ¢   sF   € € € € € ðð ð ð/ð /ð /ðAð Að Að Að Ar^   r…   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚThicknessModifierMixInc                 óV   — t          ¦   «         }|j        j        j        dk    | _        d S )NÚPERSP)r@   ÚcameraÚdataÚtypeÚpersp_camera)r\   Úscenes     r]   rX   zThicknessModifierMixIn.__init__¸   s(   € ÝÑ!Ô!ˆØ"œ\Ô.Ô3°wÒ>ˆÔÐÐr^   c                 óL  — |j         }|j        }|t          j        z  rS| j        r5|j                             ¦   «          }|                     |j        ¦  «        }n|j        j	        }|dk     r||}}n%|t          j
        z  r|j        r||}}n
||z   dz  x}}||f|j        _        d S )Nrx   é   )ÚfedgeÚnaturer   ÚBORDERrœ   Úpoint_3dÚ
normalizedÚdotÚnormal_leftÚzÚ
SILHOUETTEÚ	is_smoothÚ	attributeÚ	thickness)r\   ÚsvÚouterÚinnerÚfer¡   ÚpointÚdirs           r]   Úset_thicknessz$ThicknessModifierMixIn.set_thickness¼   s½   € ØŒXˆØ”ˆØ•V”]Ñ"ð 	0ØÔ ð 'Øœ×/Ò/Ñ1Ô1Ð1�Ø—i’i ¤Ñ/Ô/��à”nÔ&�Ø�SŠyˆyØ$ e�u�øØ•vÔ(Ñ(ð 	0ØŒ|ð ,Ø$ e�u�øà" U™]¨aÑ/Ð/ˆE�EØ"'¨ ˆŒÔÐÐr^   N)rh   ri   rj   rX   r²   rl   r^   r]   r–   r–   ·   s5   € € € € € ð@ð @ð @ð0ð 0ð 0ð 0ð 0r^   r–   c                   ó(   — e Zd Zd„ Zdd„Zd„ Zd„ ZdS )ÚThicknessBlenderMixInc                 óV   — t                                | ¦  «         || _        || _        d S rW   )r–   rX   r�   Úratio)r\   r�   r¶   s      r]   rX   zThicknessBlenderMixIn.__init__Ð   s(   € Ý×'Ò'¨Ñ-Ô-Ð-Ø ˆŒØˆŒ
ˆ
ˆ
r^   Fc                 óÊ   — |r|\  }}|                       |||¦  «         dS t          |¦  «        t          t          hvrt	          |¦  «        }|                      ||¦  «         dS )zTBlends and sets the thickness with respect to the position, blend mode and symmetry.N)Úblend_thickness_asymmetricr›   ÚintÚfloatÚsumÚblend_thickness_symmetric)r\   Úsvertr«   Ú
asymmetricÚrightÚlefts         r]   Úblend_thicknessz%ThicknessBlenderMixIn.blend_thicknessÕ   sm   € àð 	=Ø#‰KˆE�4Ø×+Ò+¨E°5¸$Ñ?Ô?Ð?Ð?Ð?å�I‰Œ¥s­E lÐ2Ð2Ý 	™NœN�	Ø×*Ò*¨5°)Ñ<Ô<Ð<Ð<Ð<r^   c                 ó^  — |j         j        \  }}|                      ||z   |¦  «        }| j        dk    r|dz  x}}nZ| j        dk    rd|}}nJ| j        dk    r|d}}n:| j        dk    r|| j        z  ||| j        z  z
  }}nt          dt          z   ¦  «        ‚|                      |||¦  «         dS )	zNBlends and sets the thickness. Thickness is equal on each side of the backboneÚCENTERç      à?ÚINSIDEr   ÚOUTSIDEÚRELATIVEúunknown thickness position: N)rª   r«   rY   r�   r¶   r   r²   )r\   r½   Úvr­   r®   s        r]   r¼   z/ThicknessBlenderMixIn.blend_thickness_symmetricß   sÑ   € à”Ô0‰ˆˆuØ�JŠJ�u˜u‘} aÑ(Ô(ˆð Œ=˜HÒ$Ð$Ø ™GÐ#ˆE�E�EØŒ]˜hÒ&Ð&Ø˜a�5ˆEˆEØŒ]˜iÒ'Ð'Ø˜a�5ˆEˆEØŒ]˜jÒ(Ð(Ø˜tœz™>¨1°°D´J±Ñ+?�5ˆEˆEåÐ;½hÑFÑGÔGÐGà×Ò˜5 %¨Ñ/Ô/Ð/Ð/Ð/r^   c                 ó–  ‡ — |j         j        }||f}ˆ fd„t          ||¦  «        D ¦   «         \  }}|j        }|j        }|t
          j        z  rS‰ j        r5|j         	                    ¦   «          }| 
                    |j        ¦  «        }	n|j        j        }	|	dk     r||}}n|t
          j        z  r|j        r||}}||f|j         _        dS )zTBlends and sets the thickness. Thickness may be unequal on each side of the backbonec              3   ó,   •K  — | ]} ‰j         |Ž V — Œd S rW   )rY   )Ú.0Úvalr\   s     €r]   ú	<genexpr>zCThicknessBlenderMixIn.blend_thickness_asymmetric.<locals>.<genexpr>÷   s,   øè è € ÐAÐA¨C�z�t”z 3Ð'ÐAÐAÐAÐAÐAÐAr^   rx   N)rª   r«   Úzipr    r¡   r   r¢   rœ   r£   r¤   r¥   r¦   r§   r¨   r©   )
r\   r½   r¿   rÀ   ÚoldÚnewr¯   r¡   r°   r±   s
   `         r]   r¸   z0ThicknessBlenderMixIn.blend_thickness_asymmetricò   sä   ø€ ð ŒoÔ'ˆØ�dˆmˆØAÐAÐAÐAµ3°s¸C±=´=ÐAÑAÔA‰ˆˆtàŒ[ˆØ”ˆØ•V”]Ñ"ð 
	*ØÔ ð 'Øœ×2Ò2Ñ4Ô4Ð4�Ø—i’i ¤Ñ/Ô/��à”nÔ&�Ø�SŠyˆyØ" E�t�øØ•vÔ(Ñ(ð 	*ØŒ|ð *Ø" E�t�Ø%*¨D MˆŒÔ!Ð!Ð!r^   N)F)rh   ri   rj   rX   rÁ   r¼   r¸   rl   r^   r]   r´   r´   Ï   sU   € € € € € ðð ð ð
=ð =ð =ð =ð0ð 0ð 0ð&2ð 2ð 2ð 2ð 2r^   r´   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚBaseThicknessShaderc                 ó^  — t          j        | ¦  «         t                               | ¦  «         |dk    r|dz  | _        || j        z
  | _        d S |dk    rd| _        || _        d S |dk    r|| _        d| _        d S |dk    r||z  | _        || j        z
  | _        d S t          d|z   ¦  «        ‚)NrÃ   rÄ   rÅ   r   rÆ   rÇ   rÈ   )r7   rX   r–   r­   r®   r   )r\   r«   r�   r¶   s       r]   rX   zBaseThicknessShader.__init__
  sÆ   € ÝÔ˜dÑ#Ô#Ð#Ý×'Ò'¨Ñ-Ô-Ð-Ø�xÒÐØ" S™ˆDŒJØ" T¤ZÑ/ˆDŒJˆJˆJØ˜Ò!Ð!ØˆDŒJØ"ˆDŒJˆJˆJØ˜Ò"Ð"Ø"ˆDŒJØˆDŒJˆJˆJØ˜Ò#Ð#Ø" UÑ*ˆDŒJØ" T¤ZÑ/ˆDŒJˆJˆJåÐ;¸hÑFÑGÔGÐGr^   c                 óR   — |D ]#}|                       || j        | j        ¦  «         Œ$d S rW   )r²   r­   r®   )r\   Ústroker½   s      r]   ÚshadezBaseThicknessShader.shade  s:   € Øð 	>ð 	>ˆEØ×Ò˜u d¤j°$´*Ñ=Ô=Ð=Ð=ð	>ð 	>r^   N©rh   ri   rj   rX   r×   rl   r^   r]   rÓ   rÓ   	  s5   € € € € € ðHð Hð Hð$>ð >ð >ð >ð >r^   rÓ   c                   ó   — e Zd ZdZd„ ZdS )ÚColorAlongStrokeShaderzKMaps a ramp to the color of the stroke, using the curvilinear abscissa (t).c                 óÎ   — t          |t          |¦  «        ¦  «        D ]F\  }}|j        j        }|                      |¦  «        }|                      ||¦  «        |j        _        ŒGd S rW   )rÏ   rE   rª   Úcolorrc   rg   ©r\   rÖ   r½   ra   re   rf   s         r]   r×   zColorAlongStrokeShader.shade&  sh   € Ý˜FÕ$9¸&Ñ$AÔ$AÑBÔBð 	:ð 	:‰HˆE�1Ø”Ô%ˆAØ—’˜aÑ Ô ˆAØ$(§O¢O°A°qÑ$9Ô$9ˆEŒOÔ!Ð!ð	:ð 	:r^   N©rh   ri   rj   rk   r×   rl   r^   r]   rÚ   rÚ   #  s)   € € € € € ØUÐUð:ð :ð :ð :ð :r^   rÚ   c                   ó   — e Zd ZdZd„ ZdS )ÚAlphaAlongStrokeShaderzYMaps a curve to the alpha/transparency of the stroke, using the curvilinear abscissa (t).c                 óÎ   — t          |t          |¦  «        ¦  «        D ]F\  }}|j        j        }|                      |¦  «        }|                      ||¦  «        |j        _        ŒGd S rW   )rÏ   rE   rª   Úalpharc   rY   rÝ   s         r]   r×   zAlphaAlongStrokeShader.shade0  sh   € Ý˜FÕ$9¸&Ñ$AÔ$AÑBÔBð 	5ð 	5‰HˆE�1Ø”Ô%ˆAØ—’˜aÑ Ô ˆAØ$(§J¢J¨q°!Ñ$4Ô$4ˆEŒOÔ!Ð!ð	5ð 	5r^   NrÞ   rl   r^   r]   rà   rà   -  s)   € € € € € ØcÐcð5ð 5ð 5ð 5ð 5r^   rà   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚThicknessAlongStrokeShaderzPMaps a curve to the thickness of the stroke, using the curvilinear abscissa (t).c
                 ó¦   — t                                | ||¦  «         t                               | |||||¦  «         t          ||	¦  «        | _        d S rW   )r´   rX   r…   r=   Úvalue)
r\   Úthickness_positionÚthickness_ratiorY   rZ   rŒ   rŠ   r‹   Ú	value_minÚ	value_maxs
             r]   rX   z#ThicknessAlongStrokeShader.__init__:  sN   € å×&Ò& tÐ-?ÀÑQÔQÐQÝ×%Ò% d¨E°9¸gÀvÈuÑUÔUÐUÝ$ Y°	Ñ:Ô:ˆŒ
ˆ
ˆ
r^   c                 óÖ   — t          |t          |¦  «        ¦  «        D ]J\  }}| j        j        |                      |¦  «        | j        j        z  z   }|                      ||¦  «         ŒKd S rW   )rÏ   rE   ræ   r}   rc   ÚdeltarÁ   ©r\   rÖ   r½   ra   rf   s        r]   r×   z ThicknessAlongStrokeShader.shade@  so   € Ý˜FÕ$9¸&Ñ$AÔ$AÑBÔBð 	+ð 	+‰HˆE�1Ø”
” §¢¨qÑ!1Ô!1°D´JÔ4DÑ!DÑDˆAØ× Ò  ¨Ñ*Ô*Ð*Ð*ð	+ð 	+r^   N©rh   ri   rj   rk   rX   r×   rl   r^   r]   rä   rä   7  s8   € € € € € ØZÐZð;ð ;ð ;ð+ð +ð +ð +ð +r^   rä   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚColorDistanceFromCameraShaderzNPicks a color value from a ramp based on the vertex' distance from the camera.c                 ój   — t                                | |||¦  «         t          ||¦  «        | _        d S rW   )rU   rX   r=   Úrange)r\   rY   rZ   r[   Ú	range_minÚ	range_maxs         r]   rX   z&ColorDistanceFromCameraShader.__init__K  s1   € Ý×"Ò" 4¨°	¸4Ñ@Ô@Ð@Ý$ Y°	Ñ:Ô:ˆŒ
ˆ
ˆ
r^   c                 ó¼   — t          |g| j        ¢R Ž }|D ]F\  }}|j        j        }|                      |¦  «        }|                      ||¦  «        |j        _        ŒGd S rW   )rB   rò   rª   rÜ   rc   rg   ©r\   rÖ   Úitr½   ra   re   rf   s          r]   r×   z#ColorDistanceFromCameraShader.shadeO  sl   € Ý& vÐ;°´
Ð;Ð;Ð;ˆØð 	:ð 	:‰HˆE�1Ø”Ô%ˆAØ—’˜aÑ Ô ˆAØ$(§O¢O°A°qÑ$9Ô$9ˆEŒOÔ!Ð!ð	:ð 	:r^   Nrî   rl   r^   r]   rð   rð   H  s8   € € € € € ØXÐXð;ð ;ð ;ð:ð :ð :ð :ð :r^   rð   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚAlphaDistanceFromCameraShaderzOPicks an alpha value from a curve based on the vertex' distance from the camerac                 ón   — t                                | |||||¦  «         t          ||¦  «        | _        d S rW   )r…   rX   r=   rò   )r\   rY   rZ   rŒ   rŠ   r‹   ró   rô   s           r]   rX   z&AlphaDistanceFromCameraShader.__init__Z  s5   € Ý×%Ò% d¨E°9¸gÀvÈuÑUÔUÐUÝ$ Y°	Ñ:Ô:ˆŒ
ˆ
ˆ
r^   c                 ó¼   — t          |g| j        ¢R Ž }|D ]F\  }}|j        j        }|                      |¦  «        }|                      ||¦  «        |j        _        ŒGd S rW   )rB   rò   rª   râ   rc   rY   rö   s          r]   r×   z#AlphaDistanceFromCameraShader.shade^  sl   € Ý& vÐ;°´
Ð;Ð;Ð;ˆØð 	5ð 	5‰HˆE�1Ø”Ô%ˆAØ—’˜aÑ Ô ˆAØ$(§J¢J¨q°!Ñ$4Ô$4ˆEŒOÔ!Ð!ð	5ð 	5r^   Nrî   rl   r^   r]   rù   rù   W  s8   € € € € € ØYÐYð;ð ;ð ;ð5ð 5ð 5ð 5ð 5r^   rù   c                   ó   — e Zd ZdZd„ Zd„ ZdS )Ú!ThicknessDistanceFromCameraShaderzSPicks a thickness value from a curve based on the vertex' distance from the camera.c                 óÐ   — t                                | ||¦  «         t                               | |||||¦  «         t          ||	¦  «        | _        t          |
|¦  «        | _        d S rW   )r´   rX   r…   r=   rò   ræ   )r\   rç   rè   rY   rZ   rŒ   rŠ   r‹   ró   rô   ré   rê   s               r]   rX   z*ThicknessDistanceFromCameraShader.__init__i  s_   € å×&Ò& tÐ-?ÀÑQÔQÐQÝ×%Ò% d¨E°9¸gÀvÈuÑUÔUÐUÝ$ Y°	Ñ:Ô:ˆŒ
Ý$ Y°	Ñ:Ô:ˆŒ
ˆ
ˆ
r^   c                 óÀ   — t          |g| j        ¢R Ž D ]J\  }}| j        j        |                      |¦  «        | j        j        z  z   }|                      ||¦  «         ŒKd S rW   )rB   rò   ræ   r}   rc   rì   rÁ   rí   s        r]   r×   z'ThicknessDistanceFromCameraShader.shadep  sn   € Ý3°FÐH¸T¼ZÐHÐHÐHð 	+ð 	+‰JˆU�AØ”
” §¢¨qÑ!1Ô!1°D´JÔ4DÑ!DÑDˆAØ× Ò  ¨Ñ*Ô*Ð*Ð*ð	+ð 	+r^   Nrî   rl   r^   r]   rý   rý   f  s8   € € € € € Ø]Ð]ð;ð ;ð ;ð+ð +ð +ð +ð +r^   rý   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚColorDistanceFromObjectShaderzRPicks a color value from a ramp based on the vertex' distance from a given object.c                 óþ   — t                                | |||¦  «         |€t          d¦  «        ‚t          ||¦  «        | _        t          ¦   «         j        j                             ¦   «         }||j	        z  | _
        d S )Nz4ColorDistanceFromObjectShader: target can't be None )rU   rX   r   r=   rò   r@   r™   Úmatrix_worldÚinvertedÚlocationÚloc)r\   rY   rZ   r[   Útargetró   rô   Úmatrixs           r]   rX   z&ColorDistanceFromObjectShader.__init__{  sp   € Ý×"Ò" 4¨°	¸4Ñ@Ô@Ð@Øˆ>ÝÐSÑTÔTÐTÝ$ Y°	Ñ:Ô:ˆŒ
å Ñ"Ô"Ô)Ô6×?Ò?ÑAÔAˆà˜FœOÑ+ˆŒˆˆr^   c                 óÈ   — t          || j        g| j        ¢R Ž }|D ]F\  }}|j        j        }|                      |¦  «        }|                      ||¦  «        |j        _        ŒGd S rW   )rC   r  rò   rª   rÜ   rc   rg   rö   s          r]   r×   z#ColorDistanceFromObjectShader.shade…  sp   € Ý& v¨t¬xÐE¸$¼*ÐEÐEÐEˆØð 	:ð 	:‰HˆE�1Ø”Ô%ˆAØ—’˜aÑ Ô ˆAØ$(§O¢O°A°qÑ$9Ô$9ˆEŒOÔ!Ð!ð	:ð 	:r^   Nrî   rl   r^   r]   r  r  x  s8   € € € € € Ø\Ð\ð,ð ,ð ,ð:ð :ð :ð :ð :r^   r  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚAlphaDistanceFromObjectShaderzTPicks an alpha value from a curve based on the vertex' distance from a given object.c	                 ó  — t                                | |||||¦  «         |€t          d¦  «        ‚t          ||¦  «        | _        t          ¦   «         j        j                             ¦   «         }	|	|j	        z  | _
        d S )Nz4AlphaDistanceFromObjectShader: target can't be None )r…   rX   r   r=   rò   r@   r™   r  r  r  r  )
r\   rY   rZ   rŒ   rŠ   r‹   r  ró   rô   r  s
             r]   rX   z&AlphaDistanceFromObjectShader.__init__�  st   € Ý×%Ò% d¨E°9¸gÀvÈuÑUÔUÐUØˆ>ÝÐSÑTÔTÐTÝ$ Y°	Ñ:Ô:ˆŒ
å Ñ"Ô"Ô)Ô6×?Ò?ÑAÔAˆà˜FœOÑ+ˆŒˆˆr^   c                 óÈ   — t          || j        g| j        ¢R Ž }|D ]F\  }}|j        j        }|                      |¦  «        }|                      ||¦  «        |j        _        ŒGd S rW   )rC   r  rò   rª   râ   rc   rY   rö   s          r]   r×   z#AlphaDistanceFromObjectShader.shadeš  sp   € Ý& v¨t¬xÐE¸$¼*ÐEÐEÐEˆØð 	5ð 	5‰HˆE�1Ø”Ô%ˆAØ—’˜aÑ Ô ˆAØ$(§J¢J¨q°!Ñ$4Ô$4ˆEŒOÔ!Ð!ð	5ð 	5r^   Nrî   rl   r^   r]   r  r  �  s8   € € € € € Ø^Ð^ð,ð ,ð ,ð5ð 5ð 5ð 5ð 5r^   r  c                   ó   — e Zd ZdZd„ Zd„ ZdS )Ú!ThicknessDistanceFromObjectShaderzWPicks a thickness value from a curve based on the vertex' distance from a given object.c                 ód  — t                                | ||¦  «         t                               | |||||¦  «         |€t          d¦  «        ‚t	          |	|
¦  «        | _        t	          ||¦  «        | _        t          ¦   «         j        j	         
                    ¦   «         }||j        z  | _        d S )Nz8ThicknessDistanceFromObjectShader: target can't be None )r´   rX   r…   r   r=   rò   ræ   r@   r™   r  r  r  r  )r\   rç   rè   rY   rZ   rŒ   rŠ   r‹   r  ró   rô   ré   rê   r  s                 r]   rX   z*ThicknessDistanceFromObjectShader.__init__¥  sž   € å×&Ò& tÐ-?ÀÑQÔQÐQÝ×%Ò% d¨E°9¸gÀvÈuÑUÔUÐUØˆ>ÝÐWÑXÔXÐXÝ$ Y°	Ñ:Ô:ˆŒ
Ý$ Y°	Ñ:Ô:ˆŒ
å Ñ"Ô"Ô)Ô6×?Ò?ÑAÔAˆà˜FœOÑ+ˆŒˆˆr^   c                 óÐ   — t          || j        g| j        ¢R Ž }|D ]J\  }}| j        j        |                      |¦  «        | j        j        z  z   }|                      ||¦  «         ŒKd S rW   )rC   r  rò   ræ   r}   rc   rì   rÁ   )r\   rÖ   r÷   r½   ra   rf   s         r]   r×   z'ThicknessDistanceFromObjectShader.shade²  sw   € Ý& v¨t¬xÐE¸$¼*ÐEÐEÐEˆØð 	+ð 	+‰HˆE�1Ø”
” §¢¨qÑ!1Ô!1°D´JÔ4DÑ!DÑDˆAØ× Ò  ¨Ñ*Ô*Ð*Ð*ð	+ð 	+r^   Nrî   rl   r^   r]   r  r  ¢  s8   € € € € € ØaÐað,ð ,ð ,ð+ð +ð +ð +ð +r^   r  c                   ó&   — e Zd ZdZd„ Zh d£fd„ZdS )ÚColorMaterialShaderzCAssigns a color to the vertices based on their underlying material.c                 ó‚   — t                                | |||¦  «         || _        || _        t	          ¦   «         | _        d S rW   )rU   rX   rª   Úuse_rampr   Úfunc)r\   rY   rZ   r[   Úmaterial_attributer  s         r]   rX   zColorMaterialShader.__init__½  s;   € Ý×"Ò" 4¨°	¸4Ñ@Ô@Ð@Ø+ˆŒØ ˆŒÝ$Ñ&Ô&ˆŒ	ˆ	ˆ	r^   >   ÚDIFFÚLINEÚSPECc                 ó"  — t          |¦  «        }| j        s–| j        |v r�|D ]ˆ}|                      |¦  «        }| j        dk    r|j        dd…         }n*| j        dk    r|j        dd…         }n|j        dd…         }|j        j        }|                      ||¦  «        |j        _        Œ‰d S t          || j        | j        ¦  «        D ]F\  }}|j        j        }|  
                    |¦  «        }|                      ||¦  «        |j        _        ŒGd S )Nr  r   é   r  )r   r  rª   r  ÚlineÚdiffuseÚspecularrÜ   rg   rD   rc   )	r\   rÖ   Ú
attributesr÷   r½   Úmaterialrf   re   ræ   s	            r]   r×   zColorMaterialShader.shadeÃ  s'  € Ý  Ñ(Ô(ˆØŒ}ð 	> ¤°:Ð!=Ð!=Øð 	>ð 	>�ØŸ9š9 R™=œ=�Ø”> VÒ+Ð+Ø œ a¨ cÔ*�A�AØ”^ vÒ-Ð-Ø Ô(¨¨1¨Ô-�A�Aà Ô)¨!¨A¨#Ô.�AØ”OÔ)�Ø(,¯ª¸¸1Ñ(=Ô(=�”Ô%Ð%ð	>ð 	>õ !4°F¸D¼IÀtÄ~Ñ VÔ Vð >ð >‘��uØ”OÔ)�Ø—M’M %Ñ(Ô(�Ø(,¯ª¸¸1Ñ(=Ô(=�”Ô%Ð%ð>ð >r^   Nrî   rl   r^   r]   r  r  º  sI   € € € € € ØMÐMð'ð 'ð 'ð (@Ð'?Ð'?ð >ð >ð >ð >ð >ð >r^   r  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚAlphaMaterialShaderzJAssigns an alpha value to the vertices based on their underlying material.c                 óx   — t                                | |||||¦  «         || _        t          ¦   «         | _        d S rW   )r…   rX   rª   r   r  )r\   rY   rZ   rŒ   rŠ   r‹   r  s          r]   rX   zAlphaMaterialShader.__init__Ú  s8   € Ý×%Ò% d¨E°9¸gÀvÈuÑUÔUÐUØ+ˆŒÝ$Ñ&Ô&ˆŒ	ˆ	ˆ	r^   c                 óÊ   — t          || j        | j        ¦  «        D ]F\  }}|j        j        }|                      |¦  «        }|                      ||¦  «        |j        _        ŒGd S rW   )rD   r  rª   râ   rc   rY   )r\   rÖ   r½   ræ   re   rf   s         r]   r×   zAlphaMaterialShader.shadeß  se   € Ý/°¸¼	À4Ä>ÑRÔRð 	5ð 	5‰LˆE�5Ø”Ô%ˆAØ—’˜eÑ$Ô$ˆAØ$(§J¢J¨q°!Ñ$4Ô$4ˆEŒOÔ!Ð!ð	5ð 	5r^   Nrî   rl   r^   r]   r#  r#  ×  s8   € € € € € ØTÐTð'ð 'ð 'ð
5ð 5ð 5ð 5ð 5r^   r#  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚThicknessMaterialShaderzMAssigns a thickness value to the vertices based on their underlying material.c                 óÚ   — t                                | ||¦  «         t                               | |||||¦  «         || _        t	          |	|
¦  «        | _        t          ¦   «         | _        d S rW   )r´   rX   r…   rª   r=   ræ   r   r  )r\   rç   rè   rY   rZ   rŒ   rŠ   r‹   r  ré   rê   s              r]   rX   z ThicknessMaterialShader.__init__é  sb   € å×&Ò& tÐ-?ÀÑQÔQÐQÝ×%Ò% d¨E°9¸gÀvÈuÑUÔUÐUØ+ˆŒÝ$ Y°	Ñ:Ô:ˆŒ
Ý$Ñ&Ô&ˆŒ	ˆ	ˆ	r^   c                 óÒ   — t          || j        | j        ¦  «        D ]J\  }}| j        j        |                      |¦  «        | j        j        z  z   }|                      ||¦  «         ŒKd S rW   )rD   r  rª   ræ   r}   rc   rì   rÁ   )r\   rÖ   r½   ræ   rf   s        r]   r×   zThicknessMaterialShader.shadeñ  sl   € Ý/°¸¼	À4Ä>ÑRÔRð 	+ð 	+‰LˆE�5Ø”
” §¢¨uÑ!5Ô!5¸¼
Ô8HÑ!HÑHˆAØ× Ò  ¨Ñ*Ô*Ð*Ð*ð	+ð 	+r^   Nrî   rl   r^   r]   r'  r'  æ  s8   € € € € € ØWÐWð'ð 'ð 'ð+ð +ð +ð +ð +r^   r'  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚCalligraphicThicknessShaderz;Thickness modifier for achieving a calligraphy-like effect.c                 ó&  — t                                | ||¦  «         t                               | ||¦  «         t          t	          |¦  «        t          |¦  «        f¦  «        | _        t          ||¦  «        | _        t          ¦   «         | _
        d S rW   )r´   rX   rn   rM   rP   rO   Úorientationr=   r«   r   r  )r\   rç   rè   rp   rZ   r-  Úthickness_minÚthickness_maxs           r]   rX   z$CalligraphicThicknessShader.__init__ü  sz   € å×&Ò& tÐ-?ÀÑQÔQÐQÝ×$Ò$ T¨:°yÑAÔAÐAÝ!¥3 {Ñ#3Ô#3µS¸Ñ5EÔ5EÐ"FÑGÔGˆÔÝ(¨¸ÑFÔFˆŒÝ*Ñ,Ô,ˆŒ	ˆ	ˆ	r^   c                 óf  — t          |¦  «        }|D ]ž}|                      |¦  «        }|j        dk    rZ|                     ¦   «          t	          |                     ¦   «         | j        z  ¦  «        }| j        j        || j        j	        z  z   }n| j        j        }|  
                    ||¦  «         ŒŸd S ©Nrx   )r   r  ÚlengthÚ	normalizer|   Ú
orthogonalr-  r«   r}   rì   rÁ   )r\   rÖ   r÷   r½   r±   r‚   rf   s          r]   r×   z!CalligraphicThicknessShader.shade  s®   € Ý  Ñ(Ô(ˆØð 	+ð 	+ˆEØ—)’)˜B‘-”-ˆCØŒz˜SÒ Ð Ø—’‘”�Ý˜#Ÿ.š.Ñ*Ô*¨TÔ-=Ñ=Ñ>Ô>�Ø”NÔ&¨¨t¬~Ô/CÑ)CÑC��à”NÔ&�Ø× Ò  ¨Ñ*Ô*Ð*Ð*ð	+ð 	+r^   Nrî   rl   r^   r]   r+  r+  ù  s8   € € € € € ØEÐEð-ð -ð -ð
+ð 
+ð 
+ð 
+ð 
+r^   r+  c                   ó   — e Zd ZdZd„ ZdS )ÚTangentColorShaderz*Color based on the direction of the strokec                 óÞ   — t          |¦  «        }|D ]Z}t          |¦  «        }|                      |t          z  ¦  «        }|j        j        }|                      ||¦  «        |j        _        Œ[d S rW   )r   r;   rc   rN   rª   rÜ   rg   ©r\   rÖ   r÷   r½   Úangler‚   re   s          r]   r×   zTangentColorShader.shade  so   € Ý  Ñ(Ô(ˆØð 	<ð 	<ˆEÝ" 2Ñ&Ô&ˆEØ—-’- ­¡
Ñ+Ô+ˆCØ”Ô%ˆAØ$(§O¢O°A°sÑ$;Ô$;ˆEŒOÔ!Ð!ð		<ð 	<r^   NrÞ   rl   r^   r]   r6  r6    s)   € € € € € Ø4Ð4ð<ð <ð <ð <ð <r^   r6  c                   ó   — e Zd ZdZd„ ZdS )ÚTangentAlphaShaderz7Alpha transparency based on the direction of the strokec                 óÞ   — t          |¦  «        }|D ]Z}t          |¦  «        }|                      |t          z  ¦  «        }|j        j        }|                      ||¦  «        |j        _        Œ[d S rW   )r   r;   rc   rN   rª   râ   rY   r8  s          r]   r×   zTangentAlphaShader.shade"  so   € Ý  Ñ(Ô(ˆØð 	7ð 	7ˆEÝ" 2Ñ&Ô&ˆEØ—-’- ­¡
Ñ+Ô+ˆCØ”Ô%ˆAØ$(§J¢J¨q°#Ñ$6Ô$6ˆEŒOÔ!Ð!ð		7ð 	7r^   NrÞ   rl   r^   r]   r;  r;    s)   € € € € € ØAÐAð7ð 7ð 7ð 7ð 7r^   r;  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚTangentThicknessShaderz.Thickness based on the direction of the strokec
                 ó¦   — t                                | ||¦  «         t                               | |||||¦  «         t          ||	¦  «        | _        d S rW   )r´   rX   r…   r=   r«   )
r\   rç   rè   rY   rZ   rŒ   rŠ   r‹   r.  r/  s
             r]   rX   zTangentThicknessShader.__init__.  sN   € å×&Ò& tÐ-?ÀÑQÔQÐQÝ×%Ò% d¨E°9¸gÀvÈuÑUÔUÐUÝ(¨¸ÑFÔFˆŒˆˆr^   c                 óæ   — t          |¦  «        }|D ]^}t          |¦  «        }| j        j        |                      |t
          z  ¦  «        | j        j        z  z   }|                      ||¦  «         Œ_d S rW   )r   r;   r«   r}   rc   rN   rì   rÁ   )r\   rÖ   r÷   r½   r9  r«   s         r]   r×   zTangentThicknessShader.shade4  sw   € Ý  Ñ(Ô(ˆØð 	3ð 	3ˆEÝ" 2Ñ&Ô&ˆEØœÔ*¨T¯]ª]¸5Å2¹:Ñ-FÔ-FÈÌÔI]Ñ-]Ñ]ˆIØ× Ò  ¨	Ñ2Ô2Ð2Ð2ð	3ð 	3r^   Nrî   rl   r^   r]   r>  r>  +  s;   € € € € € Ø8Ð8ðGð Gð Gð3ð 3ð 3ð 3ð 3r^   r>  c                   óF   — e Zd ZdZdd„Z e¦   «          e¦   «         fd„ZdS )ÚNoiseShaderzBase class for noise shadersé   c                 ó<   — || _         d|z  |z  | _        || _        d S )Né   )Ú	amplitudeÚscaleÚseed)r\   rF  ÚperiodrH  s       r]   rX   zNoiseShader.__init__A  s$   € Ø"ˆŒØ˜‘Z $Ñ&ˆŒ
ØˆŒ	ˆ	ˆ	r^   c              #   ól  K  — |j         | j        z  |                     d¦  «        | j        z  z   }|j         | j        z  |                     ¦   «         | j        z  z   }|D ]U}|                     | j        |j        z  |z   d¦  «        }|                     | j        |j        z  |z   d¦  «        }|||fV — ŒVdS )zIProduces two noise values per StrokeVertex for every vertex in the strokerC  rŸ   N)Ú	length_2drH  ÚrandÚturbulence_smoothrG  Úcurvilinear_abscissa)	r\   rÖ   Ún1Ún2ÚinitU1ÚinitU2r½   re   rf   s	            r]   ÚnoisegenzNoiseShader.noisegenF  sÆ   è è € àÔ! D¤IÑ-°·²¸±´¸t¼yÑ0HÑHˆØÔ! D¤IÑ-°·²±	´	¸D¼IÑ0EÑEˆàð 	 ð 	 ˆEØ×$Ò$ T¤Z°%Ô2LÑ%LÈvÑ%UÐWXÑYÔYˆAØ×$Ò$ T¤Z°%Ô2LÑ%LÈvÑ%UÐWXÑYÔYˆAØ˜!˜Q�-ÐÐÐÐð	 ð 	 r^   N©rC  )rh   ri   rj   rk   rX   r   rS  rl   r^   r]   rB  rB  >  sU   € € € € € Ø&Ð&ðð ð ð ð
 #( %¡'¤'¨e¨e©g¬gð  ð  ð  ð  ð  ð  r^   rB  c                   ó"   — e Zd ZdZ	 dd„Zd„ ZdS )r9   zThickness based on pseudo-noiserC  Tc	                 ó¾   — t                                | ||¦  «         t                               | ||¦  «         t                               | |||¦  «         || _        d S rW   )rn   rX   r´   rB  r¾   )	r\   rç   rè   rp   rZ   rF  rI  rH  r¾   s	            r]   rX   zThicknessNoiseShader.__init__T  sX   € å×$Ò$ T¨:°yÑAÔAÐAÝ×&Ò& tÐ-?ÀÑQÔQÐQÝ×Ò˜T 9¨f°dÑ;Ô;Ð;Ø$ˆŒˆˆr^   c                 óÌ   — |                       |¦  «        D ]M\  }}}|j        j        \  }}||| j        z  z  }||| j        z  z  }|                      |||f| j        ¦  «         ŒNd S rW   )rS  rª   r«   rF  rÁ   r¾   )r\   rÖ   r½   Ú	noiseval1Ú	noiseval2ÚrÚls          r]   r×   zThicknessNoiseShader.shade[  sƒ   € Ø+/¯=ª=¸Ñ+@Ô+@ð 	Að 	AÑ'ˆE�9˜iØ”_Ô.‰FˆQ�Ø�˜Tœ^Ñ+Ñ+ˆAØ�˜Tœ^Ñ+Ñ+ˆAØ× Ò  ¨¨A¨°´Ñ@Ô@Ð@Ð@ð		Að 	Ar^   N)rC  Trî   rl   r^   r]   r9   r9   Q  sI   € € € € € Ø)Ð)ð EIð%ð %ð %ð %ðAð Að Að Að Ar^   r9   c                   ó    — e Zd ZdZdd„Zd„ ZdS )ÚColorNoiseShaderzColor based on pseudo-noiserC  c                 óz   — t                                | |||¦  «         t                               | |||¦  «         d S rW   )rU   rX   rB  )r\   rY   rZ   r[   rF  rI  rH  s          r]   rX   zColorNoiseShader.__init__f  s<   € Ý×"Ò" 4¨°	¸4Ñ@Ô@Ð@Ý×Ò˜T 9¨f°dÑ;Ô;Ð;Ð;Ð;r^   c                 óÜ   — |                       |¦  «        D ]U\  }}}t          ||z   ¦  «        }|                      |j        j        |                      |¦  «        ¦  «        |j        _        ŒVd S rW   )rS  r|   rg   rª   rÜ   rc   )r\   rÖ   r½   rX  rY  r�   s         r]   r×   zColorNoiseShader.shadej  sq   € Ø+/¯=ª=¸Ñ+@Ô+@ð 	dð 	dÑ'ˆE�9˜iÝ˜9 yÑ0Ñ1Ô1ˆHØ$(§O¢O°E´OÔ4IÈ4Ï=Ê=ÐYaÑKbÔKbÑ$cÔ$cˆEŒOÔ!Ð!ð	dð 	dr^   NrT  rî   rl   r^   r]   r]  r]  c  sB   € € € € € Ø%Ð%ð<ð <ð <ð <ðdð dð dð dð dr^   r]  c                   óF   — e Zd ZdZdd„Z e¦   «          e¦   «         fd„ZdS )ÚAlphaNoiseShaderz(Alpha transparency on based pseudo-noiserC  c	                 ó~   — t                                | |||||¦  «         t                               | |||¦  «         d S rW   )r…   rX   rB  )	r\   rY   rZ   rŒ   rŠ   r‹   rF  rI  rH  s	            r]   rX   zAlphaNoiseShader.__init__s  s@   € Ý×%Ò% d¨E°9¸gÀvÈuÑUÔUÐUÝ×Ò˜T 9¨f°dÑ;Ô;Ð;Ð;Ð;r^   c                 óÜ   — |                       |¦  «        D ]U\  }}}t          ||z   ¦  «        }|                      |j        j        |                      |¦  «        ¦  «        |j        _        ŒVd S rW   )rS  r|   rY   rª   râ   rc   )r\   rÖ   rO  rP  r½   rX  rY  r�   s           r]   r×   zAlphaNoiseShader.shadew  sq   € Ø+/¯=ª=¸Ñ+@Ô+@ð 	_ð 	_Ñ'ˆE�9˜iÝ˜9 yÑ0Ñ1Ô1ˆHØ$(§J¢J¨u¬Ô/DÀdÇmÂmÐT\ÑF]ÔF]Ñ$^Ô$^ˆEŒOÔ!Ð!ð	_ð 	_r^   NrT  )rh   ri   rj   rk   rX   r   r×   rl   r^   r]   ra  ra  p  s[   € € € € € Ø2Ð2ð<ð <ð <ð <ð  %˜u™wœw¨5¨5©7¬7ð _ð _ð _ð _ð _ð _r^   ra  c                 óÊ   — | j         }|r|j        s|j        t          j        z  sdS t          d|j                             |j        ¦  «         d¦  «        }t          |¦  «        S )zRReturns the crease angle between the StrokeVertex' two adjacent faces (in radians)Nç      ð¿rr   )
r    r©   r¡   r   ÚCREASEr<   r¦   r¥   Únormal_rightrQ   )r½   r¯   Úproducts      r]   Úcrease_angleri    sa   € à	Œ€BØð �”ð  b¤iµ&´-Ñ&?ð Øˆtå�D˜2œ>×-Ò-¨b¬oÑ>Ô>Ð>ÀÑDÔD€GÝ�‰=Œ=Ðr^   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚCreaseAngleColorShaderzUColor based on the crease angle between two adjacent faces on the underlying geometryc                 ój   — t                                | |||¦  «         t          ||¦  «        | _        d S rW   )rU   rX   r=   r9  )r\   rY   rZ   r[   Ú	angle_minÚ	angle_maxs         r]   rX   zCreaseAngleColorShader.__init__Œ  s1   € Ý×"Ò" 4¨°	¸4Ñ@Ô@Ð@å$ Y°	Ñ:Ô:ˆŒ
ˆ
ˆ
r^   c                 óâ   — |D ]k}t          |¦  «        }|€Œ| j                             |¦  «        }|                      |j        j        |                      |¦  «        ¦  «        |j        _        Œld S rW   )ri  r9  Úinterpolaterg   rª   rÜ   rc   ©r\   rÖ   r½   r9  ra   s        r]   r×   zCreaseAngleColorShader.shade‘  sv   € Øð 	]ð 	]ˆEÝ  Ñ'Ô'ˆEØˆ}ØØ”
×&Ò& uÑ-Ô-ˆAØ$(§O¢O°E´OÔ4IÈ4Ï=Ê=ÐYZÑK[ÔK[Ñ$\Ô$\ˆEŒOÔ!Ð!ð	]ð 	]r^   Nrî   rl   r^   r]   rk  rk  ‰  s=   € € € € € Ø_Ð_ð;ð ;ð ;ð
]ð ]ð ]ð ]ð ]r^   rk  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚCreaseAngleAlphaShaderzbAlpha transparency based on the crease angle between two adjacent faces on the underlying geometryc                 ón   — t                                | |||||¦  «         t          ||¦  «        | _        d S rW   )r…   rX   r=   r9  )r\   rY   rZ   rŒ   rŠ   r‹   rm  rn  s           r]   rX   zCreaseAngleAlphaShader.__init__�  s5   € Ý×%Ò% d¨E°9¸gÀvÈuÑUÔUÐUå$ Y°	Ñ:Ô:ˆŒ
ˆ
ˆ
r^   c                 óâ   — |D ]k}t          |¦  «        }|€Œ| j                             |¦  «        }|                      |j        j        |                      |¦  «        ¦  «        |j        _        Œld S rW   )ri  r9  rp  rY   rª   râ   rc   rq  s        r]   r×   zCreaseAngleAlphaShader.shade¢  sv   € Øð 	Xð 	XˆEÝ  Ñ'Ô'ˆEØˆ}ØØ”
×&Ò& uÑ-Ô-ˆAØ$(§J¢J¨u¬Ô/DÀdÇmÂmÐTUÑFVÔFVÑ$WÔ$WˆEŒOÔ!Ð!ð	Xð 	Xr^   Nrî   rl   r^   r]   rs  rs  š  s=   € € € € € ØlÐlð;ð ;ð ;ð
Xð Xð Xð Xð Xr^   rs  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚCreaseAngleThicknessShaderzYThickness based on the crease angle between two adjacent faces on the underlying geometryc                 óÐ   — t                                | ||¦  «         t                               | |||||¦  «         t          ||	¦  «        | _        t          |
|¦  «        | _        d S rW   )r´   rX   r…   r=   r9  r«   )r\   rç   rè   rY   rZ   rŒ   rŠ   r‹   rm  rn  r.  r/  s               r]   rX   z#CreaseAngleThicknessShader.__init__®  s_   € å×&Ò& tÐ-?ÀÑQÔQÐQÝ×%Ò% d¨E°9¸gÀvÈuÑUÔUÐUå$ Y°	Ñ:Ô:ˆŒ
Ý(¨¸ÑFÔFˆŒˆˆr^   c                 óò   — |D ]s}t          |¦  «        }|€Œ| j                             |¦  «        }| j        j        |                      |¦  «        | j        j        z  z   }|                      ||¦  «         Œtd S rW   )ri  r9  rp  r«   r}   rc   rì   rÁ   )r\   rÖ   r½   r9  ra   r«   s         r]   r×   z CreaseAngleThicknessShader.shade¶  sƒ   € Øð 	3ð 	3ˆEÝ  Ñ'Ô'ˆEØˆ}ØØ”
×&Ò& uÑ-Ô-ˆAØœÔ*¨T¯]ª]¸1Ñ-=Ô-=ÀÄÔ@TÑ-TÑTˆIØ× Ò  ¨	Ñ2Ô2Ð2Ð2ð	3ð 	3r^   Nrî   rl   r^   r]   rw  rw  «  s;   € € € € € ØcÐcðGð Gð Gð3ð 3ð 3ð 3ð 3r^   rw  c                 ól   — t          | ¦  «        }|€dS |                     t          |¦  «        ¦  «        S )a)  
    Gives the absolute curvature in range [0, 1].

    The actual curvature (Kr) value can be anywhere in the range [-inf, inf], where convex curvature
    yields a positive value, and concave a negative one. These shaders only look for the magnitude
    of the 3D curvature, hence the abs()
    Nrx   )r?   rp  r|   )r½   Úbounded_curvatureÚ	curvatures      r]   Únormalized_absolute_curvaturer}  Â  s6   € õ -¨UÑ3Ô3€IØÐØˆsØ×(Ò(­¨Y©¬Ñ8Ô8Ð8r^   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚCurvature3DColorShaderz:Color based on the 3D curvature of the underlying geometryc                 ój   — t                                | |||¦  «         t          ||¦  «        | _        d S rW   )rU   rX   r=   r|  )r\   rY   rZ   r[   Úcurvature_minÚcurvature_maxs         r]   rX   zCurvature3DColorShader.__init__Ó  s1   € Ý×"Ò" 4¨°	¸4Ñ@Ô@Ð@Ý(¨¸ÑFÔFˆŒˆˆr^   c                 ó¼   — |D ]X}t          || j        ¦  «        }|j        j        }|                      |¦  «        }|                      ||¦  «        |j        _        ŒYd S rW   )r}  r|  rª   rÜ   rc   rg   rÝ   s         r]   r×   zCurvature3DColorShader.shade×  sb   € Øð 	:ð 	:ˆEÝ-¨e°T´^ÑDÔDˆAØ”Ô%ˆAØ—’˜aÑ Ô ˆAØ$(§O¢O°A°qÑ$9Ô$9ˆEŒOÔ!Ð!ð		:ð 	:r^   Nrî   rl   r^   r]   r  r  Ð  s;   € € € € € ØDÐDðGð Gð Gð:ð :ð :ð :ð :r^   r  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚCurvature3DAlphaShaderú:Alpha based on the 3D curvature of the underlying geometryc                 ón   — t                                | |||||¦  «         t          ||¦  «        | _        d S rW   )r…   rX   r=   r|  )r\   rY   rZ   rŒ   rŠ   r‹   r�  r‚  s           r]   rX   zCurvature3DAlphaShader.__init__â  s5   € Ý×%Ò% d¨E°9¸gÀvÈuÑUÔUÐUÝ(¨¸ÑFÔFˆŒˆˆr^   c                 ó¼   — |D ]X}t          || j        ¦  «        }|j        j        }|                      |¦  «        }|                      ||¦  «        |j        _        ŒYd S rW   )r}  r|  rª   râ   rc   rY   rÝ   s         r]   r×   zCurvature3DAlphaShader.shadeæ  sb   € Øð 	5ð 	5ˆEÝ-¨e°T´^ÑDÔDˆAØ”Ô%ˆAØ—’˜aÑ Ô ˆAØ$(§J¢J¨q°!Ñ$4Ô$4ˆEŒOÔ!Ð!ð		5ð 	5r^   Nrî   rl   r^   r]   r…  r…  ß  s;   € € € € € ØDÐDðGð Gð Gð5ð 5ð 5ð 5ð 5r^   r…  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚCurvature3DThicknessShaderr†  c                 óÐ   — t                                | ||¦  «         t                               | |||||¦  «         t          ||	¦  «        | _        t          |
|¦  «        | _        d S rW   )r´   rX   r…   r=   r|  r«   )r\   rç   rè   rY   rZ   rŒ   rŠ   r‹   r�  r‚  r.  r/  s               r]   rX   z#Curvature3DThicknessShader.__init__ñ  s_   € å×&Ò& tÐ-?ÀÑQÔQÐQÝ×%Ò% d¨E°9¸gÀvÈuÑUÔUÐUÝ(¨¸ÑFÔFˆŒÝ(¨¸ÑFÔFˆŒˆˆr^   c                 óÄ   — |D ]\}t          || j        ¦  «        }| j        j        |                      |¦  «        | j        j        z  z   }|                      ||¦  «         Œ]d S rW   )r}  r|  r«   r}   rc   rì   rÁ   )r\   rÖ   r½   ra   r«   s        r]   r×   z Curvature3DThicknessShader.shadeø  sj   € Øð 	3ð 	3ˆEÝ-¨e°T´^ÑDÔDˆAØœÔ*¨T¯]ª]¸1Ñ-=Ô-=ÀÄÔ@TÑ-TÑTˆIØ× Ò  ¨	Ñ2Ô2Ð2Ð2ð	3ð 	3r^   Nrî   rl   r^   r]   rŠ  rŠ  î  s;   € € € € € ØDÐDðGð Gð Gð3ð 3ð 3ð 3ð 3r^   rŠ  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚSimplificationShaderz.Simplifies a stroke by merging points togetherc                 ó<   — t          j        | ¦  «         || _        d S rW   )r7   rX   Ú	tolerance)r\   r�  s     r]   rX   zSimplificationShader.__init__  s   € ÝÔ˜dÑ#Ô#Ð#Ø"ˆŒˆˆr^   c                 ó
  — t          d„ |D ¦   «         ¦  «        }t          || j        ¬¦  «        }t          |¦  «        }t	          ||¦  «        D ]\  }}||_        Œt          |¦  «        D ]}|                     |¦  «         Œd S )Nc              3   ó$   K  — | ]}|j         V — Œd S rW   ©r°   ©rÌ   r½   s     r]   rÎ   z-SimplificationShader.shade.<locals>.<genexpr>	  s$   è è € Ð7Ð7 u�u”{Ð7Ð7Ð7Ð7Ð7Ð7r^   )r�  )ÚtuplerH   r�  ÚiterrÏ   r°   Úremove_vertex)r\   rÖ   ÚpointsÚpoints_simplifiedr÷   r½   r°   s          r]   r×   zSimplificationShader.shade  s›   € ÝÐ7Ð7°Ð7Ñ7Ô7Ñ7Ô7ˆÝ$ V°t´~ÐFÑFÔFÐå�&‰\Œ\ˆÝ Ð$5Ñ6Ô6ð 	 ð 	 ‰LˆE�5ØˆEŒKˆKå˜2‘Y”Yð 	(ð 	(ˆEØ× Ò  Ñ'Ô'Ð'Ð'ð	(ð 	(r^   Nrî   rl   r^   r]   rŽ  rŽ    s8   € € € € € Ø8Ð8ð#ð #ð #ð	(ð 	(ð 	(ð 	(ð 	(r^   rŽ  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚSinusDisplacementShaderz/Displaces the stroke in a sine wave-like shape.c                 ót   — t          j        | ¦  «         || _        || _        ||z  dz  t          z  | _        d S )NrŸ   )r7   rX   Ú
wavelengthrF  rN   Úphase)r\   r�  rF  rž  s       r]   rX   z SinusDisplacementShader.__init__  s;   € ÝÔ˜dÑ#Ô#Ð#Ø$ˆŒØ"ˆŒØ˜ZÑ'¨!Ñ+­bÑ0ˆŒ
ˆ
ˆ
r^   c                 óH  — t          t          |¦  «        ¦  «        }t          |¦  «        }d| j        z  dz  t          z  }t          |||¦  «        D ];\  }}}|| j        z  t          ||z  | j        z   ¦  «        z  }|xj	        |z  c_	        Œ<| 
                    ¦   «          d S )NrE  rŸ   )r•  rI   rA   r�  rN   rÏ   rF  rP   rž  r°   Úupdate_length)	r\   rÖ   ÚnormalsÚ	distancesÚcoeffr½   ÚdistanceÚnormalÚns	            r]   r×   zSinusDisplacementShader.shade  s«   € å� fÑ-Ô-Ñ.Ô.ˆÝ.¨vÑ6Ô6ˆ	Ø�D”OÑ# aÑ'­"Ñ,ˆÝ'*¨6°9¸gÑ'FÔ'Fð 	ð 	Ñ#ˆE�8˜VØ˜œÑ'­#¨h¸Ñ.>ÀÄÑ.KÑ*LÔ*LÑLˆAØˆKŒK˜1ÑˆKŒKˆKØ×ÒÑÔÐÐÐr^   Nrî   rl   r^   r]   r›  r›    s8   € € € € € Ø9Ð9ð1ð 1ð 1ðð ð ð ð r^   r›  c                   ó<   — e Zd ZdZddd ed¦  «        dfd„Zd„ ZdS )	ÚPerlinNoise1DShaderz§
    Displaces the stroke using the curvilinear abscissa.  This means
    that lines with the same length and sampling interval will be
    identically distorted.
    é
   é   é-   éÿÿÿÿc                 óà   — t          j        | ¦  «         t          |¦  «        | _        || _        || _        || _        t          t          |¦  «        t          |¦  «        f¦  «        | _
        d S rW   ©r7   rX   r   ÚnoiseÚfreqÚampÚoctrM   rP   rO   r±   ©r\   r°  r±  r²  r9  rH  s         r]   rX   zPerlinNoise1DShader.__init__/  óY   € ÝÔ˜dÑ#Ô#Ð#Ý˜4‘[”[ˆŒ
ØˆŒ	ØˆŒØˆŒÝ�3˜u™:œ:¥s¨5¡z¤zÐ2Ñ3Ô3ˆŒˆˆr^   c                 óÞ   — |j         }|D ]N}| j                             ||j        z  | j        | j        | j        ¦  «        }|xj        || j        z  z  c_        ŒO| 	                    ¦   «          d S rW   )
rK  r¯  Úturbulence1Úur°  r±  r²  r°   r±   r   )r\   rÖ   r2  r½   Únress        r]   r×   zPerlinNoise1DShader.shade7  ss   € ØÔ!ˆØð 	+ð 	+ˆEØ”:×)Ò)¨&°5´7Ñ*:¸D¼IÀtÄxÐQUÔQYÑZÔZˆDØˆKŒK˜4 $¤(™?Ñ*ˆKŒKˆKØ×ÒÑÔÐÐÐr^   N©rh   ri   rj   rk   rR   rX   r×   rl   r^   r]   r¨  r¨  (  sV   € € € € € ðð ð  B¨A°W°W¸R±[´[Àrð 4ð 4ð 4ð 4ðð ð ð ð r^   r¨  c                   ó<   — e Zd ZdZddd ed¦  «        dfd„Zd„ ZdS )	ÚPerlinNoise2DShadera"  
    Displaces the stroke using the strokes coordinates.  This means
    that in a scene no strokes will be distorted identically.

    More information on the noise shaders can be found at:
    https://freestyleintegration.wordpress.com/2011/09/25/development-updates-on-september-25/
    r©  rª  r«  r¬  c                 óà   — t          j        | ¦  «         t          |¦  «        | _        || _        || _        || _        t          t          |¦  «        t          |¦  «        f¦  «        | _
        d S rW   r®  r³  s         r]   rX   zPerlinNoise2DShader.__init__H  r´  r^   c                 óö   — |D ]a}t          |j        |j        f¦  «        }| j                             || j        | j        | j        ¦  «        }|xj        || j	        z  z  c_        Œb| 
                    ¦   «          d S rW   )rM   Úprojected_xÚprojected_yr¯  Úturbulence2r°  r±  r²  r°   r±   r   )r\   rÖ   r½   Ú	projectedr¸  s        r]   r×   zPerlinNoise2DShader.shadeP  sz   € Øð 	+ð 	+ˆEÝ Ô 1°5Ô3DÐEÑFÔFˆIØ”:×)Ò)¨)°T´YÀÄÈ$Ì(ÑSÔSˆDØˆKŒK˜4 $¤(™?Ñ*ˆKŒKˆKØ×ÒÑÔÐÐÐr^   Nr¹  rl   r^   r]   r»  r»  ?  sV   € € € € € ðð ð  B¨A°W°W¸R±[´[Àrð 4ð 4ð 4ð 4ðð ð ð ð r^   r»  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚOffset2DShaderz%Offsets the stroke by a given amount.c                 óv   — t          j        | ¦  «         || _        || _        t	          ||f¦  «        | _        d S rW   )r7   rX   ÚstartÚendrM   Úxy)r\   rÅ  rÆ  ÚxÚys        r]   rX   zOffset2DShader.__init__[  s6   € ÝÔ˜dÑ#Ô#Ð#ØˆŒ
ØˆŒÝ˜!˜Q˜‘.”.ˆŒˆˆr^   c                 ó  — t          t          |¦  «        ¦  «        }t          ||¦  «        D ]?\  }}| j        |j        | j        | j        z
  z  z   }|xj        ||z  | j        z   z  c_        Œ@|                     ¦   «          d S rW   )	r•  rI   rÏ   rÅ  r·  rÆ  r°   rÇ  r   )r\   rÖ   r¡  r½   r¥  re   s         r]   r×   zOffset2DShader.shadea  s…   € å� fÑ-Ô-Ñ.Ô.ˆÝ  ¨Ñ1Ô1ð 	2ð 	2‰MˆE�6Ø”
˜UœW¨¬°4´:Ñ(=Ñ>Ñ>ˆAØˆKŒK˜F Q™J¨$¬'Ñ1Ñ1ˆKŒKˆKØ×ÒÑÔÐÐÐr^   Nrî   rl   r^   r]   rÃ  rÃ  X  s8   € € € € € Ø/Ð/ð!ð !ð !ðð ð ð ð r^   rÃ  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚTransform2DShaderzMTransforms the stroke (scale, rotation, location) around a given pivot point c                 ó  — t          j        | ¦  «         || _        t          ||f¦  «        | _        t          |¦  «        | _        t          |¦  «        | _        || _	        || _
        || _        |dvrt          d|z   ¦  «        ‚d S )N>   ÚENDÚPARAMÚSTARTrÃ   ÚABSOLUTEzFexpected pivot in {'START', 'END', 'CENTER', 'ABSOLUTE', 'PARAM'}, not)r7   rX   ÚpivotrM   rG  rP   Ú	cos_thetarO   Ú	sin_thetaÚpivot_uÚpivot_xÚpivot_yr   )r\   rÒ  Úscale_xÚscale_yr9  rÕ  rÖ  r×  s           r]   rX   zTransform2DShader.__init__m  s‡   € ÝÔ˜dÑ#Ô#Ð#ØˆŒ
Ý˜W gÐ.Ñ/Ô/ˆŒ
Ý˜U™œˆŒÝ˜U™œˆŒØˆŒØˆŒØˆŒØÐGÐGÐGÝÐeÐhmÑmÑnÔnÐnð HÐGr^   c                 óR  — | j         dk    r|d         j        }�n| j         dk    r|d         j        }nê| j         dk    r;dt          |¦  «        z  t          d„ |D ¦   «         t	          d¦  «        ¦  «        z  }n¤| j         d	k    rt	          | j        | j        f¦  «        }n}| j         d
k    rr| j        |d         j        k     r|d         j        }nNt          |¦  «        D ]\  }}| j        |j        k     r nŒ|j        |j        | j        z
  |j        |j        z
  z  z   }|D ]r}|j        |z
  }|j
        | j        j
        z  }|j        | j        j        z  }|| j        z  || j        z  z
  |_
        || j        z  || j        z  z   |_        ||z   |_        Œs|                     ¦   «          d S )NrÐ  r   rÎ  r¬  rÃ   rE  c              3   ó$   K  — | ]}|j         V — Œd S rW   r“  r”  s     r]   rÎ   z*Transform2DShader.shade.<locals>.<genexpr>‚  s$   è è € Ð,MÐ,M¸U¨U¬[Ð,MÐ,MÐ,MÐ,MÐ,MÐ,Mr^   )rx   rx   rÑ  rÏ  )rÒ  r°   Úlenr»   rM   rÖ  r×  rÕ  r·  rG   rÈ  rG  rÉ  rÓ  rÔ  r   )r\   rÖ   rÒ  Úprevr½   ÚprÈ  rÉ  s           r]   r×   zTransform2DShader.shadey  s½  € àŒ:˜Ò Ð Ø˜1”I”OˆE‰EØŒZ˜5Ò Ð Ø˜2”JÔ$ˆEˆEØŒZ˜8Ò#Ð#ð �˜V™œ‘_­Ð,MÐ,MÀfÐ,MÑ,MÔ,MÍvÐV`ÑOaÔOaÑ(bÔ(bÑbˆEˆEØŒZ˜:Ò%Ð%Ý˜DœL¨$¬,Ð7Ñ8Ô8ˆEˆEØŒZ˜7Ò"Ð"ØŒ|˜f QœiœkÒ)Ð)Ø˜qœ	œ��å#+¨FÑ#3Ô#3ð ð ‘K�D˜%Ø”| e¤gÒ-Ð-Ø˜ð .àœ u¤w°´Ñ'=À$Ä*ÈuÌ{ÑBZÑ&[Ñ[�ð ð 	$ð 	$ˆEØ”˜uÑ$ˆAØ”�d”j”lÑ"ˆAØ”�d”j”lÑ"ˆAØ�d”nÑ$ q¨4¬>Ñ'9Ñ9ˆAŒCØ�d”nÑ$ q¨4¬>Ñ'9Ñ9ˆAŒCØ˜e™)ˆEŒKˆKØ×ÒÑÔÐÐÐr^   Nrî   rl   r^   r]   rÌ  rÌ  j  s;   € € € € € ØWÐWð
oð 
oð 
oðð ð ð ð r^   rÌ  c                   ó   — e Zd Zd„ Zd„ ZdS )Ú!QuantitativeInvisibilityRangeUP1Dc                 óp   — t          j        | ¦  «         t          ¦   «         | _        || _        || _        d S rW   )r   rX   r   ÚgetQIÚqi_startÚqi_end)r\   rã  rä  s      r]   rX   z*QuantitativeInvisibilityRangeUP1D.__init__œ  s2   € ÝÔ! $Ñ'Ô'Ð'Ý0Ñ2Ô2ˆŒ
Ø ˆŒØˆŒˆˆr^   c                 ó`   — |                       |¦  «        }| j        |cxk    o
| j        k    nc S rW   )râ  rã  rä  )r\   ÚinterÚqis      r]   Ú__call__z*QuantitativeInvisibilityRangeUP1D.__call__¢  s9   € Ø�ZŠZ˜ÑÔˆØŒ} Ð1Ð1Ò1Ð1 d¤kÒ1Ð1Ð1Ð1Ð1r^   N©rh   ri   rj   rX   rè  rl   r^   r]   rà  rà  ›  s2   € € € € € ðð ð ð2ð 2ð 2ð 2ð 2r^   rà  c                 óL   — | j         �| j         j        dz   | j        z   S | j        S ©Nú/)ÚlibraryÚfilepathÚname)Úobs    r]   ÚgetQualifiedObjectNamerñ  §  s(   € Ø	„zÐØŒzÔ" SÑ(¨2¬7Ñ2Ð2ØŒ7€Nr^   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚObjectNamesUP1Dc                 óJ   — t          j        | ¦  «         || _        || _        d S rW   )r   rX   ÚnamesÚnegative)r\   rõ  rö  s      r]   rX   zObjectNamesUP1D.__init__®  s%   € ÝÔ! $Ñ'Ô'Ð'ØˆŒ
Ø ˆŒˆˆr^   c                 ój   — |j         �&t          |j         ¦  «        r|j         dz   |j        z   S |j        S rë  )Úlibrary_pathrÜ  rï  )r\   Úvss     r]   ÚgetViewShapeNamez ObjectNamesUP1D.getViewShapeName³  s4   € ØŒ?Ð&­3¨r¬Ñ+?Ô+?Ð&Ø”? SÑ(¨2¬7Ñ2Ð2ØŒwˆr^   c                 ó\   — |                       |j        ¦  «        | j        v }| j        r| S |S rW   )rú  Ú	viewshaperõ  rö  )r\   ÚviewEdgeÚfounds      r]   rè  zObjectNamesUP1D.__call__¸  s6   € Ø×%Ò% hÔ&8Ñ9Ô9¸T¼ZÐGˆØŒ=ð 	Ø�9ÐØˆr^   N)rh   ri   rj   rX   rú  rè  rl   r^   r]   ró  ró  ­  sA   € € € € € ð!ð !ð !ð
ð ð ð
ð ð ð ð r^   ró  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚSplitPatternStartingUP0Dc                 ó<   — t          j        | ¦  «         || _        d S rW   ©r
   rX   Ú
controller©r\   r  s     r]   rX   z!SplitPatternStartingUP0D.__init__Â  ó   € ÝÔ! $Ñ'Ô'Ð'Ø$ˆŒˆˆr^   c                 ó4   — | j                              ¦   «         S rW   )r  rÅ  ©r\   ræ  s     r]   rè  z!SplitPatternStartingUP0D.__call__Æ  s   € ØŒ×$Ò$Ñ&Ô&Ð&r^   Nré  rl   r^   r]   r   r   Á  s2   € € € € € ð%ð %ð %ð'ð 'ð 'ð 'ð 'r^   r   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚSplitPatternStoppingUP0Dc                 ó<   — t          j        | ¦  «         || _        d S rW   r  r  s     r]   rX   z!SplitPatternStoppingUP0D.__init__Ë  r  r^   c                 ó4   — | j                              ¦   «         S rW   )r  Ústopr  s     r]   rè  z!SplitPatternStoppingUP0D.__call__Ï  s   € ØŒ×#Ò#Ñ%Ô%Ð%r^   Nré  rl   r^   r]   r	  r	  Ê  s2   € € € € € ð%ð %ð %ð&ð &ð &ð &ð &r^   r	  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚSplitPatternControllerc                 ó  ‡— t          |¦  «        | _        t          ‰¦  «        dz  }|dz  }ˆfd„t          d|d¦  «        D ¦   «         | _        ˆfd„t          d|d¦  «        D ¦   «         | _        |                      ¦   «          d S )NrŸ   c                 ó8   •— g | ]}‰|         ‰|d z            z   ‘ŒS )rE  rl   ©rÌ   ÚiÚpatterns     €r]   ú
<listcomp>z3SplitPatternController.__init__.<locals>.<listcomp>Ø  s*   ø€ ÐNÐNÐN¸!˜' !œ* w¨q°1©u¤~Ñ5ÐNÐNÐNr^   r   c                 ó    •— g | ]
}‰|         ‘ŒS rl   rl   r  s     €r]   r  z3SplitPatternController.__init__.<locals>.<listcomp>Ù  s   ø€ Ð<Ð<Ð<¨˜ œÐ<Ð<Ð<r^   )rº   ÚsamplingrÜ  rò   Ú	start_posÚstop_posÚinit)r\   r  r  Úkr¦  s    `   r]   rX   zSplitPatternController.__init__Ô  s„   ø€ Ý˜h™œˆŒÝ�‰LŒL˜AÑˆØ�‰EˆØNÐNÐNÐN½uÀQÈÈ1¹~¼~ÐNÑNÔNˆŒØ<Ð<Ð<Ð<­U°1°a¸©^¬^Ð<Ñ<Ô<ˆŒØ�	Š	‰Œˆˆˆr^   c                 óH   — d| _         d| _        | j        | _        d| _        d S )Nrx   r   )Ú	start_lenÚ	start_idxr  Ústop_lenÚstop_idx©r\   s    r]   r  zSplitPatternController.initÜ  s$   € ØˆŒØˆŒØœˆŒØˆŒˆˆr^   c                 óð   — | xj         | j        z  c_         t          | j         | j        | j                 z
  ¦  «        | j        dz  k     r-d| _         | j        dz   t          | j        ¦  «        z  | _        dS dS )Nç       @rx   rE  TF)r  r  r|   r  r  rÜ  r   s    r]   rÅ  zSplitPatternController.startâ  sm   € ØˆŒ˜$œ-Ñ'ˆŒÝˆtŒ~ ¤¨t¬~Ô >Ñ>Ñ?Ô?À$Ä-ÐRUÑBUÒUÐUØ ˆDŒNØ"œn¨qÑ0µC¸¼Ñ4GÔ4GÑGˆDŒNØ�4Øˆur^   c                 ó8  — | j         dk    r|                      ¦   «          | xj        | j        z  c_        t	          | j        | j        | j                 z
  ¦  «        | j        dz  k     r2| j        | _        | j        dz   t          | j        ¦  «        z  | _        dS dS )Nrx   r"  rE  TF)r  r  r  r  r|   r  r  rÜ  r   s    r]   r  zSplitPatternController.stopê  sˆ   € ØŒ>˜CÒÐØ�IŠI‰KŒKˆKØˆŒ˜œÑ&ˆŒÝˆtŒ}˜tœ}¨T¬]Ô;Ñ;Ñ<Ô<¸t¼}ÈsÑ?RÒRÐRØ œMˆDŒMØ!œ]¨QÑ.µ#°d´mÑ2DÔ2DÑDˆDŒMØ�4Øˆur^   N)rh   ri   rj   rX   r  rÅ  r  rl   r^   r]   r  r  Ó  sP   € € € € € ðð ð ðð ð ðð ð ðð ð ð ð r^   r  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚDashedLineShaderc                 ó<   — t          j        | ¦  «         || _        d S rW   )r7   rX   r  )r\   r  s     r]   rX   zDashedLineShader.__init__ø  s   € ÝÔ˜dÑ#Ô#Ð#ØˆŒˆˆr^   c                 ó   — d}d}d}|                      |¦  «        }t          | j        ¦  «        }t          |¦  «        }|D ]<}|j        }	|	|z
  |z   |k    r|	}t          |¦  «        }| }|sd|j        j        _        Œ=d S )Nrx   Trr   F)Ústroke_vertices_beginrS   r  Únextra   Úobjectrª   Úvisible)
r\   rÖ   rÅ  r+  r  r÷   Úpattern_cycler  Ú_svertÚposs
             r]   r×   zDashedLineShader.shadeü  s¥   € ØˆØˆð
 ˆØ×)Ò)¨(Ñ3Ô3ˆÝ˜dœlÑ+Ô+ˆÝ�}Ñ%Ô%ˆØð 		4ð 		4ˆFØ”$ˆCà�U‰{˜XÑ%¨Ò/Ð/Ø�Ý˜}Ñ-Ô-�Ø%˜+�àð 4Ø.3�”	Ô#Ô+øð		4ð 		4r^   NrØ   rl   r^   r]   r%  r%  ÷  s2   € € € € € ðð ð ð4ð 4ð 4ð 4ð 4r^   r%  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚAngleLargerThanBP1Dc                 ó<   — t          j        | ¦  «         || _        d S rW   )r   rX   r9  )r\   r9  s     r]   rX   zAngleLargerThanBP1D.__init__  s   € ÝÔ" 4Ñ(Ô(Ð(ØˆŒ
ˆ
ˆ
r^   c                 óâ  — |j         j        j        }|j        j        j        }|j         j        j        }|j        j        j        }||z
  j        dk     r||z
  }||z
  }nM||z
  j        dk     r||z
  }||z
  }n4||z
  j        dk     r||z
  }||z
  }n||z
  j        dk     r||z
  }||z
  }ndS |j        |j        z  }	|	dk     rdS ||z  |	z  }
t          t          d|
d¦  «        ¦  «        | j        k    S )Ng�íµ ÷Æ°>Fre  rr   )	Úfirst_fedgeÚfirst_svertexÚpoint_2dÚ
last_fedgeÚsecond_svertexr2  rQ   r<   r9  )r\   Úi1Úi2Úsv1aÚsv1bÚsv2aÚsv2bÚdir1Údir2ÚdenomrÈ  s              r]   rè  zAngleLargerThanBP1D.__call__  s  € ØŒ~Ô+Ô4ˆØŒ}Ô+Ô4ˆØŒ~Ô+Ô4ˆØŒ}Ô+Ô4ˆØ�4‰KÔ $Ò&Ð&Ø˜$‘;ˆDØ˜$‘;ˆDˆDØ�T‰kÔ! DÒ(Ð(Ø˜$‘;ˆDØ˜$‘;ˆDˆDØ�T‰kÔ! DÒ(Ð(Ø˜$‘;ˆDØ˜$‘;ˆDˆDØ�T‰kÔ! DÒ(Ð(Ø˜$‘;ˆDØ˜$‘;ˆDˆDà�5Ø”˜dœkÑ)ˆØ�4Š<ˆ<Ø�5Ø�D‰[˜EÑ!ˆÝ•E˜$  3Ñ'Ô'Ñ(Ô(¨4¬:Ò5Ð5r^   Nré  rl   r^   r]   r0  r0    s2   € € € € € ðð ð ð6ð 6ð 6ð 6ð 6r^   r0  c                   ó   — e Zd Zdd„Zd„ ZdS )ÚLengthThresholdUP1DNc                 óJ   — t          j        | ¦  «         || _        || _        d S rW   )r   rX   Ú
length_minÚ
length_max)r\   rD  rE  s      r]   rX   zLengthThresholdUP1D.__init__7  s%   € ÝÔ! $Ñ'Ô'Ð'Ø$ˆŒØ$ˆŒˆˆr^   c                 ód   — |j         }| j        �|| j        k     rdS | j        �|| j        k    rdS dS )NFT)rK  rD  rE  )r\   ræ  r2  s      r]   rè  zLengthThresholdUP1D.__call__<  s@   € Ø”ˆØŒ?Ð&¨6°D´OÒ+CÐ+CØ�5ØŒ?Ð&¨6°D´OÒ+CÐ+CØ�5Øˆtr^   ©NNré  rl   r^   r]   rB  rB  6  s7   € € € € € ð%ð %ð %ð %ð
ð ð ð ð r^   rB  c                   ó   — e Zd Zdefd„ZdS )ÚFaceMarkBothUP1Dræ  c                 ó¨   — |j         }|�H|j        r
|j        rdS n.|j        t          j        z  r
|j        rdS n|j        r	|j        rdS |j        }|­HdS ©NTF©	r3  r©   Ú	face_markr¡   r   r¢   Úface_mark_leftÚface_mark_rightÚ
next_fedge©r\   ræ  r¯   s      r]   rè  zFaceMarkBothUP1D.__call__F  s„   € ØÔˆØˆnØŒ|ð  Ø”<ð  Ø˜4ð à”)�fœmÑ+ð  ØÔ$ð  Ø˜4ð ð Ô%ð  ¨"Ô*;ð  Ø˜4Ø”ˆBð ˆnð ˆur^   N©rh   ri   rj   r   rè  rl   r^   r]   rI  rI  E  ó/   € € € € € ð˜hð ð ð ð ð ð r^   rI  c                   ó   — e Zd Zdefd„ZdS )ÚFaceMarkOneUP1Dræ  c                 ó¨   — |j         }|�H|j        r
|j        rdS n.|j        t          j        z  r
|j        rdS n|j        s|j        rdS |j        }|­HdS rK  rL  rQ  s      r]   rè  zFaceMarkOneUP1D.__call__W  s„   € ØÔˆØˆnØŒ|ð  Ø”<ð  Ø˜4ð à”)�fœmÑ+ð  ØÔ$ð  Ø˜4ð ð Ô%ð  ¨Ô):ð  Ø˜4Ø”ˆBð ˆnð ˆur^   NrR  rl   r^   r]   rU  rU  V  rS  r^   rU  c                   ó   — e Zd Zd„ ZdS )ÚMaterialBoundaryUP0Dc                 óf  — |j         s|j        s|j        rdS |                     ¦   «          t	          |¦  «        t	          |¦  «        t	          |¦  «        }}}|                     |¦  «        }|j        r|j        n|j        }|                     |¦  «        }|j        r|j        n|j        }||k    S )NF)	Úis_beginÚat_lastÚis_endÚ	decrementr)  Ú	get_fedger©   Úmaterial_indexÚmaterial_index_left)r\   r÷   rÝ  rÉ   Úsuccr¯   Úidx1Úidx2s           r]   rè  zMaterialBoundaryUP0D.__call__j  s©   € àŒ;ð 	˜"œ*ð 	¨¬	ð 	Ø�5Ø
�Š‰ŒˆÝ˜R™œ¥$ r¡(¤(­D°©H¬H�ˆaˆØ�[Š[˜ÑÔˆØ$&¤LÐLˆrÔ Ð °bÔ6LˆØ�[Š[˜ÑÔˆØ$&¤LÐLˆrÔ Ð °bÔ6LˆØ�tŠ|Ðr^   N)rh   ri   rj   rè  rl   r^   r]   rX  rX  i  s#   € € € € € ð
ð 
ð 
ð 
ð 
r^   rX  c                   ó   — e Zd Zdd„Zd„ ZdS )ÚCurvature2DAngleThresholdUP0DNc                 óp   — t          j        | ¦  «         || _        || _        t	          ¦   «         | _        d S rW   )r
   rX   rm  rn  r   r  )r\   rm  rn  s      r]   rX   z&Curvature2DAngleThresholdUP0D.__init__x  s2   € ÝÔ! $Ñ'Ô'Ð'Ø"ˆŒØ"ˆŒÝ'Ñ)Ô)ˆŒ	ˆ	ˆ	r^   c                 ó�   — t           |                      |¦  «        z
  }| j        �|| j        k     rdS | j        �|| j        k    rdS dS rK  )rN   r  rm  rn  )r\   ræ  r9  s      r]   rè  z&Curvature2DAngleThresholdUP0D.__call__~  sO   € Ý�T—Y’Y˜uÑ%Ô%Ñ%ˆØŒ>Ð%¨%°$´.Ò*@Ð*@Ø�4ØŒ>Ð%¨%°$´.Ò*@Ð*@Ø�4Øˆur^   rG  ré  rl   r^   r]   re  re  w  s7   € € € € € ð*ð *ð *ð *ðð ð ð ð r^   re  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚLength2DThresholdUP0Dc                 óJ   — t          j        | ¦  «         || _        d| _        d S r1  )r
   rX   Úlength_limitra   )r\   rk  s     r]   rX   zLength2DThresholdUP0D.__init__ˆ  s&   € ÝÔ! $Ñ'Ô'Ð'Ø(ˆÔØˆŒˆˆr^   c                 ót   — |j         }|| j         k     r	d| _         dS || j         z
  | j        k     rdS || _         dS )Nrx   FT)ra   rk  )r\   ræ  ra   s      r]   rè  zLength2DThresholdUP0D.__call__�  sE   € ØŒGˆØˆtŒvŠ:ˆ:ØˆDŒFØ�5ØˆtŒv‰:˜Ô)Ò)Ð)Ø�5ØˆŒØˆtr^   Nré  rl   r^   r]   ri  ri  ‡  s2   € € € € € ðð ð ð
ð ð ð ð r^   ri  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚSeedc                 ón   — d| _         t          t          j        ¦   «         ¦  «        | j         z  | _        d S )Ni €  )Út_maxr¹   Útimera   r   s    r]   rX   zSeed.__init__›  s)   € ØˆŒ
Ý•T”Y‘[”[Ñ!Ô! D¤JÑ.ˆŒˆˆr^   c                 óN   — |dk     r| j         dz   | j        z  | _         | j         S |S )Nr   rE  )ra   rp  )r\   rH  s     r]   ÚgetzSeed.getŸ  s+   € Ø�!Š8ˆ8Ø”f˜q‘j D¤JÑ.ˆDŒFØ”6ˆMØˆr^   N)rh   ri   rj   rX   rs  rl   r^   r]   rn  rn  š  s2   € € € € € ð/ð /ð /ðð ð ð ð r^   rn  c                 óÆ  — g }| j         dk    r?| j        dk    r4|                     | j         ¦  «         |                     | j        ¦  «         | j        dk    r?| j        dk    r4|                     | j        ¦  «         |                     | j        ¦  «         | j        dk    r?| j        dk    r4|                     | j        ¦  «         |                     | j        ¦  «         |S )z8Extracts the dashed pattern from the various UI options r   )Údash1Úgap1ÚappendÚdash2Úgap2Údash3Úgap3)Ú	linestyler  s     r]   Úget_dashed_patternr}  ©  sÏ   € à€GØ„˜ÒÐ˜yœ~°Ò1Ð1Ø�Š�y”Ñ'Ô'Ð'Ø�Š�y”~Ñ&Ô&Ð&Ø„˜ÒÐ˜yœ~°Ò1Ð1Ø�Š�y”Ñ'Ô'Ð'Ø�Š�y”~Ñ&Ô&Ð&Ø„˜ÒÐ˜yœ~°Ò1Ð1Ø�Š�y”Ñ'Ô'Ð'Ø�Š�y”~Ñ&Ô&Ð&Ø€Nr^   c              #   ó‚   K  — | j         D ]4}|j        dk    r#|j        �t          |j        ¦  «        D ]}|V — ŒŒ0|V — Œ5d S )NÚ
COLLECTION)ÚobjectsÚinstance_typeÚinstance_collectionÚget_grouped_objects)Úgrouprð  Úduplis      r]   rƒ  rƒ  ¸  sn   è è € ØŒmð ð ˆØÔ˜|Ò+Ð+°Ô0FÐ0RÝ,¨RÔ-CÑDÔDð ð �Ø����ðð ˆHˆHˆHˆHðð r^   )ÚMEANÚMINÚMAXÚFIRSTÚLASTc                 óF1  — t          ¦   «         }|j        |          }|j        j        |         }|j        }t
          D ]} ||||¦  «         Œg }|j        r¡|j        dk    r#|                     t          d¦  «        ¦  «         ns|j        dk    r0|                     t          t          d¦  «        ¦  «        ¦  «         n8|j        dk    r-|                     t          |j        |j        ¦  «        ¦  «         |j        �rÞg }|j        rDt!          t"          j        ¦  «        }	|                     |j        rt          |	¦  «        n|	¦  «         |j        rDt!          t"          j        ¦  «        }	|                     |j        rt          |	¦  «        n|	¦  «         |j        rDt!          t"          j        ¦  «        }	|                     |j        rt          |	¦  «        n|	¦  «         |j        rDt!          t"          j        ¦  «        }	|                     |j        rt          |	¦  «        n|	¦  «         |j        rDt!          t"          j        ¦  «        }	|                     |j        rt          |	¦  «        n|	¦  «         |j         rDt!          t"          j!        ¦  «        }	|                     |j"        rt          |	¦  «        n|	¦  «         |j#        rDt!          t"          j$        ¦  «        }	|                     |j%        rt          |	¦  «        n|	¦  «         |j&        r9tO          ¦   «         }	|                     |j(        rt          |	¦  «        n|	¦  «         |j)        r9tU          ¦   «         }	|                     |j+        rt          |	¦  «        n|	¦  «         |rM|j,        dk    r
t[          |Ž }	n	t]          |Ž }	|j/        dk    rt          |	¦  «        }	|                     |	¦  «         |j0        rW|j1        dk    rte          ¦   «         }	ntg          ¦   «         }	|j4        dk    rt          |	¦  «        }	|                     |	¦  «         |j5        rS|j6        �Ld„ to          |j6        ¦  «        D ¦   «         }
tq          |
|j9        dk    ¦  «        }	|                     |	¦  «         |j:        r/tw          ty          j=        ¦   «         Ž }	|                     |	¦  «         |r
t]          |Ž }	nt}          ¦   «         }	t          j@        |	¦  «         |jA        rÞ|jB        d	k    rs|jC        r/t          jD        t‹          ¦   «         t          |	¦  «        ¦  «         nåt          jD        t�          |	t�          ¦   «         ¦  «        t          |	¦  «        ¦  «         n¨|jB        d
k    rT|jC        r't          jD        t‘          |jI        ¦  «        ¦  «         not          jD        t•          |jI        ¦  «        ¦  «         nHt          jK        t�          t™          ¦   «         t›          ¦   «         ¦  «        t          |	¦  «        ¦  «         |jN        r t          jO        t¡          ¦   «         ¦  «         |jQ        s|jR        rB|jQ        r|jS        nd }|jR        r|jT        nd }t          jO        t«          ||¦  «        ¦  «         |jV        r't          jO        t¯          |jX        ¦  «        d¦  «         |jY        �r5g }|jZ        dk    r?|j[        dk    r4|                     |jZ        ¦  «         |                     |j[        ¦  «         |j\        dk    r?|j]        dk    r4|                     |j\        ¦  «         |                     |j]        ¦  «         |j^        dk    r?|j_        dk    r4|                     |j^        ¦  «         |                     |j_        ¦  «         tÁ          |¦  «        dk    rBd}tÃ          ||¦  «        }t          jO        tÅ          |¦  «        tÇ          |¦  «        |¦  «         |jd        rÂtÊ           f                    |jg        tÐ          ji        ¦  «        }|jj        dk    rt×          |¦  «        }nO|jj        dk    rtÙ          ¦   «         }n5|jj        dk    rtÛ          |¦  «        }n|jj        dk    rtÝ          |¦  «        }|jo        dk    rtá          |¦  «        }t          jq        |¦  «         |jr        s|js        rB|jr        r|jt        nd }|js        r|ju        nd }t          j@        tí          ||¦  «        ¦  «         |jw        r&t          j@        tñ          |jy        ¦  «        ¦  «         g }|jz        D �]>}|j{        sŒ|j|        dk    r(|                     tû          |j~        ¦  «        ¦  «         Œ>|j|        dk    r(|                     tÿ          |j€        ¦  «        ¦  «         Œq|j|        dk    r)|                     �t          |j‚        ¦  «        ¦  «         Œ¥|j|        dk    r5|                     �t          |j„        |j…        |j†        ¦  «        ¦  «         Œå|j|        dk    rB|                     �t          |j…        |jˆ        |j‰        |jŠ        |j‹        ¦  «        ¦  «         �Œ2|j|        dk    r[|                     �t          |j�        |j…        |j‰        |jŽ        �t           f                    |j�        ¦  «        ¦  «        ¦  «         �Œ˜|j|        dk    r[|                     �t#          |j�        |j…        |j‰        |jŽ        �t           f                    |j�        ¦  «        ¦  «        ¦  «         �Œþ|j|        dk    r*|                     �t%          |j“        ¦  «        ¦  «         �Œ3|j|        dk    r*|                     �t)          |j•        ¦  «        ¦  «         �Œh|j|        dk    r*|                     �t-          |j€        ¦  «        ¦  «         �Œ�|j|        dk    r*|                     �t/          |j˜        ¦  «        ¦  «         �ŒÒ|j|        dk    rÃ|j™        dk    r6|                     �t5          |jI        |j›        |jœ        ¦  «        ¦  «         �Œ|j™        dk    r6|                     �t;          |jI        |j›        |jœ        ¦  «        ¦  «         �Œ_|j™        dk    r4|                     �t=          |jI        |j“        |jŸ        ¦  «        ¦  «         �Œ |j|        d k    r<|                     �tA          |j¡        |j¢        |j£        |j¤        ¦  «        ¦  «         �Œç|j|        d!k    rL|                     �tK          |j¦        |j§        |j¨        |jŽ        |j©        |jª        |j«        ¦  «        ¦  «         �Œ@|jA        r|jB        d	k    r|jC        r|j¬        }n"d"}dd l­}|j®        j¯        r�ta          d#¦  «         |                     �tc          |j²        d$|j³        iŽ¦  «         |                     �ti          |jµ        ||j¶        ¦  «        ¦  «         |j·        D �]i}|j{        sŒ|j|        d%k    r5|                     �tq          |j¹        |jº        |j»        ¦  «        ¦  «         ŒK|j|        dk    rA|                     �ty          |j¹        |jº        |j»        |j½        |j¾        ¦  «        ¦  «         Œ—|j|        d&k    rN|j¿        �F|                     �t�          |j¹        |jº        |j»        |j¿        |j½        |j¾        ¦  «        ¦  «         Œð|j|        d'k    rB|                     �tƒ          |j¹        |jº        |j»        |jÂ        |jÃ        ¦  «        ¦  «         �Œ=|j|        d(k    r6|                     �t‰          |j¹        |jº        |j»        ¦  «        ¦  «         �Œ~|j|        d)k    rB|                     �t‹          |j¹        |jº        |j»        |jS        |jT        ¦  «        ¦  «         �ŒË|j|        d*k    rB|                     �t�          |j¹        |jº        |j»        |jÇ        |jÈ        ¦  «        ¦  «         �Œ|j|        d+k    rF|                     �t“          |j¹        |jº        |j»        |j…        |jÊ        |j�        ¦  «        ¦  «         �Œk|jË        D �]Ä}|j{        sŒ|j|        d%k    rA|                     �t™          |j¹        |jº        |jÍ        |jÎ        |jÏ        ¦  «        ¦  «         ŒW|j|        dk    rM|                     �t¡          |j¹        |jº        |jÍ        |jÎ        |jÏ        |j½        |j¾        ¦  «        ¦  «         Œ¯|j|        d&k    r[|j¿        �R|                     �t£          |j¹        |jº        |jÍ        |jÎ        |jÏ        |j¿        |j½        |j¾        ¦  «        ¦  «         �Œ|j|        d'k    rH|                     �t¥          |j¹        |jº        |jÍ        |jÎ        |jÏ        |jÂ        ¦  «        ¦  «         �Œh|j|        d(k    rB|                     �t§          |j¹        |jº        |jÍ        |jÎ        |jÏ        ¦  «        ¦  «         �Œµ|j|        d)k    rN|                     �t©          |j¹        |jº        |jÍ        |jÎ        |jÏ        |jS        |jT        ¦  «        ¦  «         �Œ|j|        d*k    rN|                     �t«          |j¹        |jº        |jÍ        |jÎ        |jÏ        |jÇ        |jÈ        ¦  «        ¦  «         �Œg|j|        d+k    rR|                     �t­          |j¹        |jº        |jÍ        |jÎ        |jÏ        |j…        |jÊ        |j�        ¦  «        ¦  «         �ŒÆ|j×        D �]·}|j{        sŒ|j|        d%k    rT|                     �t±          ||j¶        |j¹        |jº        |jÍ        |jÎ        |jÏ        |jÙ        |jÚ        ¦	  «	        ¦  «         Œj|j|        dk    r`|                     �t·          ||j¶        |j¹        |jº        |jÍ        |jÎ        |jÏ        |j½        |j¾        |jÙ        |jÚ        ¦  «        ¦  «         ŒÕ|j|        d&k    rn|j¿        �e|                     �t¹          ||j¶        |j¹        |jº        |jÍ        |jÎ        |jÏ        |j¿        |j½        |j¾        |jÙ        |jÚ        ¦  «        ¦  «         �ŒN|j|        d'k    r[|                     �t»          ||j¶        |j¹        |jº        |jÍ        |jÎ        |jÏ        |jÂ        |jÙ        |jÚ        ¦
  «
        ¦  «         �Œ´|j|        d,k    rI|                     �t½          ||j¶        |j¹        |jº        |jß        |jà        |já        ¦  «        ¦  «         �Œ|j|        d(k    rU|                     �tÅ          ||j¶        |j¹        |jº        |jÍ        |jÎ        |jÏ        |jà        |já        ¦	  «	        ¦  «         �Œh|j|        d+k    rO|                     �tÇ          ||j¶        |j¹        |jº        |j…        |jÊ        |j�        |jä        ¦  «        ¦  «         �ŒÂ|j|        d)k    ra|                     �tË          ||j¶        |j¹        |jº        |jÍ        |jÎ        |jÏ        |jS        |jT        |jà        |já        ¦  «        ¦  «         �Œ.|j|        d*k    ra|                     �tÍ          ||j¶        |j¹        |jº        |jÍ        |jÎ        |jÏ        |jÇ        |jÈ        |jà        |já        ¦  «        ¦  «         �Œš�tÏ          d-tù          |¦  «        |¦  «        ‚d.}|jè        r1|jé        r*|                     �tÕ          |jé        ¦  «        ¦  «         d/}|r(|                     �t×          |jì        ¦  «        ¦  «         �tÚ          D ]"}| î                     ||||¦  «        ¦  «         Œ#|jï        d0k    r#|                     �tá          ¦   «         ¦  «         n-|jï        d1k    r"|                     �tã          ¦   «         ¦  «         |jò        rF�tç          |¦  «        }tÁ          |¦  «        dk    r#|                     �té          |¦  «        ¦  «         t          jõ        t}          ¦   «         |¦  «         �tì          D ]} ||||¦  «         Œd S )2NÚVISIBLEr   ÚHIDDENÚRANGEÚORÚ	EXCLUSIVEÚBOTHc                 ó.   — i | ]}t          |¦  «        d “ŒS )T)rñ  )rÌ   rð  s     r]   ú
<dictcomp>zprocess.<locals>.<dictcomp>  s#   € ÐhÐhÐh¸"Õ+¨BÑ/Ô/°ÐhÐhÐhr^   ÚPLAINÚSKETCHYrr   ÚDISTANCE_FROM_CAMERAÚ	2D_LENGTHÚPROJECTED_XÚPROJECTED_YÚREVERSEÚSAMPLINGÚBEZIER_CURVEÚSIMPLIFICATIONÚSINUS_DISPLACEMENTÚSPATIAL_NOISEÚPERLIN_NOISE_1DÚPERLIN_NOISE_2DÚBACKBONE_STRETCHERÚTIP_REMOVERÚPOLYGONIZATIONÚGUIDING_LINESÚ	BLUEPRINTÚCIRCLESÚELLIPSESÚSQUARESÚ	2D_OFFSETÚ2D_TRANSFORMrÃ   z•Warning: Thickness position options are applied when chaining is disabled
         or the Plain chaining is used with the Same Object option enabled.râ   ÚALONG_STROKEÚDISTANCE_FROM_OBJECTÚMATERIALÚTANGENTÚCREASE_ANGLEÚCURVATURE_3DÚNOISEÚCALLIGRAPHYzNo Thickness modifier with typeFTÚROUNDÚSQUARE)÷r@   Úview_layersÚfreestyle_settingsÚlinesetsr|  Úcallbacks_lineset_preÚselect_by_visibilityÚ
visibilityrw  r!   r   rà  rã  rä  Úselect_by_edge_typesÚselect_silhouetter&   r   r¨   Úexclude_silhouetteÚselect_borderr¢   Úexclude_borderÚselect_creaserf  Úexclude_creaseÚselect_ridge_valleyÚRIDGEÚexclude_ridge_valleyÚselect_suggestive_contourÚSUGGESTIVE_CONTOURÚexclude_suggestive_contourÚselect_material_boundaryÚMATERIAL_BOUNDARYÚexclude_material_boundaryÚselect_edge_markÚ	EDGE_MARKÚexclude_edge_markÚselect_contourr   Úexclude_contourÚselect_external_contourr   Úexclude_external_contourÚedge_type_combinationr    r   Úedge_type_negationÚselect_by_face_marksÚface_mark_conditionrI  rU  Úface_mark_negationÚselect_by_collectionÚ
collectionrƒ  ró  Úcollection_negationÚselect_by_image_borderr$   r>   Ú
get_borderr#   r   ÚselectÚuse_chainingÚchainingÚuse_same_objectÚbidirectional_chainr   r   r"   r   Úroundsr   Úchainr   r   Úmaterial_boundaryÚsequential_splitrX  Úuse_angle_minÚuse_angle_maxrm  rn  re  Úuse_split_lengthri  Úsplit_lengthÚuse_split_patternÚsplit_dash1Ú
split_gap1Úsplit_dash2Ú
split_gap2Úsplit_dash3Ú
split_gap3rÜ  r  r   r	  Úuse_sortingÚintegration_typesrs  Úintegration_typer   r†  Úsort_keyr)   r   r'   r(   Ú
sort_orderr   ÚsortÚuse_length_minÚuse_length_maxrD  rE  rB  Úuse_chain_countr%   Úchain_countÚgeometry_modifiersÚuser›   r4   r  r+   ÚerrorrŽ  r�  r›  r�  rF  rž  r5   rG  ÚoctavesÚsmoothÚuse_pure_randomr¨  Ú	frequencyr9  Ú_seedrH  r»  r*   Úbackbone_lengthr:   Ú
tip_lengthr/   r.   ÚoffsetÚshaper0   Úrandom_radiusÚrandom_centerr1   r2   Úrandom_backbonerÃ  rÅ  rÆ  rÈ  rÉ  rÌ  rÒ  rØ  rÙ  rÕ  rÖ  r×  rç   ÚbpyÚappÚdebug_freestyleÚprintr-   rÜ   râ   rÓ   r«   rè   Úcolor_modifiersrÚ   rY   rZ   Ú
color_ramprð   ró   rô   r  r  r  r  r  r6  rk  r  r�  r‚  r]  rI  Úalpha_modifiersrà   rŒ   rŠ   r‹   rù   r  r#  r;  rs  r…  ra  Úthickness_modifiersrä   ré   rê   rý   r  r'  r+  r-  r.  r/  r>  r9   Úuse_asymmetricrw  rŠ  ÚRuntimeErrorÚ	use_nodesÚ	node_treer,   r8   Útexture_spacingÚcallbacks_modifiers_postÚextendÚcapsr3   r6   Úuse_dashed_liner}  r%  ÚcreateÚcallbacks_lineset_post)Ú
layer_nameÚlineset_namer�   ÚlayerÚlinesetr|  ÚfnÚselection_criteriaÚedge_type_criteriaÚupredrõ  rm  rn  r  r  r  ÚintegrationÚbpredrD  rE  Úshaders_listÚmrç   r
  Úhas_texs                            r]   Úprocessr*  Ê  s7  € ÝÑÔ€EØÔ˜jÔ)€EØÔ&Ô/°Ô=€GØÔ!€Iõ $ð "ð "ˆØ
ˆˆ5�%˜Ñ!Ô!Ð!Ð!àÐàÔ#ð 	UØÔ Ò*Ð*Ø×%Ò%Ý,¨QÑ/Ô/ñ1ô 1ð 1ð 1àÔ 8Ò+Ð+Ø×%Ò%ÝÕ4°QÑ7Ô7Ñ8Ô8ñ:ô :ð :ð :àÔ 7Ò*Ð*Ø×%Ò%Ý1°'Ô2BÀGÄNÑSÔSñUô Uð Uð Ô#ñ $-ØÐØÔ$ð 	_Ý ¥Ô!2Ñ3Ô3ˆEØ×%Ò%¸Ô8RÐ&]¥g¨e¡n¤n nÐX]Ñ^Ô^Ð^ØÔ ð 	[Ý ¥¤Ñ/Ô/ˆEØ×%Ò%¸Ô8NÐ&Y¥g¨e¡n¤n nÐTYÑZÔZÐZØÔ ð 	[Ý ¥¤Ñ/Ô/ˆEØ×%Ò%¸Ô8NÐ&Y¥g¨e¡n¤n nÐTYÑZÔZÐZØÔ&ð 	aÝ ¥¤Ñ.Ô.ˆEØ×%Ò%¸Ô8TÐ&_¥g¨e¡n¤n nÐZ_Ñ`Ô`Ð`ØÔ,ð 	gÝ ¥Ô!:Ñ;Ô;ˆEØ×%Ò%¸Ô8ZÐ&e¥g¨e¡n¤n nÐ`eÑfÔfÐfØÔ+ð 	fÝ ¥Ô!9Ñ:Ô:ˆEØ×%Ò%¸Ô8YÐ&d¥g¨e¡n¤n nÐ_dÑeÔeÐeØÔ#ð 	^Ý ¥Ô!1Ñ2Ô2ˆEØ×%Ò%¸Ô8QÐ&\¥g¨e¡n¤n nÐW\Ñ]Ô]Ð]ØÔ!ð 	\Ý‘M”MˆEØ×%Ò%¸Ô8OÐ&Z¥g¨e¡n¤n nÐUZÑ[Ô[Ð[ØÔ*ð 	eÝ'Ñ)Ô)ˆEØ×%Ò%¸Ô8XÐ&c¥g¨e¡n¤n nÐ^cÑdÔdÐdØð 	-ØÔ,°Ò4Ð4ÝÐ 2Ð3��åÐ!3Ð4�ØÔ)¨[Ò8Ð8Ý ™œ�Ø×%Ò% eÑ,Ô,Ð,àÔ#ð )ØÔ&¨&Ò0Ð0Ý$Ñ&Ô&ˆEˆEå#Ñ%Ô%ˆEàÔ%¨Ò4Ð4Ý˜E‘N”NˆEØ×!Ò! %Ñ(Ô(Ð(àÔ#ð -ØÔÐ)ØhÐhÕ@SÐT[ÔTfÑ@gÔ@gÐhÑhÔhˆEÝ# E¨7Ô+FÈ+Ò+UÑVÔVˆEØ×%Ò% eÑ,Ô,Ð,àÔ%ð )Ý'Õ)9Ô)DÑ)FÔ)FÐGˆØ×!Ò! %Ñ(Ô(Ð(àð ÝÐ+Ð,ˆˆå‘
”
ˆÝÔ�UÑÔÐàÔð ZØÔ Ò(Ð(ØÔ(ð iÝÔ-Õ.EÑ.GÔ.GÍÐQVÉÌÑXÔXÐXÐXåÔ-Õ.DÀUÍHÉJÌJÑ.WÔ.WÕY`ÐafÑYgÔYgÑhÔhÐhÐhØÔ 9Ò,Ð,ØÔ(ð [ÝÔ-Õ.NÈyÔO_Ñ.`Ô.`ÑaÔaÐaÐaåÔ-Õ.GÈ	ÔHXÑ.YÔ.YÑZÔZÐZøåŒÕ.­y©{¬{½I¹K¼KÑHÔHÍ'ÐRWÉ.Ì.ÑYÔYÐYàÔ"ð ;ÝÔ"Õ#7Ñ#9Ô#9Ñ:Ô:Ð:ØÔð X )Ô"9ð XØ+4Ô+BÐL�IÔ'Ð'Èˆ	Ø+4Ô+BÐL�IÔ'Ð'Èˆ	ÝÔ"Õ#@ÀÈIÑ#VÔ#VÑWÔWÐWØÔ!ð WÝÔ"Õ#8¸Ô9OÑ#PÔ#PÐRUÑVÔVÐVØÔ"ñ 1ØˆØÔ  1Ò$Ð$¨Ô)=ÀÒ)AÐ)AØ�NŠN˜9Ô0Ñ1Ô1Ð1Ø�NŠN˜9Ô/Ñ0Ô0Ð0ØÔ  1Ò$Ð$¨Ô)=ÀÒ)AÐ)AØ�NŠN˜9Ô0Ñ1Ô1Ð1Ø�NŠN˜9Ô/Ñ0Ô0Ð0ØÔ  1Ò$Ð$¨Ô)=ÀÒ)AÐ)AØ�NŠN˜9Ô0Ñ1Ô1Ð1Ø�NŠN˜9Ô/Ñ0Ô0Ð0Ýˆw‰<Œ<˜!ÒÐØˆHÝ/°¸ÑBÔBˆJÝÔ&Õ'?À
Ñ'KÔ'KÝ'?À
Ñ'KÔ'KØ'/ñ1ô 1ð 1ð Ôð Ý'×+Ò+¨IÔ,FÍÔH\Ñ]Ô]ˆØÔÐ!7Ò7Ð7Ý˜KÑ(Ô(ˆEˆEØÔ ;Ò.Ð.Ý ‘N”NˆEˆEØÔ =Ò0Ð0Ý$ [Ñ1Ô1ˆEˆEØÔ =Ò0Ð0Ý$ [Ñ1Ô1ˆEØÔ 9Ò,Ð,Ý˜E‘N”NˆEÝŒ�uÑÔÐàÔð F 9Ô#;ð FØ-6Ô-EÐO�YÔ)Ð)È4ˆ
Ø-6Ô-EÐO�YÔ)Ð)È4ˆ
ÝÔÕ,¨Z¸ÑDÔDÑEÔEÐEØÔ ð >ÝÔ� iÔ&;Ñ<Ô<Ñ=Ô=Ð=à€LØÔ)ð 2Zñ 2ZˆØŒuð 	ØØŒ6�ZÒÐØ×Ò¥Ø”
ñ!ô !ñ ô ð ð àŒV�~Ò%Ð%Ø×ÒÕ 1Ø”ñ!ô !ñ ô ð ð àŒVÐ'Ò'Ð'Ø×ÒÖ 4°Q´[Ñ AÔ AÑBÔBÐBÐBØŒVÐ+Ò+Ð+Ø×ÒÖ 7Ø”˜aœk¨1¬7ñ!4ô !4ñ 5ô 5ð 5ð 5àŒV�Ò&Ð&Ø×ÒÖ 2Ø”˜QœW a¤i°´¸1Ô;Lñ!Nô !Nñ Oô Oð Oñ OàŒVÐ(Ò(Ð(Ø×ÒÖ 3Ø”˜Qœ[¨!¬)°Q´W¾e¿iºiÈÌÑ>OÔ>Oñ!Qô !Qñ Rô Rð Rñ RàŒVÐ(Ò(Ð(Ø×ÒÖ 3Ø”˜Qœ[¨!¬)°Q´W¾e¿iºiÈÌÑ>OÔ>Oñ!Qô !Qñ Rô Rð Rñ RàŒVÐ+Ò+Ð+Ø×ÒÖ 7ØÔ!ñ!#ô !#ñ $ô $ð $ñ $àŒV�}Ò$Ð$Ø×ÒÖ 0Ø”ñ!ô !ñ ô ð ñ àŒVÐ'Ò'Ð'Ø×ÒÖ 6Ø”ñ!ô !ñ ô ð ñ àŒV�Ò&Ð&Ø×ÒÖ 2Ø”ñ!ô !ñ ô ð ñ àŒV�{Ò"Ð"ØŒw˜)Ò#Ð#Ø×#Ò#Ö$<Ø”H˜aœo¨q¬ñ%@ô %@ñ Aô Að Añ Aà”˜JÒ&Ð&Ø×#Ò#Ö$=Ø”H˜aœo¨q¬ñ%@ô %@ñ Aô Að Añ Aà”˜IÒ%Ð%Ø×#Ò#Ö$<Ø”H˜aÔ/°Ô1Bñ%Dô %Dñ Eô Eð EùàŒV�{Ò"Ð"Ø×Ò¦Ø”˜œ ¤ Q¤Sñ!*ô !*ñ +ô +ð +ñ +àŒV�~Ò%Ð%Ø×ÒÖ 1Ø”˜œ A¤I¨q¬w¸¼	À1Ä9ÈaÌiñ!Yô !Yñ Zô Zð Zùð Ô"ð a¨	Ô(:¸gÒ(EÐ(EÈ)ÔJcÐ(EØ&Ô9ÐÐà%ÐØˆ
ˆ
ˆ
ØŒ7Ô"ð 	aÞð `ñ aô að aà×ÒÖ+¨i¬oÐVÀiÄoÐVÐVÑWÔWÐWØ×ÒÖ+¨IÔ,?ÐASØ,5Ô,EñGô Gñ Hô Hð Hð Ô&ð !0ñ !0ˆØŒuð 	ØØŒ6�^Ò#Ð#Ø×ÒÖ 6Ø”˜œ a¤lñ!4ô !4ñ 5ô 5ð 5ð 5àŒVÐ-Ò-Ð-Ø×ÒÖ =Ø”˜œ a¤lØ”˜Qœ[ñ!*ô !*ñ +ô +ð +ð +ð ŒVÐ-Ò-Ð-ØŒxÐ#Ø×#Ò#Ö$AØ”G˜Qœ[¨!¬,¸¼Ø”K ¤ñ%.ô %.ñ /ô /ð /øð ŒV�zÒ!Ð!Ø×ÒÖ 3Ø”˜œ a¤l°AÔ4HØ”
ñ!ô !ñ ô ð ñ ð ŒV�yÒ Ð Ø×ÒÖ 2Ø”˜œ a¤lñ!4ô !4ñ 5ô 5ð 5ñ 5àŒV�~Ò%Ð%Ø×ÒÖ 6Ø”˜œ a¤lØ”˜Qœ[ñ!*ô !*ñ +ô +ð +ñ +ð ŒV�~Ò%Ð%Ø×ÒÖ 6Ø”˜œ a¤lØ” ¤ñ!2ô !2ñ 3ô 3ð 3ñ 3ð ŒV�wÒÐØ×ÒÖ 0Ø”˜œ a¤lØ”˜QœX q¤vñ!/ô !/ñ 0ô 0ð 0ùð Ô&ð !0ñ !0ˆØŒuð 	ØØŒ6�^Ò#Ð#Ø×ÒÖ 6Ø”˜œ a¤i°´¸1¼7ñ!Dô !Dñ Eô Eð Eð EàŒVÐ-Ò-Ð-Ø×ÒÖ =Ø”˜œ a¤i°´¸1¼7Ø”˜Qœ[ñ!*ô !*ñ +ô +ð +ð +ð ŒVÐ-Ò-Ð-ØŒxÐ#Ø×#Ò#Ö$AØ”G˜Qœ[¨!¬)°Q´X¸q¼wÈÌØ”K ¤ñ%.ô %.ñ /ô /ð /ùð ŒV�zÒ!Ð!Ø×ÒÖ 3Ø”˜œ a¤i°´¸1¼7ØÔ$ñ!&ô !&ñ 'ô 'ð 'ñ 'ð ŒV�yÒ Ð Ø×ÒÖ 2Ø”˜œ a¤i°´¸1¼7ñ!Eô !Eñ Fô Fð Fñ FàŒV�~Ò%Ð%Ø×ÒÖ 6Ø”˜œ a¤i°´¸1¼7Ø”˜Qœ[ñ!*ô !*ñ +ô +ð +ñ +ð ŒV�~Ò%Ð%Ø×ÒÖ 6Ø”˜œ a¤i°´¸1¼7Ø” ¤ñ!2ô !2ñ 3ô 3ð 3ñ 3ð ŒV�wÒÐØ×ÒÖ 0Ø”˜œ a¤i°´¸1¼7Ø”˜QœX q¤vñ!/ô !/ñ 0ô 0ð 0ùð Ô*ð 2Nñ 2NˆØŒuð 	ØØŒ6�^Ò#Ð#Ø×ÒÖ :Ø" IÔ$=Ø”˜œ a¤i°´¸1¼7Ø”˜Qœ[ñ!*ô !*ñ +ô +ð +ð +ð ŒVÐ-Ò-Ð-Ø×ÒÖ AØ" IÔ$=Ø”˜œ a¤i°´¸1¼7Ø”˜Qœ[¨!¬+°q´{ñ!Dô !Dñ Eô Eð Eð Eð ŒVÐ-Ò-Ð-ØŒxÐ#Ø×#Ò#Ö$EØ&¨	Ô(AØ”G˜Qœ[¨!¬)°Q´X¸q¼wÈÌØ”K ¤¨a¬k¸1¼;ñ%Hô %Hñ Iô Ið Iùð ŒV�zÒ!Ð!Ø×ÒÖ 7Ø" IÔ$=Ø”˜œ a¤i°´¸1¼7ØÔ$ a¤k°1´;ñ!@ô !@ñ Aô Að Añ Að ŒV�}Ò$Ð$Ø×ÒÖ ;Ø" IÔ$=Ø”˜œØ”˜qœ°´ñ!Aô !Añ Bô Bð Bñ Bð ŒV�yÒ Ð Ø×ÒÖ 6Ø" IÔ$=Ø”˜œ a¤i°´¸1¼7Ø” ¤ñ!2ô !2ñ 3ô 3ð 3ñ 3ð ŒV�wÒÐØ×ÒÖ 4Ø" IÔ$=Ø”˜œØ”˜QœX q¤v¨qÔ/?ñ!Aô !Añ Bô Bð Bñ Bð ŒV�~Ò%Ð%Ø×ÒÖ :Ø" IÔ$=Ø”˜œ a¤i°´¸1¼7Ø”˜Qœ[¨!¬/¸1¼?ñ!Lô !Lñ Mô Mð Mñ Mð ŒV�~Ò%Ð%Ø×ÒÖ :Ø" IÔ$=Ø”˜œ a¤i°´¸1¼7Ø” ¤°!´/À1Ä?ñ!Tô !Tñ Uô Uð Uñ Uö
 Ð@Å$ÀqÁ'Ä'È1ÑMÔMÐMà€GØÔð ˜yÔ2ð Ø×ÒÖ0°Ô1DÑEÔEÑFÔFÐFØˆØð PØ×ÒÖ3°IÔ4MÑNÔNÑOÔOÐOö 'ð 7ð 7ˆØ×Ò˜B˜B˜u e¨WÑ5Ô5Ñ6Ô6Ð6Ð6ð „~˜Ò Ð Ø×ÒžNÑ,Ô,Ñ-Ô-Ð-Ð-Ø	Œ˜8Ò	#Ð	#Ø×ÒžOÑ-Ô-Ñ.Ô.Ð.ð Ô ð ;Þ$ YÑ/Ô/ˆÝˆw‰<Œ<˜!ÒÐØ×ÒÖ 0°Ñ 9Ô 9Ñ:Ô:Ð:õ Ô•X‘Z”Z Ñ.Ô.Ð.ö %ð "ð "ˆØ
ˆˆ5�%˜Ñ!Ô!Ð!Ð!ð"ð "r^   )¡Úfreestyle.typesr   r   r   r   r   r   r	   r
   r   r   r   r   Úfreestyle.chainingiteratorsr   r   r   r   Úfreestyle.functionsr   r   r   r   r   Úfreestyle.predicatesr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   Úfreestyle.shadersr*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   Úthickness_noiser:   Úfreestyle.utilsr;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   Ú
_freestylerJ   rK   rL   rq  r
  Ú	mathutilsrM   ÚmathrN   rO   rP   rQ   rR   Ú	itertoolsrS   r¹  r  r  rU   rn   r…   r–   r´   rÓ   rÚ   rà   rä   rð   rù   rý   r  r  r  r  r#  r'  r+  r6  r;  r>  rB  r]  ra  ri  rk  rs  rw  r}  r  r…  rŠ  rŽ  r›  r¨  r»  rÃ  rÌ  rà  rñ  ró  r   r	  r  r%  r0  rB  rI  rU  rX  re  ri  rn  r  r}  rƒ  r†  r‡  rˆ  r‰  rŠ  rò  r*  rl   r^   r]   ú<module>r6     s�  ððð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð(ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð&ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð"ð ð ð ð ð ð ð ð ð ð €€€Ø 
€
€
€
à Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ð Ð ð
 Ð ØÐ ØÐ ð;ð ;ð ;ð ;ð ;˜ñ ;ô ;ð ;ð"ð ð ð ð ˜,ñ ô ð ð@Að Að Að Að AÐ.ñ Aô Að Að*0ð 0ð 0ð 0ð 0ñ 0ô 0ð 0ð072ð 72ð 72ð 72ð 72Ð2ñ 72ô 72ð 72ðt>ð >ð >ð >ð >˜,Ð(>ñ >ô >ð >ð4:ð :ð :ð :ð :Ð.ñ :ô :ð :ð5ð 5ð 5ð 5ð 5Ð1ñ 5ô 5ð 5ð+ð +ð +ð +ð +Ð!6Ð8Lñ +ô +ð +ð":ð :ð :ð :ð :Ð$5ñ :ô :ð :ð5ð 5ð 5ð 5ð 5Ð$8ñ 5ô 5ð 5ð+ð +ð +ð +ð +Ð(=Ð?Sñ +ô +ð +ð$:ð :ð :ð :ð :Ð$5ñ :ô :ð :ð*5ð 5ð 5ð 5ð 5Ð$8ñ 5ô 5ð 5ð*+ð +ð +ð +ð +Ð(=Ð?Sñ +ô +ð +ð0>ð >ð >ð >ð >Ð+ñ >ô >ð >ð:5ð 5ð 5ð 5ð 5Ð.ñ 5ô 5ð 5ð+ð +ð +ð +ð +Ð3Ð5Iñ +ô +ð +ð&+ð +ð +ð +ð +Ð"7Ð9Lñ +ô +ð +ð4	<ð 	<ð 	<ð 	<ð 	<Ð*ñ 	<ô 	<ð 	<ð	7ð 	7ð 	7ð 	7ð 	7Ð-ñ 	7ô 	7ð 	7ð3ð 3ð 3ð 3ð 3Ð2Ð4Hñ 3ô 3ð 3ð& ð  ð  ð  ð  ñ  ô  ð  ð&Að Að Að Að AÐ0Ð2EÀ{ñ Aô Að Að$
dð 
dð 
dð 
dð 
dÐ(¨+ñ 
dô 
dð 
dð
_ð 
_ð 
_ð 
_ð 
_Ð+¨[ñ 
_ô 
_ð 
_ðð ð ð]ð ]ð ]ð ]ð ]Ð.ñ ]ô ]ð ]ð"Xð Xð Xð Xð XÐ1ñ Xô Xð Xð"3ð 3ð 3ð 3ð 3Ð!6Ð8Lñ 3ô 3ð 3ð.9ð 9ð 9ð:ð :ð :ð :ð :Ð.ñ :ô :ð :ð5ð 5ð 5ð 5ð 5Ð1ñ 5ô 5ð 5ð3ð 3ð 3ð 3ð 3Ð!6Ð8Lñ 3ô 3ð 3ð&(ð (ð (ð (ð (˜<ñ (ô (ð (ð&ð ð ð ð ˜lñ ô ð ð(ð ð ð ð ˜,ñ ô ð ð.ð ð ð ð ˜,ñ ô ð ð2ð ð ð ð �\ñ ô ð ð$,ð ,ð ,ð ,ð ,˜ñ ,ô ,ð ,ðb	2ð 	2ð 	2ð 	2ð 	2Ð(8ñ 	2ô 	2ð 	2ðð ð ðð ð ð ð Ð&ñ ô ð ð('ð 'ð 'ð 'ð 'Ð/ñ 'ô 'ð 'ð&ð &ð &ð &ð &Ð/ñ &ô &ð &ðð ð ð ð ñ ô ð ðH4ð 4ð 4ð 4ð 4�|ñ 4ô 4ð 4ð<6ð 6ð 6ð 6ð 6Ð+ñ 6ô 6ð 6ðBð ð ð ð Ð*ñ ô ð ðð ð ð ð Ð'ñ ô ð ð"ð ð ð ð Ð&ñ ô ð ð&ð ð ð ð Ð+ñ ô ð ðð ð ð ð Ð$4ñ ô ð ð ð ð ð ð Ð,ñ ô ð ð&	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ˆ‰Œ€ðð ð ðð ð ð Ô ØÔØÔØÔ"ØÔ ð"ð "Ð ði"ð i"ð i"ð i"ð i"r^   