@@ -63,6 +63,7 @@ export default Ember.Component.extend({

var initialTime = self.get('dataObject').get('toolPoints').objectAt(0).get('time');
var length = self.get('dataObject').get('toolPoints').get('length');

var time;
var distance;
var x;
@@ -78,31 +79,34 @@ export default Ember.Component.extend({
var myxIn = [];
var myyIn = [];
var myzIn = [];
var myxIn2 = [];
var myyIn2 = [];
var myzIn2 = [];
var target = {x: 0, y:0, z:0};
var target2 = {x: 0, y:0, z:0};
var noseToTarget = {x: 0, y:0, z:0};
console.log("Target Position in Unity");
console.log(self.get('dataObject').get('target').get('position')[0]+", "+self.get('dataObject').get('target').get('position')[1]+", "+self.get('dataObject').get('target').get('position')[2]);
console.log("refCube Position in Unity");
console.log(self.get('dataObject').get('refCube').get('position')[0]+", "+self.get('dataObject').get('refCube').get('position')[1]+", "+self.get('dataObject').get('refCube').get('position')[2]);
//console.log("Target Position in Unity");
//console.log(self.get('dataObject').get('target').get('position')[0]+", "+self.get('dataObject').get('target').get('position')[1]+", "+self.get('dataObject').get('target').get('position')[2]);
//console.log("refCube Position in Unity");
//console.log(self.get('dataObject').get('refCube').get('position')[0]+", "+self.get('dataObject').get('refCube').get('position')[1]+", "+self.get('dataObject').get('refCube').get('position')[2]);

noseToTarget.x = self.get('dataObject').get('target').get('position')[0]-self.get('dataObject').get('refCube').get('position')[0];
noseToTarget.y = self.get('dataObject').get('target').get('position')[1]-self.get('dataObject').get('refCube').get('position')[1];
noseToTarget.z = self.get('dataObject').get('target').get('position')[2]-self.get('dataObject').get('refCube').get('position')[2];
noseToTarget.x = noseToTarget.x * self.get('scaleFactor');
noseToTarget.y = noseToTarget.y * self.get('scaleFactor');
noseToTarget.z = noseToTarget.z * self.get('scaleFactor');
console.log("nose to Target");
console.log(noseToTarget);
//console.log("nose to Target");
//console.log(noseToTarget);

target.x = self.get('nose').x + noseToTarget.x;
target.y = self.get('nose').y+ noseToTarget.y;
target.z = self.get('nose').z+ noseToTarget.z;
target2.x = self.get('nose').x + noseToTarget.x;
target2.x = self.get('nose').x - noseToTarget.x;
target2.y = self.get('nose').y- noseToTarget.z;
target2.z = self.get('nose').z+ noseToTarget.y;
console.log("Target in Graph");
console.log(target);
//console.log("Target in Graph");
//console.log(target);

for (var i =0; i<length; i++)//plotly loop
{
@@ -114,7 +118,10 @@ export default Ember.Component.extend({
myz.push(target.z + y*self.get('scaleFactor'));*/
if (true)//self.get('dataObject').get('toolPoints').objectAt(i).get('inSkull'))
{
var tempx = x*self.get('scaleFactor') + target.x;
var tempx = target2.x - x*self.get('scaleFactor');
var tempy= target2.y - z*self.get('scaleFactor');
var tempz= target2.z+y*self.get('scaleFactor');
/*var tempx = x*self.get('scaleFactor') + target.x;
var tempy = y*self.get('scaleFactor') + target.y;
var tempz = z*self.get('scaleFactor') + target.z;//get points relative to the shitty target
@@ -128,9 +135,24 @@ export default Ember.Component.extend({
tempx = -(tempx-target2.x)+ target2.x;//flip x around good target
tempy = -(tempy-target2.y)+ target2.y;//same for y
myxIn.push(tempx);
myyIn.push(tempy);
myzIn.push(tempz);
*/
if (i<20)
{
myx.push(tempx);
myy.push(tempy);
myz.push(tempz);
}
else if (i<40)
{
myxIn2.push(tempx);
myyIn2.push(tempy);
myzIn2.push(tempz);
}
else {
myxIn.push(tempx);
myyIn.push(tempy);
myzIn.push(tempz);
}
}
else {
var tempx = x*self.get('scaleFactor') + target.x;
@@ -175,21 +197,6 @@ export default Ember.Component.extend({
break;
}
}
console.log('jere');
console.log(self.get('dataObject').get('toolPoints').objectAt(lastTimeInSkull).get('position'));
x = self.get('dataObject').get('toolPoints').objectAt(lastTimeInSkull).get('position')[0];
y = self.get('dataObject').get('toolPoints').objectAt(lastTimeInSkull).get('position')[1];
z = self.get('dataObject').get('toolPoints').objectAt(lastTimeInSkull).get('position')[2];
var x2 = self.get('dataObject').get('truePath')[0];
var y2 = self.get('dataObject').get('truePath')[1];
var z2 = self.get('dataObject').get('truePath')[2];
var angle = Math.acos((Math.abs(x*x2 + y*y2 + z*z2)/(Math.sqrt(x*x + y*y + z*z)* Math.sqrt(x2*x2 + y2*y2 + z2*z2) ) ) );
console.log(x*x2 +"+"+ y*y2 +"+"+ z*z2);
console.log(Math.sqrt(x*x + y*y + z*z));
console.log(Math.sqrt(x2*x2 + y2*y2 + z2*z2));
console.log(Math.abs(x*x2 + y*y2 + z*z2)/(Math.sqrt(x*x + y*y + z*z)* Math.sqrt(x2*x2 + y2*y2 + z2*z2)));
console.log(angle);
self.set('myAngle', angle*(180/Math.PI));

self.set('numberData1', {

@@ -202,14 +209,22 @@ export default Ember.Component.extend({
]

});
var incisionx = self.get('dataObject').get('toolPoints').objectAt(lastTimeInSkull+1).get('position')[0];
var incisiony = self.get('dataObject').get('toolPoints').objectAt(lastTimeInSkull+1).get('position')[1];
var incisionz = self.get('dataObject').get('toolPoints').objectAt(lastTimeInSkull+1).get('position')[2];
var count =0;
self.set('timeInSkull', 0);
var incisionx;
var incisiony;
var incisionz;
if (lastTimeInSkull == length-1)
{
incisionx = 0;
incisiony = 0;
incisionz = 0;
}
else{
incisionx = self.get('dataObject').get('toolPoints').objectAt(lastTimeInSkull+1).get('position')[0];
incisiony = self.get('dataObject').get('toolPoints').objectAt(lastTimeInSkull+1).get('position')[1];
incisionz = self.get('dataObject').get('toolPoints').objectAt(lastTimeInSkull+1).get('position')[2];
}
for (var i =0; i<=lastTimeInSkull; i++)//IP loop phase 1, distance
{

x = self.get('dataObject').get('toolPoints').objectAt(i).get('position')[0];
y = self.get('dataObject').get('toolPoints').objectAt(i).get('position')[1];
z = self.get('dataObject').get('toolPoints').objectAt(i).get('position')[2];
@@ -223,13 +238,10 @@ export default Ember.Component.extend({
self.get('myData').push({ x: time, y:distance});

if (self.get('dataObject').get('toolPoints').objectAt(i).get('inSkull')){
count++;

}

}
self.set('timeInSkull', count/10);
//console.log(self.get('timeInSkull'));
self.set('numberData', {

datasets: [
@@ -275,10 +287,10 @@ export default Ember.Component.extend({
width: .5
},
opacity: 1},
name: 'Ventricles',
name: 'Ventricles',
type: 'scatter3d'};
var trace2 = {
x:[target.x, 29.177, target2.x], y: [target.y, 4.454, target2.y], z: [target.z, 3.792, target2.z],
x:[target.x, 29.177, target2.x, self.get('nose').x], y: [target.y, 4.454, target2.y, self.get('nose').y], z: [target.z, 3.792, target2.z, self.get('nose').z],
mode: 'markers',
marker: {
color: 'rgba(0, 255, 0)',
@@ -290,6 +302,7 @@ export default Ember.Component.extend({
width: .5
},
opacity: 1},
name: 'Target',
type: 'scatter3d'};
var trace3 = {
x:myx, y: myy, z: myz,
@@ -304,7 +317,9 @@ export default Ember.Component.extend({
width: .5
},
opacity: 1},
type: 'scatter3d'
name: 'In Skull',
type: 'scatter3d',

};
var trace4 = {
x:myxIn, y: myyIn, z: myzIn,
@@ -319,10 +334,26 @@ export default Ember.Component.extend({
width: .5
},
opacity: 1},
name: 'Tracked Path',
name: 'Tracked Path',
type: 'scatter3d'};
var trace5 = {
x:myxIn2, y: myyIn2, z: myzIn2,
mode: 'markers',
marker: {
color: 'rgba(0, 255, 255)',
size: 10,
symbol: 'circle',
line: {
color: 'rgb(0, 0, 0)',
opacity: 0.1,
width: .5
},
opacity: 1},
name: 'Tracked Path2',
type: 'scatter3d'
};

var data = [trace0, trace1, trace4];
var data = [trace0, trace1, trace2, trace3, trace4, trace5];
var layout = {
hovermode: true,

@@ -470,19 +501,6 @@ export default Ember.Component.extend({
}]
}
});

/*this.set('numberData', {
datasets: [
{
data: [{ x:10, y:20},
{ x:9, y:25},
{ x:2, y:18},
{ x:17, y:12}]
}
]
});*/





@@ -504,416 +522,428 @@ export default Ember.Component.extend({
this.set('isPerfData', false);
this.set('isThreeData', true);
var self = this;
this.set('myData', []);
this.set('myData1', []);
this.set('myData2', []);

this.get('store').findRecord('simulation', this.get('dataID')).then(function (simulation) {

self.set('dataObject', simulation);
/*console.log("Date");
console.log(self.get('dataObject').get('date'));
console.log("user");
console.log(self.get('dataObject').get('user'));
console.log("truePath");
console.log(self.get('dataObject').get('truePath'));
console.log("timeOut");
console.log(self.get('dataObject').get('timeOut'));
console.log("debugged");
console.log(self.get('dataObject').get('debugged'));
console.log("target.pos");
console.log(self.get('dataObject').get('target').get('position'));
console.log("toolpoints1.posx");
console.log(self.get('dataObject').get('toolPoints').objectAt(0).get('position')[0]);*/

var initialTime = self.get('dataObject').get('toolPoints').objectAt(0).get('time');
var length = self.get('dataObject').get('toolPoints').get('length');
var time;
var distance;
var x;
var y;
var z;
var max =0;
var myduration = self.get('dataObject').get('toolPoints').objectAt(length-1).get('time') - initialTime;
self.set('duration', myduration);
var endTime = myduration - myduration%1;
var myx = [];
var myy = [];
var myz = [];
var myxIn = [];
var myyIn = [];
var myzIn = [];
var target = {x: 0, y:0, z:0};
var target2 = {x: 0, y:0, z:0};
var noseToTarget = {x: 0, y:0, z:0};
console.log("Target Position in Unity");
console.log(self.get('dataObject').get('target').get('position')[0]+", "+self.get('dataObject').get('target').get('position')[1]+", "+self.get('dataObject').get('target').get('position')[2]);
console.log("refCube Position in Unity");
console.log(self.get('dataObject').get('refCube').get('position')[0]+", "+self.get('dataObject').get('refCube').get('position')[1]+", "+self.get('dataObject').get('refCube').get('position')[2]);

noseToTarget.x = self.get('dataObject').get('target').get('position')[0]-self.get('dataObject').get('refCube').get('position')[0];
noseToTarget.y = self.get('dataObject').get('target').get('position')[1]-self.get('dataObject').get('refCube').get('position')[1];
noseToTarget.z = self.get('dataObject').get('target').get('position')[2]-self.get('dataObject').get('refCube').get('position')[2];
noseToTarget.x = noseToTarget.x * self.get('scaleFactor');
noseToTarget.y = noseToTarget.y * self.get('scaleFactor');
noseToTarget.z = noseToTarget.z * self.get('scaleFactor');
console.log("nose to Target");
console.log(noseToTarget);
this.set('myData', []);
this.set('myData1', []);
this.set('myData2', []);

target.x = self.get('nose').x + noseToTarget.x;
target.y = self.get('nose').y+ noseToTarget.y;
target.z = self.get('nose').z+ noseToTarget.z;
target2.x = self.get('nose').x + noseToTarget.x;
target2.y = self.get('nose').y- noseToTarget.z;
target2.z = self.get('nose').z+ noseToTarget.y;
console.log("Target in Graph");
console.log(target);

for (var i =0; i<length; i++)//plotly loop
{
x = self.get('dataObject').get('toolPoints').objectAt(i).get('position')[0];
y = self.get('dataObject').get('toolPoints').objectAt(i).get('position')[1];
z = self.get('dataObject').get('toolPoints').objectAt(i).get('position')[2];
/*myx.push(target.x + x*self.get('scaleFactor'));
myy.push(target.y + z*self.get('scaleFactor'));
myz.push(target.z + y*self.get('scaleFactor'));*/
if (true)//self.get('dataObject').get('toolPoints').objectAt(i).get('inSkull'))
this.get('store').findRecord('simulation', this.get('dataID')).then(function (simulation) {

self.set('dataObject', simulation);
/*console.log("Date");
console.log(self.get('dataObject').get('date'));
console.log("user");
console.log(self.get('dataObject').get('user'));
console.log("truePath");
console.log(self.get('dataObject').get('truePath'));
console.log("timeOut");
console.log(self.get('dataObject').get('timeOut'));
console.log("debugged");
console.log(self.get('dataObject').get('debugged'));
console.log("target.pos");
console.log(self.get('dataObject').get('target').get('position'));
console.log("toolpoints1.posx");
console.log(self.get('dataObject').get('toolPoints').objectAt(0).get('position')[0]);*/

var initialTime = self.get('dataObject').get('toolPoints').objectAt(0).get('time');
var length = self.get('dataObject').get('toolPoints').get('length');
var time;
var distance;
var x;
var y;
var z;
var max =0;
var myduration = self.get('dataObject').get('toolPoints').objectAt(length-1).get('time') - initialTime;
self.set('duration', myduration);
var endTime = myduration - myduration%1;
var myx = [];
var myy = [];
var myz = [];
var myxIn = [];
var myyIn = [];
var myzIn = [];
var target = {x: 0, y:0, z:0};
var target2 = {x: 0, y:0, z:0};
var noseToTarget = {x: 0, y:0, z:0};
console.log("Target Position in Unity");
console.log(self.get('dataObject').get('target').get('position')[0]+", "+self.get('dataObject').get('target').get('position')[1]+", "+self.get('dataObject').get('target').get('position')[2]);
console.log("refCube Position in Unity");
console.log(self.get('dataObject').get('refCube').get('position')[0]+", "+self.get('dataObject').get('refCube').get('position')[1]+", "+self.get('dataObject').get('refCube').get('position')[2]);

noseToTarget.x = self.get('dataObject').get('target').get('position')[0]-self.get('dataObject').get('refCube').get('position')[0];
noseToTarget.y = self.get('dataObject').get('target').get('position')[1]-self.get('dataObject').get('refCube').get('position')[1];
noseToTarget.z = self.get('dataObject').get('target').get('position')[2]-self.get('dataObject').get('refCube').get('position')[2];
noseToTarget.x = noseToTarget.x * self.get('scaleFactor');
noseToTarget.y = noseToTarget.y * self.get('scaleFactor');
noseToTarget.z = noseToTarget.z * self.get('scaleFactor');
console.log("nose to Target");
console.log(noseToTarget);

target.x = self.get('nose').x + noseToTarget.x;
target.y = self.get('nose').y+ noseToTarget.y;
target.z = self.get('nose').z+ noseToTarget.z;
target2.x = self.get('nose').x + noseToTarget.x;
target2.y = self.get('nose').y- noseToTarget.z;
target2.z = self.get('nose').z+ noseToTarget.y;
console.log("Target in Graph");
console.log(target);

for (var i =0; i<length; i++)//plotly loop
{
var tempx = x*self.get('scaleFactor') + target.x;
var tempy = y*self.get('scaleFactor') + target.y;
var tempz = z*self.get('scaleFactor') + target.z;//get points relative to the shitty target
x = self.get('dataObject').get('toolPoints').objectAt(i).get('position')[0];
y = self.get('dataObject').get('toolPoints').objectAt(i).get('position')[1];
z = self.get('dataObject').get('toolPoints').objectAt(i).get('position')[2];
/*myx.push(target.x + x*self.get('scaleFactor'));
myy.push(target.y + z*self.get('scaleFactor'));
myz.push(target.z + y*self.get('scaleFactor'));*/
if (true)//self.get('dataObject').get('toolPoints').objectAt(i).get('inSkull'))
{
var tempx = x*self.get('scaleFactor') + target.x;
var tempy = y*self.get('scaleFactor') + target.y;
var tempz = z*self.get('scaleFactor') + target.z;//get points relative to the shitty target
/*
tempy= tempy- self.get('nose').y;//do same rotation that the target does
tempz = tempz - self.get('nose').z;
var temp = tempy;
tempy=-1*tempz;
tempz=temp;
tempy += self.get('nose').y;
tempz += self.get('nose').z;
tempx = -(tempx-target2.x)+ target2.x;//flip x around good target
tempy = -(tempy-target2.y)+ target2.y;//same for y
*/
if (i<15)
{
myx.push(tempx);
myy.push(tempy);
myz.push(tempz);
}
else {
myxIn.push(tempx);
myyIn.push(tempy);
myzIn.push(tempz);
}
}
else {
var tempx = x*self.get('scaleFactor') + target.x;
var tempy = y*self.get('scaleFactor') + target.y;
var tempz = z*self.get('scaleFactor') + target.z;

tempy= tempy- self.get('nose').y;
tempz = tempz - self.get('nose').z;
var temp = tempy;
tempy=-1*tempz;
tempz=temp;
tempy += self.get('nose').y;
tempz += self.get('nose').z;
tempx = -(tempx-target2.x)+ target2.x;
tempy = -(tempy-target2.y)+ target2.y;
myx.push(tempx);
myy.push(tempy);
myz.push(tempz);
}

tempy= tempy- self.get('nose').y;//do same rotation that the target does
tempz = tempz - self.get('nose').z;
var temp = tempy;
tempy=-1*tempz;
tempz=temp;
tempy += self.get('nose').y;
tempz += self.get('nose').z;

tempx = -(tempx-target2.x)+ target2.x;//flip x around good target
tempy = -(tempy-target2.y)+ target2.y;//same for y
myxIn.push(tempx);
myyIn.push(tempy);
myzIn.push(tempz);
}
else {
var tempx = x*self.get('scaleFactor') + target.x;
var tempy = y*self.get('scaleFactor') + target.y;
var tempz = z*self.get('scaleFactor') + target.z;

tempy= tempy- self.get('nose').y;
tempz = tempz - self.get('nose').z;
var temp = tempy;
tempy=-1*tempz;
tempz=temp;
tempy += self.get('nose').y;
tempz += self.get('nose').z;
tempx = -(tempx-target2.x)+ target2.x;
tempy = -(tempy-target2.y)+ target2.y;
myx.push(tempx);
myy.push(tempy);
myz.push(tempz);
var lastTimeInSkull = 0;
for (var i =length-1; i>0; i--)//IP loop phase 2, distance
{
if (self.get('dataObject').get('toolPoints').objectAt(i).get('inSkull')){
x = self.get('dataObject').get('toolPoints').objectAt(i).get('position')[0];
y = self.get('dataObject').get('toolPoints').objectAt(i).get('position')[1];
z = self.get('dataObject').get('toolPoints').objectAt(i).get('position')[2];
distance = Math.sqrt(x*x + y*y + z*z);
if (distance>max)
{
max = distance;
self.set('maxDistance', max);
}
time = self.get('dataObject').get('toolPoints').objectAt(i).get('time') - initialTime;
self.get('myData1').push({ x: time, y:distance});
}
else
{
lastTimeInSkull = i;
break;
}
}


}
var lastTimeInSkull = 0;
for (var i =length-1; i>0; i--)//IP loop phase 2, distance
{
if (self.get('dataObject').get('toolPoints').objectAt(i).get('inSkull')){
self.set('numberData1', {

datasets: [
{
backgroundColor: "rgba(0,0,128,.9)",

data: self.get('myData1')
}
]

});
var incisionx = self.get('dataObject').get('toolPoints').objectAt(lastTimeInSkull+1).get('position')[0];
var incisiony = self.get('dataObject').get('toolPoints').objectAt(lastTimeInSkull+1).get('position')[1];
var incisionz = self.get('dataObject').get('toolPoints').objectAt(lastTimeInSkull+1).get('position')[2];
for (var i =0; i<=lastTimeInSkull; i++)//IP loop phase 1, distance
{
x = self.get('dataObject').get('toolPoints').objectAt(i).get('position')[0];
y = self.get('dataObject').get('toolPoints').objectAt(i).get('position')[1];
z = self.get('dataObject').get('toolPoints').objectAt(i).get('position')[2];
distance = Math.sqrt(x*x + y*y + z*z);
distance = Math.sqrt((incisionx-x)*(incisionx-x) + (incisiony-y)*(incisiony-y) + (incisionz-z)*(incisionz-z));
if (distance>max)
{
max = distance;
self.set('maxDistance', max);
}
time = self.get('dataObject').get('toolPoints').objectAt(i).get('time') - initialTime;
self.get('myData1').push({ x: time, y:distance});
}
else
{
lastTimeInSkull = i;
break;
}
}

self.set('numberData1', {

datasets: [
{
backgroundColor: "rgba(0,0,128,.9)",

data: self.get('myData1')
}
]

});
var incisionx = self.get('dataObject').get('toolPoints').objectAt(lastTimeInSkull+1).get('position')[0];
var incisiony = self.get('dataObject').get('toolPoints').objectAt(lastTimeInSkull+1).get('position')[1];
var incisionz = self.get('dataObject').get('toolPoints').objectAt(lastTimeInSkull+1).get('position')[2];
for (var i =0; i<=lastTimeInSkull; i++)//IP loop phase 1, distance
{
x = self.get('dataObject').get('toolPoints').objectAt(i).get('position')[0];
y = self.get('dataObject').get('toolPoints').objectAt(i).get('position')[1];
z = self.get('dataObject').get('toolPoints').objectAt(i).get('position')[2];
distance = Math.sqrt((incisionx-x)*(incisionx-x) + (incisiony-y)*(incisiony-y) + (incisionz-z)*(incisionz-z));
if (distance>max)
{
max = distance;
self.set('maxDistance', max);
}
time = self.get('dataObject').get('toolPoints').objectAt(i).get('time') - initialTime;
self.get('myData').push({ x: time, y:distance});
self.get('myData').push({ x: time, y:distance});

if (self.get('dataObject').get('toolPoints').objectAt(i).get('inSkull')){
if (self.get('dataObject').get('toolPoints').objectAt(i).get('inSkull')){

}

}

}
self.set('numberData', {

datasets: [
{
backgroundColor: "rgba(0,0,128,.9)",

data: self.get('myData')
}
]

});
Plotly.d3.csv('http://localhost:3700/brain.csv', function(err, rows){
function unpack(rows, key) {
return rows.map(function(row)
{ return row[key]; });}
self.set('numberData', {

datasets: [
{
backgroundColor: "rgba(0,0,128,.9)",

data: self.get('myData')
}
]

});
Plotly.d3.csv('http://localhost:3700/brain.csv', function(err, rows){
function unpack(rows, key) {
return rows.map(function(row)
{ return row[key]; });}

var trace0 = {
x:unpack(rows, 'x1'), y: unpack(rows, 'y1'), z: unpack(rows, 'z1'),
mode: 'markers',
marker: {
color: 'rgba(0, 0, 255)',
size: 6,
line: {
color: 'rgba(0, 0, 0)',
width: 0.5
var trace0 = {
x:unpack(rows, 'x1'), y: unpack(rows, 'y1'), z: unpack(rows, 'z1'),
mode: 'markers',
marker: {
color: 'rgba(0, 0, 255)',
size: 6,
line: {
color: 'rgba(0, 0, 0)',
width: 0.5
},
opacity: .1
},
opacity: .1
},
name: 'Skull',
type: 'scatter3d'
};
name: 'Skull',
type: 'scatter3d'
};

var trace1 = {
x:unpack(rows, 'x2'), y: unpack(rows, 'y2'), z: unpack(rows, 'z2'),
mode: 'markers',
marker: {
color: 'rgba(0, 0, 0)',
size: 6,
symbol: 'circle',
line: {
color: 'rgb(255, 0, 0)',
opacity: 0.1,
width: .5
},
opacity: 1},
name: 'Ventricles',
type: 'scatter3d'};
var trace2 = {
x:[target.x, 29.177, target2.x], y: [target.y, 4.454, target2.y], z: [target.z, 3.792, target2.z],
mode: 'markers',
marker: {
color: 'rgba(0, 255, 0)',
size: 20,
symbol: 'circle',
line: {
color: 'rgb(0, 0, 0)',
opacity: 0.1,
width: .5
},
opacity: 1},
type: 'scatter3d'};
var trace3 = {
x:myx, y: myy, z: myz,
mode: 'markers',
marker: {
color: 'rgba(255, 255, 0)',
size: 10,
symbol: 'circle',
line: {
color: 'rgb(0, 0, 0)',
opacity: 0.1,
width: .5
},
opacity: 1},
type: 'scatter3d'
};
var trace4 = {
x:myxIn, y: myyIn, z: myzIn,
mode: 'markers',
marker: {
color: 'rgba(0, 255, 0)',
size: 10,
symbol: 'circle',
line: {
color: 'rgb(0, 0, 0)',
opacity: 0.1,
width: .5
},
opacity: 1},
name: 'Tracked Path',
type: 'scatter3d'};
var trace1 = {
x:unpack(rows, 'x2'), y: unpack(rows, 'y2'), z: unpack(rows, 'z2'),
mode: 'markers',
marker: {
color: 'rgba(0, 0, 0)',
size: 6,
symbol: 'circle',
line: {
color: 'rgb(255, 0, 0)',
opacity: 0.1,
width: .5
},
opacity: 1},
name: 'Ventricles',
type: 'scatter3d'};
var trace2 = {
x:[target.x, 29.177, target2.x], y: [target.y, 4.454, target2.y], z: [target.z, 3.792, target2.z],
mode: 'markers',
marker: {
color: 'rgba(0, 255, 0)',
size: 20,
symbol: 'circle',
line: {
color: 'rgb(0, 0, 0)',
opacity: 0.1,
width: .5
},
opacity: 1},
name: 'Target',
type: 'scatter3d'};
var trace3 = {
x:myx, y: myy, z: myz,
mode: 'markers',
marker: {
color: 'rgba(255, 255, 0)',
size: 10,
symbol: 'circle',
line: {
color: 'rgb(0, 0, 0)',
opacity: 0.1,
width: .5
},
opacity: 1},
name: 'In Skull',
type: 'scatter3d',

};
var trace4 = {
x:myxIn, y: myyIn, z: myzIn,
mode: 'markers',
marker: {
color: 'rgba(0, 255, 0)',
size: 10,
symbol: 'circle',
line: {
color: 'rgb(0, 0, 0)',
opacity: 0.1,
width: .5
},
opacity: 1},
name: 'Tracked Path',
type: 'scatter3d'};

var data = [trace0, trace1, trace4];
var layout = {
hovermode: true,
var data = [trace0, trace1, trace2, trace3, trace4];
var layout = {
hovermode: true,

scene : {
xaxis: {
autorange: true,
//showgrid: false,
//zeroline: false,
showline: false,
autotick: true,
ticks: '',
showticklabels: false,
title: "",
},
yaxis: {
autorange: true,
//showgrid: false,
//zeroline: false,
showline: false,
autotick: true,
ticks: '',
showticklabels: false,
title: "",
},
zaxis: {
autorange: true,
//showgrid: false,
//zeroline: false,
showline: false,
autotick: true,
ticks: '',
showticklabels: false,
title: "",
}
}
};

scene : {
xaxis: {
autorange: true,
//showgrid: false,
//zeroline: false,
showline: false,
autotick: true,
ticks: '',
showticklabels: false,
title: "",
},
yaxis: {
autorange: true,
//showgrid: false,
//zeroline: false,
showline: false,
autotick: true,
ticks: '',
showticklabels: false,
title: "",
},
zaxis: {
autorange: true,
//showgrid: false,
//zeroline: false,
showline: false,
autotick: true,
ticks: '',
showticklabels: false,
title: "",
//console.log(data);
Plotly.newPlot('tester', data, layout, {displaylogo: false, displayModeBar: false, markeredgewidth:0.0});
});
});
self.set('barOptions1', {
pointRadius: 2,
responsive: false,
elements: {
line: {
tension: 0, // disables bezier curves
}
}
};

//console.log(data);
Plotly.newPlot('tester', data, layout, {displaylogo: false, displayModeBar: false, markeredgewidth:0.0});
});
});
self.set('barOptions1', {
pointRadius: 2,
responsive: false,
elements: {
line: {
tension: 0, // disables bezier curves
}
},
title: {
display: true,
fontSize: 16,
fontStle:"bold",
fontColor:"#101",
text: 'Performance Phase 2 - Distance'
},
legend: {
display: false,
},
scales: {
yAxes: [{
},
title: {
display: true,
fontSize: 16,
fontStle:"bold",
fontColor:"#101",
text: 'Performance Phase 2 - Distance'
},
legend: {
display: false,
},
scales: {
yAxes: [{

gridLines: {
//display: false,
color: 'rgba(0, 0, 0, 0)',
zeroLineColor: 'rgba(0, 0, 0, 1)'
},
scaleLabel: {
display: true,
labelString: 'Distance to Target',

},
ticks: {
suggestedMin: 0,
//suggestedMax: this.get('maxDistance')+2,
}
}],
xAxes: [{
gridLines: {
//display: false,
color: 'rgba(0, 0, 0, 0)',
zeroLineColor: 'rgba(0, 0, 0, 1)'
},
scaleLabel: {
display: true,
labelString: 'Distance to Target',

labelString: 'Time(s)'
},
ticks: {
suggestedMin: 0,
//suggestedMax: this.get('maxDistance')+2,
//suggestedMax: this.get('duration') + 2,

}
}]
}
});
self.set('barOptions', {
pointRadius: 2,
responsive: false,
elements: {
line: {
tension: 0, // disables bezier curves
}
}],
xAxes: [{
gridLines: {
color: 'rgba(0, 0, 0, 0)',
zeroLineColor: 'rgba(0, 0, 0, 1)'
},
scaleLabel: {
title: {
display: true,
labelString: 'Time(s)'
fontSize: 16,
fontStle:"bold",
fontColor:"#101",
text: 'Performance Phase 1 - Distance'
},
ticks: {
suggestedMin: 0,
//suggestedMax: this.get('duration') + 2,

}
}]
}
});
self.set('barOptions', {
pointRadius: 2,
responsive: false,
elements: {
line: {
tension: 0, // disables bezier curves
}
},
title: {
display: true,
fontSize: 16,
fontStle:"bold",
fontColor:"#101",
text: 'Performance Phase 1 - Distance'
},
legend: {
display: false,
},
scales: {
yAxes: [{
legend: {
display: false,
},
scales: {
yAxes: [{

gridLines: {
//display: false,
color: 'rgba(0, 0, 0, 0)',
zeroLineColor: 'rgba(0, 0, 0, 1)'
},
scaleLabel: {
display: true,
labelString: 'Distance to Incision Point',

},
ticks: {
suggestedMin: 0,
//suggestedMax: this.get('maxDistance')+2,
}
}],
xAxes: [{
gridLines: {
//display: false,
color: 'rgba(0, 0, 0, 0)',
zeroLineColor: 'rgba(0, 0, 0, 1)'
},
scaleLabel: {
display: true,
labelString: 'Distance to Incision Point',

labelString: 'Time(s)'
},
ticks: {
suggestedMin: 0,
//suggestedMax: this.get('maxDistance')+2,
}
}],
xAxes: [{
gridLines: {
color: 'rgba(0, 0, 0, 0)',
zeroLineColor: 'rgba(0, 0, 0, 1)'
},
scaleLabel: {
display: true,
labelString: 'Time(s)'
},
ticks: {
suggestedMin: 0,
//suggestedMax: this.get('duration') + 2,

}
}]
}
});
//suggestedMax: this.get('duration') + 2,

}
}]
}
});
},

load(){