/src/com/li/fluids/shallow/DisturbanceBrush.as

https://github.com/osoker/away3d-examples-broomstick
ActionScript | 68 lines | 51 code | 9 blank | 8 comment | 0 complexity | c8d328c441e3e53c6f3bb3faca15e7d8 MD5 | raw file
  1. package com.li.fluids.shallow
  2. {
  3. import flash.display.BitmapData;
  4. import flash.display.GradientType;
  5. import flash.display.SpreadMethod;
  6. import flash.display.Sprite;
  7. import flash.filters.BlurFilter;
  8. import flash.geom.Matrix;
  9. import flash.geom.Rectangle;
  10. /*
  11. Handles bitmap images to use with a FluidDisturb on a Fluid simulation.
  12. */
  13. public class DisturbanceBrush
  14. {
  15. private var _bmd:BitmapData;
  16. public function DisturbanceBrush()
  17. {
  18. }
  19. public function generateGradient(radius:Number):void
  20. {
  21. var drawer:Sprite = new Sprite();
  22. var fillType:String = GradientType.RADIAL;
  23. var colors:Array = [0xFFFFFF, 0x000000];
  24. var alphas:Array = [1, 1];
  25. var ratios:Array = [0x00, 0xFF];
  26. var matrix:Matrix = new Matrix();
  27. matrix.createGradientBox(radius, radius, 0, 0, 0);
  28. var spreadMethod:String = SpreadMethod.PAD;
  29. drawer.graphics.beginGradientFill(fillType, colors, alphas, ratios, matrix, spreadMethod);
  30. drawer.graphics.drawRect(0, 0, radius, radius);
  31. drawer.graphics.endFill();
  32. fromSprite(drawer);
  33. }
  34. /*
  35. Converts a sprite to a bitmapData with blur.
  36. Adds bleeding to avoid liquid stickiness to image's edges.
  37. Accounts for bounding box variations due to blur.
  38. */
  39. public function fromSprite(spr:Sprite, blur:Number = 4):void
  40. {
  41. _bmd = new BitmapData(spr.width, spr.height, false, 0x000000);
  42. var blurFilter:BlurFilter = new BlurFilter(blur, blur, 3);
  43. var blurRect:Rectangle = _bmd.generateFilterRect(_bmd.rect, blurFilter);
  44. _bmd = new BitmapData(blurRect.width, blurRect.height, false, 0x000000);
  45. var matrix:Matrix = new Matrix();
  46. matrix.translate(-blurRect.x, -blurRect.y)
  47. spr.filters = [blurFilter];
  48. _bmd.draw(spr, matrix);
  49. }
  50. public function set bitmapData(value:BitmapData):void
  51. {
  52. _bmd = value;
  53. }
  54. public function get bitmapData():BitmapData
  55. {
  56. return _bmd;
  57. }
  58. }
  59. }