flash on 2015-7-10

by mutantleg
♥0 | Line 171 | Modified 2015-07-10 10:15:57 | MIT License
play

ActionScript3 source code

/**
 * Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/ikjx
 */

package {
    import flash.text.TextField;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {

            deb = new TextField(); deb.width=320;deb.height=240;deb.mouseEnabled=false; addChild(deb);
            
            stage.quality = "LOW";

               vecNode = new Vector.<xNode>(0,false);            
       
               var a:xNode; var b:xNode;
               var i:int; var num:int;
               var k:int; var e:int;
            
            graphics.clear();
            graphics.lineStyle(2, 0);
               
             num = vecFace.length;
             for (i=0;i<num;i+=3)
             {
                 
                a = new xNode(); vecNode.push(a); 
                k = vecFace[i]*3;  a.x0 = vecVert[ k ]; a.y0 = vecVert[k+2]; 
                k = vecFace[i+1]*3;  a.x1 = vecVert[ k ]; a.y1 = vecVert[k+2]; 
                k = vecFace[i+2]*3;  a.x2 = vecVert[ k ]; a.y2 = vecVert[k+2]; 
                a.cx = (a.x0+a.x1+a.x2)/3;
                a.cy = (a.y0+a.y1+a.y2)/3;
                a.v0 = vecFace[i];  a.v1 = vecFace[i+1];   a.v2 = vecFace[i+2];
                 
                graphics.drawCircle(a.cx,a.cy, 4); 
                
                graphics.moveTo(a.x0, a.y0);
                graphics.lineTo(a.x1, a.y1);
                graphics.lineTo(a.x2, a.y2);
                graphics.lineTo(a.x0, a.y0);
                 
             }//nexti      


            graphics.lineStyle(2, 0);
 
             num = vecNode.length;   
             for (i=0; i <num; i+=1)
             {
               a = vecNode[i];
               for (k=i+1;k<num;k+=1)
               {
                   b = vecNode[k];
                   e = 0;
                   
                   if (a.v0 == b.v0 || a.v0 == b.v1 || a.v0 == b.v2) { e+=1; }
                   if (a.v1 == b.v0 || a.v1 == b.v1 || a.v1 == b.v2) { e+=1; }
                   if (a.v2 == b.v0 || a.v2 == b.v1 || a.v2 == b.v2) { e+=1; }
                   
                   if (e != 2) { continue; }
                   
                   a.vecNext.push(b);
                   b.vecNext.push(a);
                   
                   graphics.moveTo(a.cx,a.cy);
                   graphics.lineTo(b.cx,b.cy);
                   
               }//nextk  
             }//nexti
             
             genGroup(vecNode);

             vecCol = new Vector.<uint>(0,false);
             for (i=0;i<256;i++) { vecCol[i] = 0xFFffFFff*Math.random(); }

            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        public var deb:TextField;

        public function onEnter(e:Event):void
        {
            var mx:Number; var my:Number;
            mx = stage.mouseX; my = stage.mouseY;
            
            graphics.clear();
            graphics.lineStyle(2, 0);
            
            var num:int; var i:int; var a:xNode;
             num = vecNode.length;   
             for (i=0; i <num; i+=1)
             {
               a = vecNode[i];
               if (a.group < 0) { continue; }

                graphics.beginFill(vecCol[a.group], 1);            
                    graphics.moveTo(a.x0, a.y0);
                    graphics.lineTo(a.x1, a.y1);
                    graphics.lineTo(a.x2, a.y2);
                    graphics.lineTo(a.x0, a.y0);
                graphics.endFill();
            
                graphics.drawCircle(a.cx,a.cy, 4);
             }//nexti
             
             graphics.lineStyle(4,0);
             a = getNode(mx, my, vecNode);
             if (a != null)
             {
                graphics.beginFill(0xff, 0.5);            
                    graphics.moveTo(a.x0, a.y0);
                    graphics.lineTo(a.x1, a.y1);
                    graphics.lineTo(a.x2, a.y2);
                    graphics.lineTo(a.x0, a.y0);
                graphics.endFill();
             }//endif

            deb.text = ""+a;             
            
        }//onenter


        
        public var vecNode:Vector.<xNode>;
        public var vecCol:Vector.<uint>;
        
        public function genGroup(vec:Vector.<xNode>):void
        {
          var group:int;    var it:int;     var num:int;
          var temp:Vector.<xNode>; 
          var i:int; var a:xNode; var b:xNode;
          var k:int; var numk:int;
          var vn:Vector.<xNode>;
          
          group = 1;
          num = vec.length;
          temp = new Vector.<xNode>(num*2,false);
          
          for (i =0; i<num;i++)
          {
            a = vec[i];
            if (a.group > 0) { continue; } 
            group += 1;
            temp[0] = a;
            it = 1;
            
             while (it > 0)
             {
                a = temp[it - 1];
                it -= 1;
                a.group = group;
                vn = a.vecNext;
                numk = vn.length;
                for (k=0;k<numk;k+=1)
                {
                   b = vn[k];
                   if (b.group > 0) { continue; } 
                   temp[it] = b; it += 1;
                }//nextk
             }//wend
            
          }//nexti  
        }//gengroup


       public function getNode(ax:Number, ay:Number, vec:Vector.<xNode>):xNode
       {
           var i:int; var num:int; var a:xNode;   num = vec.length;
           for (i=0;i<num;i+=1)  {  a = vec[i];   if (isOverNode(ax,ay, a)) { return a; } } 
           return null;
       }//getnode 
       
       public function isOverNode(px:Number, py:Number, a:xNode):Boolean
       {
           var w:int; var wz:Number;
           var ax:Number; var ay:Number;
           var bx:Number; var by:Number;
           w = 0;
           
            if (((py < a.y0 && py < a.y1) || (py >a.y0 && py >a.y1)) == false)
            { ax = px - a.x0; ay = py - a.y0;    bx = a.x0 - a.x1; by = a.y0 - a.y1;
             wz = (ax*by)-(ay*bx);   if (wz != 0)    {w += wz > 0 ? 1 : -1; }        }
            
            if (((py < a.y1 && py < a.y2) || (py >a.y1 && py >a.y2)) == false)
            {   ax = px - a.x1; ay = py - a.y1;  bx = a.x1 - a.x2; by = a.y1 - a.y2;
             wz = (ax*by)-(ay*bx);   if (wz != 0)   { w += wz > 0 ? 1 : -1; }        }
            
            if (((py < a.y0 && py < a.y2) || (py >a.y0 && py >a.y2)) == false)
            {  ax = px - a.x2; ay = py - a.y2;   bx = a.x2 - a.x0; by = a.y2 - a.y0;
             wz = (ax*by)-(ay*bx);   if (wz != 0) { w += wz > 0 ? 1 : -1; }        }
           
        return w < 0;
       }//isover  
        
       public static var vecFace:Vector.<int> = Vector.<int>([0,1,2,1,3,4,4,2,1,3,5,6,6,4,3,5,
       7,8,8,6,5,8,7,9,7,10,9,4,6,11,11,12,4,13,12,14,14,15,13,12,11,16,16,14,12,11,17,18,
       18,16,11,18,17,19,20,15,21,15,14,22,22,21,15,16,18,23,23,24,16,19,25,26,23,26,27,27,28,23,29,30,
       31,31,32,29,30,33,31,34,28,35,28,27,36,36,35,28]);

       public static var vecVert:Vector.<Number> = Vector.<Number>([5.1,0.0,404.8,0.2,0.0,450.5,77.7,0.0,386.9,155.2,0.0,464.4,
       140.5,0.0,386.9,232.7,0.0,464.4,245.2,0.0,417.5,387.7,0.0,464.4,310.2,0.0,386.9,465.2,0.0,356.0,465.2,0.0,429.9,238.4,0.0,309.4,
       156.5,0.0,309.4,24.4,0.0,339.0,176.9,0.0,211.6,0.2,0.0,231.9,232.7,0.0,231.9,378.3,0.0,327.6,310.2,0.0,231.9,378.3,0.0,231.8,
       0.2,0.0,154.4,65.4,0.0,132.0,155.2,0.0,154.4,288.4,0.0,138.5,232.7,0.0,154.4,455.8,0.0,231.8,451.2,0.0,154.4,447.7,0.0,76.9,
       310.2,0.0,76.9,0.2,0.0,55.5,77.7,0.0,76.9,155.2,0.0,-0.6,0.2,0.0,-0.6,155.2,0.0,47.5,232.7,0.0,60.0,232.7,0.0,-0.6,
       465.2,0.0,-0.6]);
        
    }//classend
}

internal class xNode
{
  public var cx:Number = 0;  public var cy:Number = 0;    

  public var group:int = -1;
  public var test:int =-1;
  public var vecNext:Vector.<xNode> = new Vector.<xNode>(0,false);

  public var v0:int = 0;
  public var v1:int = 0;
  public var v2:int = 0;
 
  public var x0:Number = 0;  public var y0:Number = 0;
  public var x1:Number = 0;  public var y1:Number = 0;
  public var x2:Number = 0;  public var y2:Number = 0;
  
    
}//xnode