integ/js/vs/_vs.js
author Anthony Ly <anthonyly.com@gmail.com>
Fri, 12 Apr 2013 15:08:00 +0200
changeset 28 84719280c84d
child 53 88666afffe6b
permissions -rwxr-xr-x
import VS lib
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
28
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
     1
// ....................................................................
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
     2
// Main Visual Sedimentation Code
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
     3
// ....................................................................
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
     4
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
     5
// TODO : 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
     6
// - callback on rollOut
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
     7
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
     8
(function($){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
     9
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    10
// Name Space Plug in Jquery Objects
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    11
$.fn.vs = function (){}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    12
$.fn._vs={}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    13
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    14
// All this objects are define in correspondant .js files
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    15
$.fn._vs.token      = {}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    16
$.fn._vs.draw       = {}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    17
$.fn._vs.stream     = {}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    18
$.fn._vs.chart      = {}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    19
$.fn._vs.phy        = {}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    20
$.fn._vs.decay      = {}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    21
$.fn._vs.flocculate = {}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    22
$.fn._vs.strata     = {}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    23
$.fn._vs.aggregate  = {}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    24
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    25
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    26
// Core Classe 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    27
var VisualSedimentation = function(element,options){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    28
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    29
  // Attach objects
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    30
  this.token        = $.fn._vs.token
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    31
  this.draw         = $.fn._vs.draw
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    32
  this.stream       = $.fn._vs.stream
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    33
  this.chart        = $.fn._vs.chart
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    34
  this.phy          = $.fn._vs.phy 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    35
  this.decay        = $.fn._vs.decay 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    36
  this.flocculate   = $.fn._vs.flocculate
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    37
  this.strata       = $.fn._vs.strata
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    38
//  this.aggregate    = $.fn._vs.aggregate 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    39
  this.requestAnimFrame;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    40
  
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    41
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    42
  // Mouse object have to be refactor
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    43
  this.mouse        ={}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    44
  this.mouse.x      = 0
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    45
  this.mouse.y      = 0
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    46
  this.mouse.isMouseDragging = false
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    47
  this.mouse.isMouseDown     = false
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    48
  this.mouse.selectedBody    = null
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    49
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    50
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    51
  // Variables 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    52
  this.dataFlow     = [];
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    53
  this.chartPhySetup= {}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    54
  this.tokens       = [];
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    55
  this.world        = null;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    56
  this.ctx          = null;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    57
  var elem 	        = $(element);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    58
  var self 	        = this;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    59
	var tokens        = [];
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    60
	var B2D;   
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    61
	var canvas;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    62
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    63
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    64
   // Default Settings  
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    65
	var defaultSettings = {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    66
          x:0,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    67
          y:0,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    68
          width:290.5,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    69
          height:300.5,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    70
          DOMelement:null,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    71
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    72
          chart:{ 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    73
              x:undefined,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    74
              y:undefined,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    75
              width:undefined,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    76
              height:undefined,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    77
              colorRange:d3.scale.category10(),
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    78
              scale:d3.scale,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    79
              type:'StackedAreaChart',
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    80
                  /*
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    81
                    name are based on prefuse tollokit layout :
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    82
                     - CircleLayout,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    83
                     - StackedAreaChart,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    84
                     //- bubbleAreaChart,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    85
                     x AxisLabelLayout,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    86
                     x AxisLayout,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    87
                     x CollapsedStackLayout,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    88
                     x GridLayout, 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    89
                  */
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    90
              spacer:5,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    91
              //treeLayout:false,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    92
              column:3,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    93
              wallColor:"rgba(230,230,230,0)",
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    94
              label:true,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    95
              radius:10 // for CircleLayout
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    96
          },
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    97
          data:{
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    98
              model:[
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
    99
                        {label:"Column A"},
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   100
                        {label:"Column B"},
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   101
                        {label:"Column C"},
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   102
                      ],
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   103
              strata:[
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   104
                      [
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   105
                        {initValue: 100, label: "Strata 1 col A"}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   106
                      ],[
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   107
                        {initValue: 20, label: "Strata 1 col B"}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   108
                      ],[
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   109
                        {initValue: 175, label: "Strata 2 col C"}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   110
                      ]      
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   111
                      ],
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   112
              token:[
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   113
                       {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   114
                         timestamp:1,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   115
                         category:1,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   116
                         value: 1,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   117
                         userdata:{},
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   118
                         callback:{}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   119
                       }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   120
                      ],
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   121
              tokenPast:0,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   122
          		stream:{
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   123
                      provider:'generator',
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   124
          				    refresh:10000/8,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   125
                      now:0
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   126
      					},
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   127
          		}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   128
          ,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   129
          sedimentation:{
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   130
              token:{size:{original:4
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   131
                          ,minimum:2}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   132
                          ,visible:true},   // fill color, shape,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   133
              incoming:{
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   134
                        strategy:1,         // 1 = one element by one, more = by Groupe  
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   135
                        point:[{x:50,y:0},
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   136
                              {x:100,y:0},
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   137
                              {x:150,y:0}],
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   138
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   139
                        target:[{x:50,y:0},
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   140
                              {x:100,y:0},
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   141
                              {x:150,y:0}]
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   142
                        },
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   143
              granulate:{visible:false},
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   144
              flocculate:{
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   145
            			 number:1,	       // 1 = one element by one, more = by groupe of n
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   146
            			 action:"buffer",       	// [buffer,continue]
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   147
            			 strategy:"Size",       	// [BufferSize, Time, AcummulationAreaHeight, Fps, Manual]
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   148
                   bufferSize:5,         	  // number of token to make floculation
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   149
            			 bufferTime:1000,      	  // time buffer to make flocullation
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   150
            			 bufferHeight:50,       	// height (pixel) to make floculation
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   151
            			 bufferFrameRate:25,    	// if the computer is to slow floculate
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   152
                   buffer:[]
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   153
    					},
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   154
              suspension:{
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   155
                          height:null,      // pourcent,adaptative
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   156
                          incomming:'top',
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   157
                          decay:{power:1.001}, // null
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   158
                          refresh:200
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   159
                         },
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   160
              accumulation:{height:null},   // pourcent ,adaptative
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   161
              aggregation:{height:0, maxData:0, invertStrata:false},       // pourcent ,adaptative
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   162
          },
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   163
          options:{
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   164
                  refresh:1000/25,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   165
                  panel:false,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   166
                  scale:30,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   167
                  layout:false,
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   168
                  canvasFirst:true
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   169
                  }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   170
          }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   171
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   172
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   173
    this.now = function(){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   174
      return(new Date().getTime())
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   175
    }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   176
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   177
     // get Box2d World 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   178
     this.globalDecay = function (value){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   179
      if(typeof(value)=='undefined'){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   180
        return this.settings.sedimentation.suspension.decay.power
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   181
      }else{
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   182
        return this.settings.sedimentation.suspension.decay.power=value
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   183
      }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   184
     }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   185
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   186
     // get Box2d World 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   187
     this.getWorld = function (){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   188
      return this.world;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   189
     }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   190
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   191
     this.chartUpdate = function (cat,y){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   192
      var options = {cat:cat,y:y}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   193
      this.chart[this.settings.chart.type](self,'update',options)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   194
     }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   195
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   196
     // Todo  ...... 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   197
     this.flocculateTokens = function (number){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   198
      return this.flocculate.update(self,number)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   199
     }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   200
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   201
     // TODO DESTROY ALL TOKENS 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   202
    this.flocculateAll = function(){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   203
        return this.flocculate.all(self)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   204
     }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   205
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   206
     // Add token function 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   207
     this.addToken = function (element){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   208
      //var token = this.token.addToken(self,element)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   209
      return this.token.addToken(self,element);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   210
     }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   211
     
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   212
     // Select token fonction
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   213
     this.selectAll = function (key,value){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   214
      return this.token.selectAll(self,key,value);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   215
     }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   216
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   217
     // Select token fonction
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   218
     this.select = function (key,value){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   219
      return this.token.select(self,key,value);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   220
     }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   221
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   222
     // update a categoryr in the chart
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   223
     this.updateAll = function (values){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   224
      var tokens = this.chart.updateAll(self,key,value)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   225
      return tokens;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   226
     }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   227
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   228
     // update a category in the chart
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   229
     this.update = function (key,value){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   230
      var tokens = this.chart.update(self,key,value)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   231
      return tokens;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   232
     }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   233
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   234
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   235
    /// Settings without 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   236
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   237
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   238
    //////////////////////////////////////////////////////// TO CLEAN
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   239
    // SAM @ROM1 : are you sure you need that ? extend doing it well normally
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   240
  	// Merge options with defaults
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   241
    // http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   242
    
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   243
    //console.log("////////")
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   244
    //options.model = modelToStrata(options.data.model)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   245
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   246
    function merge_options(obj1,obj2){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   247
        var obj3 = {};
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   248
        for (var attrname in obj1) { obj3[attrname] = obj1[attrname]; }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   249
        for (var attrname in obj2) { obj3[attrname] = obj2[attrname]; }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   250
        return obj3;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   251
    }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   252
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   253
     merge_options(defaultSettings, options);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   254
     if(options.data!=undefined)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   255
     defaultSettings.data = options.data;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   256
     
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   257
     ////////////////////////////////////////////////////////////////////////////////////
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   258
     // Merge option and add the DOMelement to setting
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   259
     //this.settings = $.extend(defaultSettings, options || {});
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   260
     this.settings = $.extend(true,defaultSettings, options);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   261
     this.settings.DOMelement = element
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   262
     //console.log('settings after extend',this.settings)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   263
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   264
     // -----------------------------------------------
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   265
     // SIMPLE DEFAULT SETTING FOR RETRO COMPATIBILITY 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   266
     //
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   267
     if(typeof(this.settings.chart.width) =="undefined"){this.settings.chart.width = this.settings.width}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   268
     if(typeof(this.settings.chart.x)     =="undefined")this.settings.chart.x=0
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   269
     if(typeof(this.settings.chart.y)     =="undefined")this.settings.chart.y=0
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   270
     if(typeof(this.settings.chart.height)=="undefined")this.settings.chart.height=this.settings.height
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   271
     if(typeof(this.settings.stream)      =="undefined"){this.settings.stream={}}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   272
     if(typeof(this.settings.stream.now)  =="undefined"){this.settings.stream.now=0}     
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   273
     if(typeof(this.settings.stream.provider)=="undefined"){this.settings.stream.provider='generator'}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   274
     if(typeof(this.settings.stream.refresh)=="undefined"){this.settings.stream.refresh=1000}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   275
     if(typeof(this.settings.data.tokenPast)=="undefined"){this.settings.data.tokenPast=0}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   276
     if(typeof(this.settings.data.tokens)=="undefined"){this.settings.data.tokens=[]}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   277
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   278
     // FOR ROM1 setting by default aggregation : 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   279
     if(typeof(this.settings.data.strata) !="undefined" && this.settings.data.strata.length!=0){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   280
       if(typeof(this.settings.sedimentation.aggregation) =="undefined"){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   281
          this.settings.sedimentation.aggregation = {}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   282
        }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   283
       if(typeof(this.settings.sedimentation.aggregation.height) =="undefined"){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   284
          this.settings.sedimentation.aggregation.height = this.settings.chart.height/2
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   285
       }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   286
      if(typeof(this.settings.sedimentation.aggregation.maxData) =="undefined"){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   287
          this.settings.sedimentation.aggregation.maxData = 10
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   288
       }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   289
     }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   290
     // END
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   291
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   292
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   293
     // Initialisation - Private method 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   294
     this.init = function(){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   295
       // requestAnim shim layer by Paul Irish
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   296
       // not use yet, to add
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   297
       this.requestAnimFrame = (function(){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   298
         return  window.requestAnimationFrame       || 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   299
                 window.webkitRequestAnimationFrame || 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   300
                 window.mozRequestAnimationFrame    || 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   301
                 window.oRequestAnimationFrame      || 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   302
                 window.msRequestAnimationFrame     || 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   303
                 function(/* function */ callback, /* DOMElement */ element){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   304
                   window.setTimeout(callback, 1000 / 60);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   305
                 };
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   306
       })();
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   307
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   308
        //console.log(this.settings)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   309
        //console.log('Initialisation');
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   310
        
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   311
        // Create the physical simulation 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   312
   		   this.world = new this.phy.b2World(
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   313
   		      new this.phy.b2Vec2(0, 0)       //gravity
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   314
   		     ,  true                 //allow sleep
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   315
   		   );
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   316
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   317
   	    // Create container and canvas for physical simulation drawing 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   318
		    var container = element.appendChild(document.createElement("div"));
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   319
		    container.id  = "box_sediviz_"+GUID()
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   320
        container.width  = this.settings.width; // TOFIX
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   321
        container.height = this.settings.height;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   322
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   323
        //console.log(container.id)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   324
        // Allocate the new Element 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   325
        this.settings.DOMelement = container
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   326
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   327
		    canvas 		    = container.appendChild(document.createElement("canvas"));
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   328
		    canvas.id 	  = "canvas";
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   329
		    canvas.width  = this.settings.width; // TOFIX
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   330
		    canvas.height = this.settings.height;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   331
        canvas.style.position = "absolute"
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   332
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   333
        //console.log(this.settings.width,this.settings.height)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   334
        this.ctx = canvas.getContext("2d");  
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   335
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   336
       // Construct the Chart
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   337
       this.chart[this.settings.chart.type](self,'init')
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   338
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   339
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   340
       // Draw d3
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   341
       //if(typeof(this.settings.options.debugaggregate)=="undefined"){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   342
       // this.aggregate.init(self);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   343
       //}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   344
       // Initiatlise stream 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   345
       this.stream.init(self)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   346
       // Initiatlise decay
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   347
       this.flocculate.init(self)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   348
       // Update stream 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   349
       this.stream.update(self);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   350
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   351
       // Initiatlise tokens 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   352
       this.token.init(self)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   353
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   354
       //FORCE UPDATE CHART due to  (bug positionnement ) @rom1
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   355
      this.strata.init(this)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   356
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   357
   		 // Update the physical simulation 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   358
  		 window.setInterval(
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   359
              function(){self.update(self);},
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   360
               self.settings.options.refresh/2
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   361
              );
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   362
       // Refresh canvas drawings 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   363
       window.setInterval(
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   364
              function(){self.draw.update(self);},
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   365
              self.settings.options.refresh
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   366
              );
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   367
       // Update Decay 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   368
       window.setInterval(
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   369
              function(){self.decay.update(self);},
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   370
              self.settings.sedimentation.suspension.refresh
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   371
       );
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   372
       //this.decay.update(self);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   373
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   374
      self.strata.update(self)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   375
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   376
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   377
 // MOUSE PART 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   378
 // inspired by box2d stuffs, have to clean and finish this ! 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   379
 // http://www.emanueleferonato.com/2008/11/20/dragging-objects-with-box2d-flash/
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   380
 // --------------------------
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   381
   this.getBodyAtMouse=function (_this) {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   382
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   383
      var x         = _this.mouse.x/_this.settings.options.scale
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   384
      var y         =_this.mouse.y/_this.settings.options.scale
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   385
      var mousePVec = new _this.phy.b2Vec2(x,y);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   386
      var aabb      = new _this.phy.b2AABB();
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   387
      var area      = 0.001
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   388
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   389
      //console.log(_this.mouse.x,_this.mouse.y)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   390
      aabb.lowerBound.Set(x - area, y - area);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   391
      aabb.upperBound.Set(x + area, y + area);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   392
      
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   393
      // Query the world for overlapping shapes.
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   394
      _this.mouse.selectedToken = null;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   395
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   396
      // MERCI JULIEN POUR LE CLOSURE 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   397
      //selectedBody
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   398
      _this.world.QueryAABB(function(fixture){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   399
        return getBodyCB(fixture,_this,mousePVec)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   400
      }, aabb);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   401
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   402
      return _this.mouse.selectedToken;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   403
   }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   404
   //http://stackoverflow.com/questions/11674200/how-to-send-prototype-method-as-a-callback-in-javascript
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   405
   // pb here 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   406
   function getBodyCB(fixture,_this,mousePVec) {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   407
       //console.log("phy",phy)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   408
      //console.log("fixture",fixture.m_userData.type,fixture)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   409
      //_this.mouse.elementpoi = fixture.GetBody()
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   410
      _this.mouse.selectedToken = fixture;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   411
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   412
      if(fixture.GetBody().GetType() != _this.phy.b2Body.b2_staticBody) {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   413
         if(fixture.GetShape().TestPoint(fixture.GetBody().GetTransform(), mousePVec)) {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   414
            _this.mouse.selectedToken = fixture;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   415
            return false;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   416
         }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   417
      }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   418
      return true;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   419
   }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   420
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   421
    this.handleMouseMove = function(e,_this) {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   422
       canvasPosition   = DOMabsOffset(_this.settings.DOMelement)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   423
       _this.mouse.x = (e.clientX - (canvasPosition.offsetLeft- this.getScrollPosition()[0]));
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   424
       _this.mouse.y = (e.clientY - (canvasPosition.offsetTop- this.getScrollPosition()[1]));
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   425
      //if( _this.mouse.isMouseDown){  console.log(_this.mouse.y,canvasPosition.y)}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   426
      //console.log("mouse",e.clientX,e.clientY )
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   427
      //console.log("mouse",canvasPosition.x,canvasPosition.y )
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   428
      //console.log("=",_this.mouse.x,_this.mouse.y)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   429
   };
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   430
   // from 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   431
   this.getScrollPosition= function(){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   432
    return Array((document.documentElement && document.documentElement.scrollLeft) || window.pageXOffset || self.pageXOffset || document.body.scrollLeft,(document.documentElement && document.documentElement.scrollTop) || window.pageYOffset || self.pageYOffset || document.body.scrollTop);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   433
    }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   434
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   435
   document.addEventListener("mousemove",   function (e){onDocumentMouseMove(e,self)});
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   436
   document.addEventListener("mouseup",   function (e){onDocumentMouseUp(e,self)});
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   437
   document.addEventListener("mousedown", function (e){onDocumentMouseDown(e,self)});
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   438
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   439
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   440
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   441
   function onDocumentMouseOver(e,_this) {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   442
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   443
     var s = _this.getBodyAtMouse(_this);   
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   444
        if(s!=null){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   445
          if(typeof(s.m_userData)!="undefined"){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   446
           if(typeof(s.m_userData.callback)!="undefined"){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   447
            if(typeof(s.m_userData.callback.mouseover)=="function"){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   448
                var t = _this.select('ID',s.m_userData.ID)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   449
                s.m_userData.callback.mouseover(t)                
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   450
            }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   451
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   452
            if(typeof(s.m_userData.callback.mouseout)=="function"){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   453
                //console.log("mouseout exist")
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   454
                var t = _this.select('ID',s.m_userData.ID)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   455
                var mouseoutTrigger 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   456
                var rollOut = function(){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   457
                      var mt  = mouseoutTrigger
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   458
                      var tt  = t
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   459
                      var ici = _this
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   460
                      var ss  = s
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   461
                      return function(){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   462
                           var s = ici.getBodyAtMouse(ici);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   463
                           var mo = false;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   464
                           if(s!=null){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   465
                              if(typeof(s.m_userData)!="undefined"){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   466
                                  if(s.m_userData.ID==tt.attr('ID')){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   467
                                      mo=false
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   468
                                  }else{
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   469
                                    mo=true
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   470
                                  }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   471
                              }else{
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   472
                                mo=true
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   473
                              }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   474
                           }else{
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   475
                            mo=true;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   476
                           }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   477
                           if(mo){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   478
                            ss.m_userData.callback.mouseout(tt)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   479
                            clearInterval(mouseoutTrigger)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   480
                           }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   481
                      }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   482
                };
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   483
                mouseoutTrigger = window.setInterval(rollOut(),100)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   484
            }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   485
           }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   486
          }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   487
        }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   488
   }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   489
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   490
   function onDocumentMouseDown(e,_this) {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   491
     //console.log("onDocumentMouseDown")
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   492
     _this.mouse.isMouseDown = true;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   493
     // return false;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   494
     _this.handleMouseMove(e,_this);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   495
     var s = _this.getBodyAtMouse(_this);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   496
    if(s!=null){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   497
      if(typeof(s.m_userData)!="undefined"){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   498
        if(typeof(s.m_userData.callback)!="undefined"){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   499
          if(typeof(s.m_userData.callback.onclick)=="function"){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   500
               var t = _this.select('ID',s.m_userData.ID)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   501
              s.m_userData.callback.onclick(t)  
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   502
         }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   503
        }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   504
      }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   505
     }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   506
   }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   507
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   508
      function onDocumentMouseUp(e,_this) {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   509
        _this.mouse.isMouseDown = false;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   510
       // isMouseDown = false;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   511
       // return false;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   512
       //console.log("onDocumentMouseUp")
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   513
      }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   514
      function onDocumentMouseMove( e,_this ) {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   515
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   516
       if(_this.mouse.isMouseDown){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   517
           _this.mouse.isMouseDragging = true;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   518
           _this.mouse.x = e.clientX;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   519
           _this.mouse.y = e.clientY;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   520
      
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   521
      }else{
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   522
          _this.handleMouseMove(e,_this);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   523
          onDocumentMouseOver("move",_this)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   524
      }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   525
      //console.log("m",_this)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   526
      }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   527
  }       
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   528
    
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   529
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   530
  this.mouse.update = function (s) {   
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   531
      if(isMouseDown && (!mouseJoint)) {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   532
         var body = getBodyAtMouse();
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   533
         if(body) {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   534
            var md = new b2MouseJointDef();
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   535
            md.bodyA = world.GetGroundBody();
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   536
            md.bodyB = body;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   537
            md.target.Set(mouseX, mouseY);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   538
            md.collideConnected = true;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   539
            md.maxForce = 300.0 * body.GetMass();
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   540
            mouseJoint = world.CreateJoint(md);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   541
            body.SetAwake(true);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   542
         }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   543
      }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   544
      
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   545
      if(mouseJoint) {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   546
         if(isMouseDown) {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   547
            mouseJoint.SetTarget(new b2Vec2(mouseX, mouseY));
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   548
         } else {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   549
            world.DestroyJoint(mouseJoint);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   550
            mouseJoint = null;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   551
         }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   552
      }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   553
   
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   554
   };
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   555
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   556
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   557
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   558
 // MOUSE END 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   559
 // --------------------------
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   560
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   561
    this.update = function (s) {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   562
     	this.world.Step(1 / 60, 10, 10);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   563
     	this.world.DrawDebugData();
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   564
     	this.world.ClearForces();
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   565
      //console.log('u')
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   566
     }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   567
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   568
    var drawInit = function(){ 		  
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   569
      ctx.fillStyle = "rgb(200,0,0)";  
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   570
 		  this.ctx.font = "14pt Calibri,Geneva,Arial";
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   571
      this.ctx.fillText("Canvas ready for Visual Sedimentation ", 10, 20);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   572
		  window.setInterval(
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   573
			   $.fn.vs.draw.refresh(ctx,world,this.settings)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   574
			   , this.settings.options.refresh);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   575
		 console.log("draw Init ")
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   576
     }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   577
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   578
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   579
     var DOMabsOffset = function(target){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   580
        var top = target.offsetTop;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   581
        var left = target.offsetLeft;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   582
         
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   583
        while(target = target.offsetParent) {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   584
          top += target.offsetTop;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   585
          left += target.offsetLeft;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   586
        }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   587
         
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   588
        return {offsetLeft:left, offsetTop:top};
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   589
      };
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   590
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   591
    // GUID generator from : 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   592
    // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   593
    var GUID = function(){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   594
        var S4 = function ()
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   595
        {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   596
            return Math.floor(
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   597
                    Math.random() * 0x10000 /* 65536 */
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   598
                ).toString(16);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   599
        };
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   600
    
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   601
        return (
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   602
                S4() + S4() + "-" +
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   603
                S4() + "-" +
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   604
                S4() + "-" +
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   605
                S4() + "-" +
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   606
                S4() + S4() + S4()
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   607
            );
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   608
    }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   609
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   610
    // clone object 
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   611
    // http://stackoverflow.com/questions/728360/copying-an-object-in-javascript
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   612
    function clone(obj) {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   613
      if (null == obj || "object" != typeof obj) return obj;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   614
      var copy = obj.constructor();
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   615
      for (var attr in obj) {
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   616
          if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   617
      }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   618
      return copy;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   619
    }
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   620
    this.utile       = {}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   621
    this.utile.GUID  = GUID
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   622
    this.utile.clone = clone
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   623
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   624
    this.settings = $.extend(this.settings, {} || {});
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   625
    //console.log("ici",this.settings)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   626
    this.init();
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   627
     
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   628
 };
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   629
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   630
$.fn.vs  = function(options){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   631
  if (!arguments.length){var options={}}
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   632
  //console.log('$.fn.vs settings',options)
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   633
     return this.each(function(){
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   634
         var element = $(this);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   635
         // Return early if this element already has a plugin instance
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   636
         if (element.data('VisualSedimentation')) return;
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   637
         var visualSedimentation = new VisualSedimentation(this,options);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   638
         // Store plugin object in this element's data
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   639
         element.data('visualSedimentation', visualSedimentation);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   640
         //visualSedimentation.test();
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   641
     });
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   642
 };
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   643
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   644
})(jQuery);
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   645
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   646
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   647
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   648
84719280c84d import VS lib
Anthony Ly <anthonyly.com@gmail.com>
parents:
diff changeset
   649