Show
Ignore:
Timestamp:
12/20/07 16:43:26 (12 months ago)
Author:
gyuque
Message:

lang/legacy-actionscript/as2draw: tuned line rendering algorithm... comparing with native API.

Location:
lang/legacy-actionscript/as2draw
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • lang/legacy-actionscript/as2draw/Drawable.as

    r3348 r3350  
    1414                mDragData = {dragging: false, prevX: 0, prevY: 0}; 
    1515                mMC = aContainer.createEmptyMovieClip("drawable_mc", 1); 
     16                mMC._quality = "LOW"; 
    1617                mPixBuf = new PixelBuffer(aW, aH, mMC); 
    1718                mBGColor = aBGColor; 
     
    2526                mMC.onMouseMove = function(){ _this.onMouseMove(); }; 
    2627                mMC.useHandCursor = false; 
     28                 
     29                // test patterns 
     30                renderLine(80, 20, 190, 20); 
     31                renderLine(80, 20, 130, 190); 
     32                renderLine(80, 20, 100, 190); 
     33                renderLine(80, 20, 80, 190); 
     34                renderLine(80, 20, 60, 190); 
     35                renderLine(80, 20, 10, 20); 
     36                 
    2737        } 
    2838 
     
    6474                var dx:Number = 0; 
    6575                var dy:Number = 0; 
    66                  
    67                 mMC.lineStyle(undefined, 0, 0, true); 
     76                l = 0; 
    6877                for (var i:Number = -1;i < l;i++) 
    6978                { 
     
    7382                                dy = ofs[(i<<1)+1]; 
    7483                        } 
    75                         mMC.beginFill(mCurrentPen.color); 
    7684                        mPixBuf.drawLine( 
    7785                                x1 +dx, y1 +dy, 
    78                                 x2 +dx, y2 +dy); 
    79                         mMC.endFill(); 
     86                                x2 +dx, y2 +dy, 0, mCurrentPen.color); 
     87 
    8088                } 
     89                 
     90                        mMC.lineStyle(1, 0xff0f00); 
     91                        mMC.moveTo(x1+dx, y1+dy); 
     92                        mMC.lineTo(x2+dx, y2+dy); 
    8193        } 
    8294 
  • lang/legacy-actionscript/as2draw/PixelBuffer.as

    r3346 r3350  
    4242        private var mDir; 
    4343        private var mCount; 
     44         
    4445        public function begin(aX:Number, aY:Number, aDir:Number) 
    4546        { 
     
    5556        } 
    5657 
    57         public function commit(aData:Number) 
     58        public function commit(aData:Number, aOutColor:Number) 
    5859        { 
     60                if (mCount == 0) 
     61                        return; 
     62 
    5963                var dx:Number; 
    6064                var dy:Number; 
    6165 
     66                mOut.lineStyle(1, aOutColor); 
     67                 
    6268                switch(mDir) { 
    6369                case 0: 
    6470                        dx = 0; dy = -1; 
    65                         U.rect(mOut, mSX, mSY-mCount, 1, mCount); 
     71                        mOut.moveTo(mSX, mSY-mCount); 
     72                        mOut.lineTo(mSX, mSY); 
    6673                        break; 
    6774                case 1: 
    6875                        dx = 1; dy = 0; 
    69                         U.rect(mOut, mSX, mSY, mCount, 1); 
     76                        mOut.moveTo(mSX       , mSY); 
     77                        mOut.lineTo(mSX+mCount, mSY); 
    7078                        break; 
    7179                case 2: 
    7280                        dx = 0; dy = 1; 
    73                         U.rect(mOut, mSX, mSY, 1, mCount); 
     81                        mOut.moveTo(mSX, mSY); 
     82                        mOut.lineTo(mSX, mSY+mCount); 
    7483                        break; 
    7584                case 3: 
    7685                        dx = -1; dy = 0; 
    77                         U.rect(mOut, mSX-mCount, mSY, mCount, 1); 
     86                        mOut.moveTo(mSX-mCount, mSY); 
     87                        mOut.lineTo(mSX       , mSY); 
    7888                        break; 
    7989                } 
     90                //mOut.moveTo(0,0); 
    8091 
    8192                for (var i:Number = 0;i < mCount;i++) 
     
    89100 
    90101 
    91         public function drawLine(x1:Number, y1:Number, x2:Number, y2:Number, c:Number) 
     102        public function drawLine(x1:Number, y1:Number, x2:Number, y2:Number, c:Number, outc:Number) 
    92103        { 
    93104                x1 = Math.floor(x1); 
     
    100111                var dy:Number = Math.abs(y2 - y1); 
    101112                 
    102                 E = 0; 
    103                  
    104113                var x:Number; 
    105114                var y:Number; 
     
    109118                if(dx > dy) 
    110119                { 
     120                        E = dx/2; 
    111121                        if (x2 < x1) 
    112122                        { 
     
    127137                                        E -= dx; 
    128138                                        y += step; 
    129                                         commit(c); 
     139                                        commit(c, outc); 
    130140                                        begin(x+1, y, 1); 
    131141                                }                                        
    132142                        } 
    133                         commit(c); 
     143                        commit(c, outc); 
    134144                } 
    135145                else 
    136146                { 
     147                        E = dy/2; 
    137148                        if (y2 < y1) 
    138149                        { 
     
    155166                                        E -= dy; 
    156167                                        x += step; 
    157                                         commit(c); 
     168                                        commit(c, outc); 
    158169                                        begin(x, y+1, 2); 
    159170                                } 
    160171                        } 
    161                         commit(c); 
     172                        commit(c, outc); 
    162173                } 
    163174        } 
    164175} 
     176