You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

shadows.mp 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. % permet d'afficher des ombres jolies
  2. % comme dans Omnigraffle
  3. %
  4. % Voilà un exemple d'utilisation
  5. % --------
  6. % input shadows
  7. %
  8. % beginfig(1);
  9. % path p; p :=fullcircle scaled 3u;
  10. %
  11. % drawShadow(p);
  12. % fill p withcolor white;
  13. % draw p withpen pencircle scaled .02u;
  14. % draw p blownup -.3u withpen pencircle scaled .02u;
  15. % label(btex $$\frac{1}{2}$$ etex, origin);
  16. % endfig;
  17. % -------
  18. %
  19. % Qualité maximale tolérée 84.
  20. %
  21. %
  22. input default ;
  23. % p est un path pour lequel on va tracer la figure
  24. % decalage est un vecteur de décalge pour l'ombre
  25. % smooth est l'effacement de l'ombre (0 renvoie une ombre portée parfaite)
  26. % la valeur par défaut est .06u
  27. % quality est la qualité du rendu (plus il est élevé meilleur est le rendu)
  28. % ATTENTION : une valeur trop grande risque de donner des
  29. % PDF très long à lire...
  30. % la valeur par défaut est 100
  31. % grey est le degrès de transparence global
  32. % la valeur par défaut est .3
  33. % couleur est la couleur de l'ombre, par défaut c'est black
  34. def drawShadowWithParameters(expr p, decalage, smooth, quality, grey, couleur) =
  35. begingroup ;
  36. qual := round(sqrt (quality/2));
  37. factor := grey/((qual+1)*(qual+1));
  38. if path p :
  39. if cycle p :
  40. path shadow ;
  41. pair dcl;
  42. shadow := p shifted decalage ;
  43. % fill shadow withcolor transparent(1,factor,black) ;
  44. dcl:=(0,0);
  45. for j=-qual upto qual :
  46. for k=-qual upto qual :
  47. dcl := (j/qual, k/qual) scaled smooth;
  48. fill shadow shifted dcl withcolor transparent(1,factor,couleur) ;
  49. endfor ;
  50. endfor ;
  51. else :
  52. path shadow ;
  53. pair dcl;
  54. shadow := p shifted decalage ;
  55. dcl:=(0,0);
  56. for j=-qual upto qual :
  57. for k=-qual upto qual :
  58. dcl := (j/qual, k/qual) scaled smooth;
  59. draw shadow shifted dcl withcolor transparent(1,factor,couleur) ;
  60. endfor ;
  61. endfor ;
  62. fi ;
  63. else :
  64. picture shadow ;
  65. pair dcl ;
  66. shadow := p shifted decalage ;
  67. dcl := origin ;
  68. for j = -qual upto qual :
  69. for k = -qual upto qual :
  70. dcl := (j/qual, k/qual) scaled smooth ;
  71. draw shadow shifted dcl withcolor transparent (1, factor, couleur) ;
  72. endfor ;
  73. endfor ;
  74. fi ;
  75. endgroup ;
  76. enddef ;
  77. pair shadowsDefaultDecalage ;
  78. shadowsDefaultDecalage := (.05u, -.18u) ;
  79. numeric shadowsDefaultSmooth ;
  80. shadowsDefaultSmooth := .18u ;
  81. numeric shadowsDefaultQuality ;
  82. shadowsDefaultQuality := 17 ;
  83. numeric shadowsDefaultGrey ;
  84. shadowsDefaultGrey := .3 ;
  85. color shadowsDefaultColor ;
  86. shadowsDefaultColor := black ;
  87. % affiche l'ombre d'un chemin avec les paramètres par défaults
  88. def drawShadow(expr p) =
  89. drawShadowWithParameters(p, shadowsDefaultDecalage, shadowsDefaultSmooth,
  90. shadowsDefaultQuality, shadowsDefaultGrey,
  91. shadowsDefaultColor) ;
  92. enddef ;