Object (Objekt)
Title set
Title set
Object Actor Natural Person
');
$('body').append('');
var ww = $('#object3d-viewer').width();
var hh = $('#object3d-viewer').height();
var widthW = new Array();
var heightH = new Array();
heightH[0] = hh;
widthW[0] = ww / 2;
var offX = 0;
var offY = 0;
$('#object3d-viewer').append("
");
if (filename.length > 1 && wholePano != 6) {
for (var ii = 0; ii < _filename.length; ii++) {
if (multi == false) {
var id = findIDfilename(_filename[ii]);
$('#object3d-viewer').append("
");
}
else {
widthW[ii] = ww / 2;
heightH[ii + 1] = hh / 2;
$('#object3d-viewer').append(
"
");
if (ii % 2 == 0) {
$("#object3d-viewer-canvas_" + ii).css("left", offX);
} else {
offX += widthW[ii];
$("#object3d-viewer-canvas_" + ii).css("left", offX);
}
if (ii % 3 == 0) {
$("#object3d-viewer-canvas_" + ii).css("top", offY);
} else {
$("#object3d-viewer-canvas_" + ii).css("top", offY);
offY += heightH[ii];
}
}
//left: "+widthW[ii]*ii+"; top: "+heightH[ii]*ii+";
}
} else {
$('#object3d-viewer').append("
");
multi = false;
}
$('#object3d-viewer').append("
Are you sure to delete this area?
");
$('#object3d-viewer').append("
");
$(function () {
$("#MTLedit").dialog({
autoOpen: false,
resizable: true,
width: "600",
height: 600,
modal: false,
position : {
my : "left center",
at : "right",
of : $("#object3d-viewer")
},
show : {
effect : 'fade',
duration : 500
},
hide : {
effect : 'fade',
duration : 500
},
beforeClose : function (event, ui) {
tinymce.get('modalTextarea').setContent("");
//$(this).find('textarea').val("");
},
buttons: {
/*"Refresh": function () {
$(".mtlName").html(filename[mainID]+".mtl");
var _str = '#MTL file generated by Daniel\'s module\n';
var lastName = '';
for (var ii = 0; ii < OBJmaterials.length; ii++) {
if (OBJmaterials[ii].key == "newmtl") {_str += "\n"; lastName = OBJmaterials[ii].value}
//else {_str += OBJmaterials[ii].key + " " + OBJmaterials[ii].value + "\n";}
switch (OBJmaterials[ii].key) {
case "ka":
var search = true;
for (var jj = 0; jj < sceneMaterials.length && search; jj++) {
if (sceneMaterials[jj].name == lastName) {
search = false;
if (sceneMaterials[jj].changed && typeof (sceneMaterials[jj].ka) !== 'undefined')
_str += "ka " + sceneMaterials[jj].ka.r.toFixed(6) + " " + sceneMaterials[jj].ka.g.toFixed(6) + " " + sceneMaterials[jj].ka.b.toFixed(6) + "\n";
else
_str += OBJmaterials[ii].key + " " + OBJmaterials[ii].value + "\n";
}
}
break;
case "kd":
var search = true;
for (var jj = 0; jj < sceneMaterials.length && search; jj++) {
if (sceneMaterials[jj].name == lastName) {
search = false;
if (sceneMaterials[jj].changed && typeof (sceneMaterials[jj].kd) !== 'undefined')
_str += "kd " + sceneMaterials[jj].kd.r.toFixed(6) + " " + sceneMaterials[jj].kd.g.toFixed(6) + " " + sceneMaterials[jj].kd.b.toFixed(6) + "\n";
else
_str += OBJmaterials[ii].key + " " + OBJmaterials[ii].value + "\n";
}
}
break;
case "ks":
var search = true;
for (var jj = 0; jj < sceneMaterials.length && search; jj++) {
if (sceneMaterials[jj].name == lastName) {
search = false;
if (sceneMaterials[jj].changed && typeof (sceneMaterials[jj].ks) !== 'undefined')
_str += "ks " + sceneMaterials[jj].ks.r.toFixed(6) + " " + sceneMaterials[jj].ks.g.toFixed(6) + " " + sceneMaterials[jj].ks.b.toFixed(6) + "\n";
else
_str += OBJmaterials[ii].key + " " + OBJmaterials[ii].value + "\n";
}
}
break;
default:
_str += OBJmaterials[ii].key + " " + OBJmaterials[ii].value + "\n";
break;
}
}
$("#MTLedit").find('textarea').val(_str);
$("#MTLedit").dialog("open");
//$(".modalTextArea");
$( "#MTLedit").find("textarea").keyup(function() {
var _next = true;
var _text = $(this).val();
var info = {};
var delimiter_pattern = /\s+/;
var materialsInfo = {};
_text = _text.split( "\n" );
for (var ii = 0; ii < _text.length; ii++) {
var line = _text[ ii ];
line = line.trim();
if ( line.length === 0 || line.charAt( 0 ) === '#' ) {
// Blank line or comment ignore
continue;
}
var pos = line.indexOf( ' ' );
var key = ( pos >= 0 ) ? line.substring( 0, pos ) : line;
key = key.toLowerCase();
var value = ( pos >= 0 ) ? line.substring( pos + 1 ) : "";
value = value.trim();
if ( key === "newmtl" ) {
// New material
info = { name: value };
materialsInfo[ value ] = info;
} else if ( info ) {
if ( key === "ka" || key === "kd" || key === "ks" ) {
var ss = value.split( delimiter_pattern, 3 );
info[ key ] = [ parseFloat( ss[0] ), parseFloat( ss[1] ), parseFloat( ss[2] ) ];
if (typeof (info.ka) !== 'undefined' && typeof (info.kd) !== 'undefined' && typeof (info.ks) !== 'undefined') {
var search = true;
for (var kk = 0; kk < sceneMaterials.length && search; kk++) {
if (sceneMaterials[kk].name == info.name) {
search = false;
var _color = {ka: new THREE.Color(info.ka[0], info.ka[1], info.ka[2]), kd: new THREE.Color(info.kd[0], info.kd[1], info.kd[2]), ks: new THREE.Color(info.ks[0], info.ks[1], info.ks[2])};
handleMaterials(_color.ka, "ka", info.name);
handleMaterials(_color.kd, "kd", info.name);
handleMaterials(_color.ks, "ks", info.name);
var tempColor = setGuiColors(sceneMaterials[kk].name);
textColors.Ka = "#" + tempColor.ka.getHexString();
textColors.Kd = "#" + tempColor.kd.getHexString();
textColors.Ks = "#" + tempColor.ks.getHexString();
for (var i = 0; i < gui.__folders.Materials.__controllers.length; i++) {
if (typeof(gui.__folders.Materials.__controllers[i].updateDisplay()) == 'function')
gui.__folders.Materials.__controllers[i].updateDisplay();
}
}
}
}
} else {
info[ key ] = value;
}
}
}
});
$( "#MTLedit").find("textarea").trigger("keyup");
$("span.ui-dialog-title").text("Preview of MTL file");
},*/
"Save": function () {
if (tinymce.get('modalTextarea').getContent().length) $(this).dialog("close");
else $(this).find('textarea').css({borderColor: 'red'});
},
"Close": function () {
tinymce.get('modalTextarea').setContent("");
//$(this).find('textarea').val("");
$(this).dialog("close");
}
}
});
tinymce.init({
selector: '#modalTextarea',
plugins: "autoresize",
menubar:false,
statusbar: false,
toolbar: false,
autoresize_overflow_padding: 5,
force_br_newlines : true,
force_p_newlines : false,
forced_root_block : '',
setup: function (editor) {
editor.on('keyup', function (e) {
var _next = true;
var _text = tinymce.get("modalTextarea").getContent({format : 'text'});
var info = {};
var delimiter_pattern = /\s+/;
var materialsInfo = {};
_text = _text.split( "\n" );
for (var ii = 0; ii < _text.length; ii++) {
var line = _text[ ii ];
line = line.trim();
if ( line.length === 0 || line.charAt( 0 ) === '#' ) {
// Blank line or comment ignore
continue;
}
var pos = line.indexOf( ' ' );
var key = ( pos >= 0 ) ? line.substring( 0, pos ) : line;
key = key.toLowerCase();
var value = ( pos >= 0 ) ? line.substring( pos + 1 ) : "";
value = value.trim();
if ( key === "newmtl" ) {
// New material
info = { name: value };
materialsInfo[ value ] = info;
} else if ( info ) {
if ( key === "ka" || key === "kd" || key === "ks" ) {
var ss = value.split( delimiter_pattern, 3 );
info[ key ] = [ parseFloat( ss[0] ), parseFloat( ss[1] ), parseFloat( ss[2] ) ];
if (typeof (info.ka) !== 'undefined' && typeof (info.kd) !== 'undefined' && typeof (info.ks) !== 'undefined') {
var search = true;
for (var kk = 0; kk < sceneMaterials.length && search; kk++) {
if (sceneMaterials[kk].name == info.name) {
search = false;
var _color = {ka: new THREE.Color(info.ka[0], info.ka[1], info.ka[2]), kd: new THREE.Color(info.kd[0], info.kd[1], info.kd[2]), ks: new THREE.Color(info.ks[0], info.ks[1], info.ks[2])};
handleMaterials(_color.ka, "ka", info.name);
handleMaterials(_color.kd, "kd", info.name);
handleMaterials(_color.ks, "ks", info.name);
var tempColor = setGuiColors(sceneMaterials[kk].name);
textColors.Ka = "#" + tempColor.ka.getHexString();
textColors.Kd = "#" + tempColor.kd.getHexString();
textColors.Ks = "#" + tempColor.ks.getHexString();
for (var i = 0; i < gui.__folders.Materials.__controllers.length; i++) {
if (typeof(gui.__folders.Materials.__controllers[i].updateDisplay()) == 'function')
gui.__folders.Materials.__controllers[i].updateDisplay();
}
}
}
}
} else {
info[ key ] = value;
}
}
}
saveMTL (sceneMaterials);
});
}
});
$("#descForm").dialog({
resizable : false,
height : 340,
modal : true,
position : {
my : "left center",
at : "right",
of : $("#object3d-viewer-canvas_"+mainID)
},
show : {
effect : 'fade',
duration : 500
},
hide : {
effect : 'fade',
duration : 500
},
autoOpen : false,
close : function () {
$("#descFormError").html("");
$("#descName").val("");
//$("#descDescription").val("");
},
buttons : {
"OK" : function (evt) {
buttonDomElement = evt.currentTarget;
$(Drupal.settings.wisski.vocab_dialog.myform).dialog( "close" );
var $param = $("#descForm");
var eventObjects = [];
var newEvents = [];
$("#descFormError").html("");
if ($("#descName").val() !== '') {
$(buttonDomElement).button('disable');
if (editedObject != '') {
var pickedEvents = $("#events").find("#wki-data-item")[0].children;
//var pickedEvents = $("#events").find("#wki-data-item").children;
for (var ii = 0; ii < pickedEvents.length; ii++) {
var eventObject = {
uri : $(pickedEvents[ii]).find("a:first").attr("href"),
class_name : $(pickedEvents[ii]).attr("class"),
name : $(pickedEvents[ii]).find("a:first")[0].innerHTML
};
eventObjects.push(eventObject);
}
saveEntry(editedObject.object, $("#descName").val(), eventObjects, _filename[0], whichScene, editedObject.object.material.color.getHexString());
//scene[whichScene].getObjectById(editedObject.object.id).events = eventObjects;
editedObject.object.name = $("#descName").val();
//editedObject = '';
} else {
var pickedEvents = $("#events").find("#wki-data-item")[0].children;
for (var ii = 0; ii < pickedEvents.length; ii++) {
var eventObject = {
uri : $(pickedEvents[ii]).find("a:first").attr("href"),
class_name : $(pickedEvents[ii]).attr("class"),
name : $(pickedEvents[ii]).find("a:first")[0].innerHTML
};
eventObjects.push(eventObject);
}
if (typeof(lastAddedObject.tt) !== 'undefined') {
if (typeof(lastAddedObject.tt.tabl) !== 'undefined')
for (var j = 0; j < lastAddedObject.tt.tabl.length; j++)
scene[whichScene].getObjectById(lastAddedObject.tt.tabl[j]).material.color.setHex(0xffffff - lastAddedObject.object.material.color.getHex());
//scene[whichScene].getObjectById(lastAddedObject.object.id).events = eventObjects;
triangles.push(lastAddedObject.object);
lastAddedObject.object.idd = newID;
lastAddedObject.object.name = $("#descName").val();
} else if (typeof(lastAddedObject.mtt) !== 'undefined') {
if (typeof(lastAddedObject.mtt.tabl) !== 'undefined')
for (var j = 0; j < lastAddedObject.mtt.tabl.length; j++)
scene[whichScene].getObjectById(lastAddedObject.mtt.tabl[j]).material.color.setHex(0xffffff - lastAddedObject.object.material.color.getHex());
//scene[whichScene].getObjectById(lastAddedObject.object.id).events = eventObjects;
createdMeshes.push(lastAddedObject.object);
lastAddedObject.object.idd = newID;
lastAddedObject.object.name = $("#descName").val();
//lastAddedObject.object.events = eventObjects;
}
save($("#descName").val(), eventObjects, $param.data("type"), $param.data("color"), $param.data("coords"), $param.data("faces"), _filename[0], 1, whichScene, lastAddedObject);
lastAddedObject = '';
}
} else if ($("#descName").val() === '') {
$("#descName").css('border', 'solid 1px red');
requiredFields();
$(buttonDomElement).button('enable');
}
/*else if ($("#descDescription").val() === '') {
$("#descDescription").css('border', 'solid 1px red');
requiredFields();
}*/
lastAddedObject = '';
},
Cancel : function () {
$(Drupal.settings.wisski.vocab_dialog.myform).dialog( "close" );
if (typeof(lastAddedObject.object) !== 'undefined') {
//scene.remove(lastAddedObject.object);
if (typeof(lastAddedObject.tt) !== 'undefined') {
lastIDHoverT = lastIDHover = 0;
for (var property in lastAddedObject.tt) {
scene[whichScene].remove(scene[whichScene].getObjectById(lastAddedObject.tt[property]));
}
} else if (typeof(lastAddedObject.mtt) !== 'undefined') {
//searchSpheresInMeshes(lastAddedObject.object.id, 0);
scene[whichScene].remove(scene[whichScene].getObjectById(lastAddedObject.mtt));
}
lastAddedObject = '';
}
$(this).dialog("close");
}
}
});
$("#confirm").dialog({
resizable : false,
height : 140,
modal : true,
show : {
effect : 'fade',
duration : 500
},
hide : {
effect : 'fade',
duration : 500
},
autoOpen : false,
open : function (event, ui) {},
buttons : {
"Yes" : function () {
var $param = $("#confirm");
if ($param.data("type") == 0) {}
else if ($param.data("type") == 1) {
triangles.splice($param.data("ind"), 1)
scene[whichScene].remove(scene[whichScene].getObjectById($param.data("id")));
lastIDHoverT = lastIDHover = 0;
} else if ($param.data("type") == 2) {
scene[whichScene].remove(scene[whichScene].getObjectById($param.data("id")));
searchSpheresInMeshes($param.data("id"), 0);
lastIDHoverT = lastIDHover = 0;
}
$("#tooltip").dialog("close");
removeNode($param.data("idd"), _filename[0]);
$(this).dialog("close");
},
"No" : function () {
$(this).dialog("close");
}
}
});
$("#tooltip").dialog({
show : null,
minHeight : 100,
autoResize : true,
show : {
effect : 'fade',
duration : 350
},
hide : {
effect : 'fade',
duration : 350
},
autoOpen : false,
position : {
my : "left top",
at : "left bottom"
},
open : function (event, ui) {
$("#tooltip").closest('.ui-dialog').find('.ui-dialog-titlebar').height(10);
},
beforeClose : function (event, ui) {
editedObject = '';
},
close : function (event, ui) {
if (typeof(egh.id) !== 'undefined') {
scene[whichScene].remove(scene[whichScene].getObjectById(egh.id));
egh = '';
}
}
});
});
$(function () {
$('#descName').change(function () {
if ($('#descName').css('border-color') == 'red')
$("#descName").css('border', 'solid 1px DarkGray');
});
});
function requiredFields() {
$("#descFormError").html("
Fields are required ").css('color', 'red');
}
var target;
function loadModel(url, type, _ff) {
//displayText(_ff, "Loading JSON model...");
$("#spinText_"+ff+"").html("Loading JSON model...");
var JSONloader = new THREE.JSONLoader();
var object = new THREE.Mesh();
var createMesh = function (geometry, materials) {
object = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial(materials));
object.matrixAutoUpdate = true;
object.castShadow = true;
object.receiveShadow = true;
if (type == 1) {
object.geometry.computeBoundingBox();
var pos = originPosition[_ff] = object.geometry.boundingBox;
originPosition[_ff].x = pos.min.x + (pos.max.x - pos.min.x) / 2;
originPosition[_ff].y = pos.min.y + (pos.max.y - pos.min.y) / 2;
originPosition[_ff].z = pos.min.z + (pos.max.z - pos.min.z) / 2;
object.position.x -= originPosition[_ff].x;
object.position.y -= originPosition[_ff].y;
object.position.z -= originPosition[_ff].z;
sphereRadius = ((pos.max.x - pos.min.x) + (pos.max.y - pos.min.y) + (pos.max.z - pos.min.z)) / 3;
if (maxRadius < sphereRadius) {
maxRadius = sphereRadius;
camera[_ff].far = maxRadius * 7;
camera[_ff].updateProjectionMatrix();
}
var position = {
x : 0,
y : 0,
z : 0
};
bbox = new THREE.BoundingBoxHelper(object, hex);
bbox.update();
bbox.visible = false;
scene[_ff].add(bbox);
camera[_ff].position.z = position.z - sphereRadius * 1.8;
camera[_ff].position.x = position.x - sphereRadius * 1.8;
camera[_ff].position.y = position.y + sphereRadius * 1.3;
var cam = new THREE.Object3D();
cam.position.x = position.x;
cam.position.y = position.y;
cam.position.z = position.z;
camera[_ff].lookAt(cam);
controls[_ff].target.z = position.z;
controls[_ff].target.x = position.x;
controls[_ff].target.y = position.y;
var text = {
x : pos.max.x - pos.min.x,
y : pos.max.y - pos.min.y,
z : pos.max.z - pos.min.z
};
text.x = text.x.toFixed(2);
text.y = text.y.toFixed(2);
text.z = text.z.toFixed(2);
addAxis(sphereRadius, text, _ff);
for (var ii = 0; ii < object.material.materials.length; ii++) {
object.material.materials[ii].transparent = true;
object.material.materials[ii].side = THREE.DoubleSide;
var tempMat = {name: object.material.materials[ii].name, ka: object.material.materials[ii].ambient, kd: object.material.materials[ii].color, ks: object.material.materials[ii].specular, changed: false};
sceneMaterials.push(tempMat);
}
object.renderDepth = 1;
object.name = url;
isJSON = true;
mObject.push(object);
var color = new THREE.Color();
color.setRGB(255, 255, 255);
var textpos = new THREE.Vector3(0, 0, 0);
var floorT = addFloor(sphereRadius * 2, 0, - ((pos.max.y - pos.min.y) / 2), 0, _ff);
textpos.x -= floorT.geometry.boundingSphere.radius * 0.9;
textpos.y = bbox.box.min.y;
textpos.z = floorT.position.z - floorT.geometry.boundingSphere.radius / 2;
addText((filename[_ff] + "." + ext[_ff]), color, textpos, 'xyz', sphereRadius*0.75, _ff);
sphereRadius /= 60;
for (var u = 0; u < object.geometry.vertices.length; u++) {
particles.vertices.push(object.geometry.vertices[u]);
newSize = values_size[u] = sphereRadius;
values_color[u] = new THREE.Color().setRGB(0.9, 0.2, 0.2);
attributes.alpha.value[u] = 0.7;
}
var segments = 1;
geomStats[_ff] = {vertices: object.geometry.vertices.length, faces: object.geometry.faces.length, segments: segments};
particleSystem = new THREE.PointCloud(
particles,
pMaterial);
particlesObjects.push(particleSystem);
particleSystem.matrixAutoUpdate = true;
particleSystem.position.x -= pos.min.x + (pos.max.x - pos.min.x) / 2;
particleSystem.position.y -= pos.min.y + (pos.max.y - pos.min.y) / 2;
particleSystem.position.z -= pos.min.z + (pos.max.z - pos.min.z) / 2;
particleSystem.updateMatrix();
scene[_ff].add(particleSystem);
particleSystem.visible = false;
} else {
WissKI.object3d.objects.push(object);
for (var ii = 0; ii < object.material.materials.length; ii++) {
object.material.materials[ii].transparent = true;
object.material.materials[ii].side = THREE.DoubleSide;
object.material.materials[ii].opacity = 0.12;
object.material.materials[ii].needsUpdate = true;
var tempMat = {name: object.material.materials[ii].name, ka: object.material.materials[ii].ambient, kd: object.material.materials[ii].color, ks: object.material.materials[ii].specular, changed: false};
sceneMaterials.push(tempMat);
}
}
scene[_ff].add(object);
};
JSONloader.load(url, createMesh);
JSONloader.onLoadComplete = function () {
animate();
displayText(_ff, "Model loaded");
var tempXHR = url;
tempXHR = tempXHR.replace(/\\/g, '/');
tempXHR = tempXHR.substring(tempXHR.lastIndexOf('/') + 1);
tempXHR = tempXHR.replace(/[|&;$%@"<>()+,]/g, "");
xhrFile.push(tempXHR);
$("#descForm").data("filename", _filename[_ff]);
$.ajax({
url : prepareDesc(_filename[_ff], _ff),
success : function () {
functionDone(_ff);
spinner[_ff].stop();
}
});
}
}
var maxLength = _filename.length;
if (wholePano == 6) {
maxLength = 1;
}
for (var ii = 0; ii < maxLength; ii++) {
if (multi == false) {
ii = findIDfilename(_filename[ii]);
}
canvas[ii] = (document.getElementById('object3d-viewer-canvas_' + ii));
var cc = $('#object3d-viewer-canvas_' + ii);
if (_filename.length > 1) {
var viewportWidth = widthW[ii];
var viewportHeight = heightH[ii];
} else {
var viewportWidth = ww;
var viewportHeight = hh;
}
canvasWidth[ii] = viewportWidth;
canvasHeight[ii] = viewportHeight;
canvas[ii].setAttribute("width", canvasWidth[ii]);
canvas[ii].setAttribute("height", canvasHeight[ii]);
camera[ii] = new THREE.PerspectiveCamera(60, canvasWidth[ii] / canvasHeight[ii], 0.1, 1000);
//Setting up scene
scene[ii] = new THREE.Scene();
//LIGHTS
var newLights = new Array();
var ambient = new THREE.AmbientLight(0x111111);
scene[ii].add(ambient);
newLights.push(ambient);
directionalLight = new THREE.DirectionalLight(0xffeedd);
directionalLight.position.set(5, -5, 1).normalize();
directionalLight.castShadow = true;
//directionalLight.shadowMapWidth = directionalLight.shadowMapHeight = 1024 * 2;
var d = 2000;
directionalLight.shadowCameraLeft = -d;
directionalLight.shadowCameraRight = d;
directionalLight.shadowCameraTop = d;
directionalLight.shadowCameraBottom = -d;
directionalLight.shadowCameraFar = 3500;
directionalLight.shadowBias = -0.0001;
directionalLight.shadowDarkness = 0.35;
scene[ii].add(directionalLight);
newLights.push(directionalLight);
directionalLight = new THREE.DirectionalLight(0xffeedd);
directionalLight.position.set(5, 5, 1).normalize();
directionalLight.castShadow = true;
//directionalLight.shadowMapWidth = directionalLight.shadowMapHeight = 1024 * 2;
var d = 200;
directionalLight.shadowCameraLeft = -d;
directionalLight.shadowCameraRight = d;
directionalLight.shadowCameraTop = d;
directionalLight.shadowCameraBottom = -d;
directionalLight.shadowCameraFar = 3500;
directionalLight.shadowBias = -0.0001;
directionalLight.shadowDarkness = 0.35;
scene[ii].add(directionalLight);
newLights.push(directionalLight);
/*var hemiLight = new THREE.HemisphereLight(0xffffff, 0xffffff, 0.2);
hemiLight.color.setHSL(0.6, 0.75, 0.5);
hemiLight.groundColor.setHSL(0.095, 0.5, 0.5);
hemiLight.position.set(100, 1500, 0);
hemiLight.castShadow = true;
scene[ii].add(hemiLight);
newLights.push(hemiLight);*/
lights.push(newLights);
/* light = new THREE.DirectionalLight(0x333333);
light.position.set(100, 1, 100);
light.castShadow = true;
scene.add(light);*/
/*light = new THREE.DirectionalLight(0x666666);
light.position.set(-1, 1, -1);
light.castShadow = true;
scene.add(light);*/
//Texture for ground - unnecessary
/*var grassTexture = THREE.ImageUtils.loadTexture('http://www.patrimonium.net/sites/default/files/grass2.jpg');
grassTexture.wrapS = grassTexture.wrapT = THREE.RepeatWrapping;
grassTexture.repeat.set(4, 4);
grassTexture.min_filter = THREE.LinearFilter;
grassTexture.mag_filter = THREE.LinearFilter;*/
var geometry = new THREE.Geometry;
var material = new THREE.MeshLambertMaterial({
color : 0xffffff,
shading : THREE.FlatShading
});
// renderer
renderer[ii] = new THREE.WebGLRenderer({
antialias : true,
alpha : true
});
//renderer[ii].setClearColor(0xffffff, 1);
renderer[ii].setSize(canvasWidth[ii], canvasHeight[ii]);
container[ii] = document.getElementById('object3d-viewer-canvas_' + ii); //$('#object3d-viewer-canvas')[0];
container[ii].appendChild(renderer[ii].domElement);
//OrbitControls
controls[ii] = new THREE.OrbitControls(camera[ii], renderer[ii].domElement);
controls[ii].addEventListener('change', render);
controls[ii].damping = 0.5;
transform = new THREE.TransformControls(camera[ii], renderer[ii].domElement);
transform.addEventListener('change', render);
}
//OBJLoader helper
var manager = new THREE.LoadingManager();
manager.onProgress = function (item, loaded, total) {
//console.log(item, loaded, total);
};
manager.onLoad = function () {}
var loader = new THREE.OBJMTLLoader(manager);
//spinner.spin(target);
attributes = {
size : {
type : 'f',
value : []
},
customColor : {
type : 'c',
value : []
},
alpha : {
type : 'f',
value : []
},
};
uniforms = {
color : {
type : "c",
value : new THREE.Color(0xff0000)
},
};
var pMaterial = new THREE.ShaderMaterial({
uniforms : uniforms,
attributes : attributes,
vertexShader : document.getElementById('vParticle').textContent,
fragmentShader : document.getElementById('fParticle').textContent,
transparent : true,
alphaTest : 0.9,
});
var particles = new THREE.Geometry();
var values_size = attributes.size.value;
var values_color = attributes.customColor.value;
var onProgress = function (xhr) {
if (xhr.lengthComputable) {
var percentComplete = xhr.loaded / xhr.total * 100;
//$("#spinText_"+ff+"").append(" " + percentComplete + "%");
if (Math.round(percentComplete, 2) == 100) {
var tempXHR = xhr.target.responseURL;
tempXHR = tempXHR.replace(/\\/g, '/');
tempXHR = tempXHR.substring(tempXHR.lastIndexOf('/') + 1);
var extTemp = tempXHR.substring(tempXHR.lastIndexOf('.'));
tempXHR = tempXHR.replace(/[|&;$%@"<>()+,]/g, "");
if (extTemp !== ".mtl") {
xhrFile.push(tempXHR);
//$("#spinText_"+ff+"").html("Model loaded");
}
console.log(tempXHR + " " + Math.round(percentComplete, 2) + '% downloaded');
}
}
};
var maxLength = _filename.length;
if (wholePano == 6) {
maxLength = 1;
}
function displayText (_item, _string) {
$("#spinText_"+_item+"").animate({ opacity: 0 }, 'slow', 'easeOutCubic', function () {
$("#spinText_"+_item+"").html(_string);
$("#spinText_"+_item+"").animate({ opacity: 1 }, 'slow', 'easeOutCubic');
});
}
for (var ff = 0; ff < maxLength; ff++) {
if (multi == false) {
mainID = ff = findIDfilename(_filename[ff]);
_filename[ff] = filename[ff];
}
target = document.getElementById('spinner_' + ff);
spinner[ff].spin(target);
//Loading progress depends on extension of attached file
if (ext[ff] == "obj") {
$("#spinText_"+ff+"").html("Loading OBJ model...");
var object = new THREE.Mesh();
var prop = {
ff : ff,
filename : _filename[ff],
camera : camera[ff],
controls : controls[ff],
ext : ext[ff],
size: size[ff],
renderer: renderer[ff],
canvasHeight: canvasHeight[ff],
canvasWidth: canvasWidth[ff]
};
mtlName = '';
if (mtls.length > 0) {
var search = true;
for (var mm = 0; mm < mtls.length && search; mm++) {
search = true;
var temp = mtls[mm].replace(".mtl", "");
if (temp == _filename[ff]) {
mtlName = mtls[mm];
search = false;
}
if (search == true) {
var tempName = (_filename[ff].substr(0, _filename[ff].lastIndexOf("_")));
var re = new RegExp(tempName, 'g');
var tempMtl = mtls[mm];
tempMtl = tempMtl.replace(/\\/g, '/');
tempMtl = tempMtl.substring(tempMtl.lastIndexOf('/') + 1, tempMtl.lastIndexOf('.'));
tempMtl = tempMtl.replace(/%20/g, " ");
tempMtl = tempMtl.replace(/[|&;$%@"<>()+,]/g, "");
var match = tempMtl.match(re);
if (match !== null) {
search = false;
mtlName = mtls[mm];
}
else {
mtlName = WissKI.object3d.files[ff].replace("obj", "mtl");
search = false;
}
}
search = true;
}
}
else {
mtlName = WissKI.object3d.files[ff].replace("obj", "mtl");
}
loader.load(WissKI.object3d.files[ff], mtlName, prop, function (object) {
var overall = 8;
if (object.prop.size < 20971520) overall = 9;
$("#spinText_" + object.prop.ff + "").html("Preparing OBJ model... [" + 1 + "/" + overall + "]");
$("#stage_" + object.prop.ff + "").fadeIn(400);
WissKI.object3d.materialMain.transparent = true;
object.matrixAutoUpdate = true;
object.castShadow = true;
object.receiveShadow = true;
OBJmaterials = object.prop.materials;
object.renderDepth = 1;
object.name = object.prop.filename;
addStage ("stage1", "object initialized", object.prop.ff);
$("#spinText_" + object.prop.ff + "").html("Preparing OBJ model... [" + 2 + "/" + overall + "]");
console.log("Preparing position...");
var pos = originPosition[object.prop.ff] = new THREE.Box3().setFromObject(object);
originPosition[object.prop.ff].x = pos.min.x + (pos.max.x - pos.min.x) / 2;
originPosition[object.prop.ff].y = pos.min.y + (pos.max.y - pos.min.y) / 2;
originPosition[object.prop.ff].z = pos.min.z + (pos.max.z - pos.min.z) / 2;
object.position.x -= originPosition[object.prop.ff].x;
object.position.y -= originPosition[object.prop.ff].y;
object.position.z -= originPosition[object.prop.ff].z;
sphereRadius = ((pos.max.x - pos.min.x) + (pos.max.y - pos.min.y) + (pos.max.z - pos.min.z)) / 3;
//if (maxRadius < sphereRadius)
{
maxRadius = sphereRadius;
object.prop.camera.far = maxRadius * 15;
object.prop.camera.updateProjectionMatrix();
}
//scene.fog = new THREE.FogExp2(0xffffff, sphereRadius*7, sphereRadius*10000);
var position = {
x : 0,
y : 0,
z : 0
};
addStage ("stage2", "position prepared", object.prop.ff);
$("#spinText_" + object.prop.ff + "").html("Preparing OBJ model... [" + 3 + "/" + overall + "]");
console.log("Preparing labels...");
var text = {
x : pos.max.x - pos.min.x,
y : pos.max.y - pos.min.y,
z : pos.max.z - pos.min.z
};
text.x = text.x.toFixed(2);
text.y = text.y.toFixed(2);
text.z = text.z.toFixed(2);
addAxis(sphereRadius, text, object.prop.ff);
addStage ("stage3", "labels have been written", object.prop.ff);
$("#spinText_" + object.prop.ff + "").html("Preparing OBJ model... [" + 4 + "/" + overall + "]");
console.log("Preparing camera...");
object.prop.camera.position.z = position.z - sphereRadius * 1.8;
object.prop.camera.position.x = position.x - sphereRadius * 1.8;
object.prop.camera.position.y = position.y + sphereRadius * 1.3;
//scene[object.prop.ff].fog = new THREE.FogExp2(0x000000 , position.z, 0.25);
var cam = new THREE.Object3D();
cam.position.x = position.x;
cam.position.y = position.y;
cam.position.z = position.z;
object.prop.camera.lookAt(cam);
object.prop.controls.target.z = position.z;
object.prop.controls.target.x = position.x;
object.prop.controls.target.y = position.y;
addStage ("stage4", "camera has been set up", object.prop.ff);
$("#spinText_" + object.prop.ff + "").html("Preparing OBJ model... [" + 5 + "/" + overall + "]");
console.log("Preparing materials...");
var tArr = new Array();
var floorT = addFloor(sphereRadius * 2, 0, - ((pos.max.y - pos.min.y) / 2), 0, object.prop.ff);
for (var i = 0; i < object.children.length; i++) {
if (object.children[i].name == '') {
object.children[i].name = object.prop.filename;
}
if (typeof(object.children[i].material) !== 'undefined') {
if (object.children[i].material.name == 'realMirror') {
realMirror = new THREE.Mirror( object.prop.renderer, object.prop.camera, { clipBias: 0.003, textureWidth: object.prop.canvasWidth, textureHeight: object.prop.canvasHeight, color: 0xDEDEEE } );
object.children[i].material = realMirror.material;
object.children[i].material.side = THREE.DoubleSide;
object.children[i].add(realMirror);
}
else {
object.children[i].material.shading = THREE.SmoothShading;
object.children[i].material.vertexColors = THREE.FaceColors;
object.children[i].material.side = THREE.DoubleSide;
if (typeof (object.children[i].material.specular) !== 'undefined' && (object.children[i].material.specular.r == 0.5 && object.children[i].material.specular.g == 0.5 && object.children[i].material.specular.b == 0.5)) {
object.children[i].material.specular = new THREE.Color(0.0,0.0,0.0);
}
}
var tempMat = {name: object.children[i].material.name, ka: object.children[i].material.ambient, kd: object.children[i].material.color, ks: object.children[i].material.specular, changed: false};
sceneMaterials.push(tempMat);
}
else if (object.children[i].type == 'Object3D') {
for (var j = 0; j < object.children[i].children.length; j++) {
if (object.children[i].children[j].material.name == 'realMirror') {
realMirror = new THREE.Mirror( object.prop.renderer, object.prop.camera, { clipBias: 0.003, textureWidth: object.prop.canvasWidth, textureHeight: object.prop.canvasHeight, color: 0xDEDEEE } );
object.children[i].children[j].material = realMirror.material;
object.children[i].children[j].material.side = THREE.DoubleSide;
object.children[i].children[j].add(realMirror);
}
else {
object.children[i].children[j].material.shading = THREE.SmoothShading;
object.children[i].children[j].material.vertexColors = THREE.FaceColors;
object.children[i].children[j].material.side = THREE.DoubleSide;
if (typeof (object.children[i].children[j].material.specular) !== 'undefined' && (object.children[i].children[j].material.specular.r == 0.5 && object.children[i].children[j].material.specular.g == 0.5 && object.children[i].children[j].material.specular.b == 0.5)) {
object.children[i].children[j].material.specular = new THREE.Color(0.0,0.0,0.0);
}
}
var tempMat = {name: object.children[i].children[j].material.name, ka: object.children[i].children[j].material.ambient, kd: object.children[i].children[j].material.color, ks: object.children[i].children[j].material.specular, changed: false};
sceneMaterials.push(tempMat);
}
}
tArr.push(object.children[i]);
}
//mObject.push(tArr);
addStage ("stage5", "materials prepared", object.prop.ff);
$("#spinText_" + object.prop.ff + "").html("Preparing OBJ model... [" + 6 + "/" + overall + "]");
console.log("Preparing boundingbox...");
bbox = new THREE.BoundingBoxHelper(object, hex);
bbox.update();
bbox.visible = false;
scene[object.prop.ff].add(bbox);
bboxes.push(bbox);
addStage ("stage6", "boundingbox calculated", object.prop.ff);
$("#spinText_" + object.prop.ff + "").html("Preparing OBJ model... [" + 7 + "/" + overall + "]");
console.log("Preparing filename...");
var color = new THREE.Color();
color.setRGB(255, 255, 255);
var textpos = new THREE.Vector3(0, 0, 0);
textpos.x -= floorT.geometry.boundingSphere.radius * 0.9;
textpos.y = bbox.box.min.y;
textpos.z = floorT.position.z - floorT.geometry.boundingSphere.radius / 2;
addText((object.prop.filename + "." + object.prop.ext), color, textpos, 'xyz', sphereRadius*0.75/*(bbox.box.max.z - bbox.box.min.z) / 1.5*/, object.prop.ff);
addStage ("stage7", "labels are written", object.prop.ff);
$("#spinText_" + object.prop.ff + "").html("Preparing OBJ model... [" + 8 + "/" + overall + "]");
console.log("Adding object...");
scene[object.prop.ff].add(object);
mObject.push(object);
sphereRadius /= 60;
if (object.prop.size < 20971520)
{ //20 MB
$("#spinText_" + object.prop.ff + "").html("Preparing OBJ model... [" + 9 + "/" + overall + "]");
console.log("Preparing particles...");
var particles = new THREE.Geometry();
var values_size = attributes.size.value;
var values_color = attributes.customColor.value;
var tt = 0;
var cFaces = 0;
var segments = 0;
for (var ii = 0; ii < object.children.length; ii++) {
var geom = new Array();
if (typeof(object.children[ii].geometry) !== 'undefined') {
//object.children[ii].geometry.computeVertexNormals();
geom = geom.concat(object.children[ii].geometry.vertices);
cFaces += object.children[ii].geometry.faces.length;
segments++;
} else if (typeof(object.children[ii].children) !== 'undefined') {
for (var jj = 0; jj < object.children[ii].children.length; jj++) {
//object.children[ii].children[jj].geometry.computeVertexNormals();
geom = geom.concat(object.children[ii].children[jj].geometry.vertices);
cFaces += object.children[ii].children[jj].geometry.faces.length;
segments++;
}
}
for (var u = 0; u < geom.length; u++) {
particles.vertices.push(geom[u]);
newSize = values_size[tt] = sphereRadius;
values_color[tt] = new THREE.Color().setRGB(0.9, 0.2, 0.2);
attributes.alpha.value[tt] = 0.7;
tt++;
}
}
geomStats[object.prop.ff] = {vertices: geom.length, faces: cFaces, segments: segments};
particleSystem = new THREE.PointCloud(
particles,
pMaterial);
particlesObjects.push(particleSystem);
particleSystem.position.x -= pos.min.x + (pos.max.x - pos.min.x) / 2;
particleSystem.position.y -= pos.min.y + (pos.max.y - pos.min.y) / 2;
particleSystem.position.z -= pos.min.z + (pos.max.z - pos.min.z) / 2;
particleSystem.matrixAutoUpdate = true;
particleSystem.updateMatrix();
scene[object.prop.ff].add(particleSystem);
particleSystem.visible = false;
console.log("Particles added successfully...");
addStage ("stage8", "particles added", object.prop.ff);
}
controls[object.prop.ff] = object.prop.controls;
$("#descForm").data("filename", object.prop.filename);
//displayText (object.prop.ff, "Setting up scene...");
//$("#spinText_"+object.prop.ff+"").html("Setting up scene...");
animate();
$.ajax({
url : prepareDesc(object.prop.filename, object.prop.ff),
success : function () {
spinner[object.prop.ff].stop();
functionDone(object.prop.ff);
}
});
}, onProgress);
} else if ((ext[ff] == "js") || (ext[ff] == "txt")) {
loadModel(WissKI.object3d.files[ff], 1, ff);
} else if (ext[ff] == "dae") {
$("#spinText_"+ff+"").html("Loading DAE model...");
var prop = {
ff : ff,
filename : _filename[ff],
camera : camera[ff],
controls : controls[ff],
ext : ext[ff]
};
geomStats[ff] = {vertices: 0, faces: 0, segments: 0};
$.ajax({
url: loadDAE(),
success: function () {
$.ajax({
url : prepareDesc(prop.filename, prop.ff),
success : function () {
spinner[prop.ff].stop();
functionDone(prop.ff);
}
});
}
});
function loadDAE () {
var colladaReady = function (object) {
WissKI.object3d.materialMain.transparent = true;
//isJSON = true;
isDAE = true;
var cVertices = 0;
var cFaces = 0;
var cSegments = 0;
var geom = new Array();
console.log(object);
for (var ii = 0; ii < object.scene.children.length; ii++) {
object.scene.children[ii].matrixAutoUpdate = true;
object.scene.children[ii].castShadow = true;
object.scene.children[ii].receiveShadow = true;
object.scene.children[ii].renderDepth = 1;
object.scene.children[ii].name = object.prop.filename;
var pos = originPosition[object.prop.ff] = new THREE.Box3().setFromObject(object.scene.children[ii]);
originPosition[object.prop.ff].x = pos.min.x + (pos.max.x - pos.min.x) / 2;
originPosition[object.prop.ff].y = pos.min.y + (pos.max.y - pos.min.y) / 2;
originPosition[object.prop.ff].z = pos.min.z + (pos.max.z - pos.min.z) / 2;
object.scene.children[ii].position.x -= originPosition[object.prop.ff].x;
object.scene.children[ii].position.y -= originPosition[object.prop.ff].y;
object.scene.children[ii].position.z -= originPosition[object.prop.ff].z;
sphereRadius = ((pos.max.x - pos.min.x) + (pos.max.y - pos.min.y) + (pos.max.z - pos.min.z)) / 3;
if (maxRadius < sphereRadius) {
maxRadius = sphereRadius;
object.prop.camera.far = maxRadius * 15;
object.prop.camera.updateProjectionMatrix();
}
var position = {
x : 0,
y : 0,
z : 0
};
var text = {
x : pos.max.x - pos.min.x,
y : pos.max.y - pos.min.y,
z : pos.max.z - pos.min.z
};
text.x = text.x.toFixed(2);
text.y = text.y.toFixed(2);
text.z = text.z.toFixed(2);
addAxis(sphereRadius, text, object.prop.ff);
object.prop.camera.position.z = position.z - sphereRadius * 1.8;
object.prop.camera.position.x = position.x - sphereRadius * 1.8;
object.prop.camera.position.y = position.y + sphereRadius * 1.3;
var cam = new THREE.Object3D();
cam.position.x = position.x;
cam.position.y = position.y;
cam.position.z = position.z;
object.prop.camera.lookAt(cam);
object.prop.controls.target.z = position.z;
object.prop.controls.target.x = position.x;
object.prop.controls.target.y = position.y;
var tArr = new Array();
var floorT = addFloor(sphereRadius * 2, 0, - ((pos.max.y - pos.min.y) / 2), 0, object.prop.ff);
bbox = new THREE.BoundingBoxHelper(object.scene.children[ii], hex);
bbox.update();
bbox.visible = false;
scene[object.prop.ff].add(bbox);
bboxes.push(bbox);
var color = new THREE.Color();
color.setRGB(255, 255, 255);
var textpos = new THREE.Vector3(0, 0, 0);
textpos.x -= floorT.geometry.boundingSphere.radius * 0.9;
textpos.y = bbox.box.min.y;
textpos.z = floorT.position.z - floorT.geometry.boundingSphere.radius / 3;
addText((object.prop.filename + "." + object.prop.ext), color, textpos, 'xyz', sphereRadius*0.75/*(bbox.box.max.z - bbox.box.min.z) / 1.5*/, object.prop.ff);
var values_size = attributes.size.value;
var values_color = attributes.customColor.value;
var tt = 0;
if (typeof(object.scene.children[ii].geometry) !== 'undefined') {
geom = geom.concat(object.scene.children[ii].geometry.vertices);
object.scene.children[ii].name = object.prop.filename;
mObject.push(object.scene.children[ii]);
cFaces += (object.scene.children[ii].geometry.faces.length);
cSegments++;
if (typeof(object.scene.children[ii].material) !== 'undefined') {
var tempMat = {name: object.scene.children[ii].material.name, ka: object.scene.children[ii].material.ambient, kd: object.scene.children[ii].material.color, ks: object.scene.children[ii].material.specular, changed: false};
sceneMaterials.push(tempMat);
}
} else if (typeof(object.scene.children[ii].children) !== 'undefined') {
for (var jj = 0; jj < object.scene.children[ii].children.length; jj++) {
if (typeof (object.scene.children[ii].children[jj].geometry) !== 'undefined') {
object.scene.children[ii].children[jj].name = object.prop.filename;
mObject.push(object.scene.children[ii].children[jj]);
geom = geom.concat(object.scene.children[ii].children[jj].geometry.vertices);
cFaces += object.scene.children[ii].children[jj].geometry.faces.length;
cSegments++;
if (typeof(object.scene.children[ii].children[jj].material) !== 'undefined') {
var tempMat = {name: object.scene.children[ii].children[jj].material.name, ka: object.scene.children[ii].children[jj].material.ambient, kd: object.scene.children[ii].children[jj].material.color, ks: object.scene.children[ii].children[jj].material.specular, changed: false};
sceneMaterials.push(tempMat);
}
}
}
}
scene[object.prop.ff].add(object.scene.children[ii]);
sphereRadius /= 60;
var particles = new THREE.Geometry();
for (var u = 0; u < geom.length; u++) {
particles.vertices.push(geom[u]);
newSize = values_size[tt] = sphereRadius;
values_color[tt] = new THREE.Color().setRGB(0.9, 0.2, 0.2);
attributes.alpha.value[tt] = 0.7;
tt++;
}
particleSystem = new THREE.PointCloud(
particles,
pMaterial);
particlesObjects.push(particleSystem);
particleSystem.position.x -= pos.min.x + (pos.max.x - pos.min.x) / 2;
particleSystem.position.y -= pos.min.y + (pos.max.y - pos.min.y) / 2;
particleSystem.position.z -= pos.min.z + (pos.max.z - pos.min.z) / 2;
particleSystem.matrixAutoUpdate = true;
particleSystem.updateMatrix();
scene[object.prop.ff].add(particleSystem);
particleSystem.visible = false;
controls[object.prop.ff] = object.prop.controls;
$("#descForm").data("filename", object.prop.filename);
}
geomStats[object.prop.ff] = {vertices: geom.length, faces: cFaces, segments: cSegments};
if (object.scene.children.length == 0) {
cVertices = 0;
cFaces = 0;
cSegments = 0;
for (var key in object.dae.geometries) {
cVertices += object.dae.geometries[key].mesh.geometry3js.vertices.length;
cFaces += object.dae.geometries[key].mesh.geometry3js.faces.length;
cSegments++;
}
geomStats[object.prop.ff] = {vertices: cVertices, faces: cFaces, segments: cSegments};
}
scene[object.prop.ff].add(object.scene);
mObject.push(object.scene);
animate();
//sphereRadius /= 60;
}
var loader = new THREE.ColladaLoader();
loader.load(WissKI.object3d.files[ff], prop, colladaReady);
}
} else if (ext[ff] == "xyz") {
//displayText (ff, "Loading XYZ model...");
$("#spinText_"+ff+"").html("Loading XYZ model...");
console.log("Loading performed...");
var xmlhttp;
function loadXMLDoc(url, cfunc) {
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = cfunc;
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
function loadTXT(_ff) {
var vertex = new THREE.Vector3();
loadXMLDoc(WissKI.object3d.files[0], function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
particles = new THREE.Geometry();
var values_size = attributes.size.value;
var values_color = attributes.customColor.value;
var vertices = (xmlhttp.responseText).split("\n");
for (var ii = 0; ii < vertices.length; ii++) {
var vertt = vertices[ii].split(" ");
vertex = new THREE.Vector3(vertt[0], vertt[1], vertt[2]);
particles.vertices.push(vertex);
values_size[ii] = 0.1;
values_color[ii] = new THREE.Color().setRGB(0.9, 0.2, 0.2);
attributes.alpha.value[ii] = 0.7;
}
particles.computeBoundingBox();
particles.name = 'nameOfXYZ';
particleSystem = new THREE.PointCloud(
particles,
pMaterial);
particleSystem.visible = true;
particleSystem.matrixAutoUpdate = true;
particleSystem.updateMatrix();
particleSystem.rotateX(Math.PI / 2);
particleSystem.rotateY(Math.PI);
var pos = new THREE.Box3().setFromObject(particleSystem);
particleSystem.position.x -= pos.min.x + (pos.max.x - pos.min.x) / 2;
particleSystem.position.y -= pos.min.y + (pos.max.y - pos.min.y) / 2;
particleSystem.position.z -= pos.min.z + (pos.max.z - pos.min.z) / 2;
sphereRadius = ((pos.max.x - pos.min.x) + (pos.max.y - pos.min.y) + (pos.max.z - pos.min.z)) / 3;
camera[_ff].far = sphereRadius * 7;
camera[_ff].updateProjectionMatrix();
bbox = new THREE.BoundingBoxHelper(particleSystem, hex);
bbox.update();
bbox.visible = false;
scene[_ff].add(bbox);
addFloor(sphereRadius * 2, 0, - ((pos.max.y - pos.min.y) / 2), 0, _ff);
var text = {
x : pos.max.x - pos.min.x,
y : pos.max.y - pos.min.y,
z : pos.max.z - pos.min.z
};
text.x = text.x.toFixed(2);
text.y = text.y.toFixed(2);
text.z = text.z.toFixed(2);
addAxis(sphereRadius, text, _ff);
var color = new THREE.Color();
color.setRGB(255, 255, 255);
var textpos = new THREE.Vector3(0, 0, 0);
var floorT = addFloor(sphereRadius * 2, 0, - ((pos.max.y - pos.min.y) / 2), 0, _ff);
textpos.x -= floorT.geometry.boundingSphere.radius * 0.9;
textpos.y = bbox.box.min.y;
textpos.z = floorT.position.z - floorT.geometry.boundingSphere.radius / 2;
addText((filename[_ff] + "." + ext[_ff]), color, textpos, 'xyz', sphereRadius*0.75, _ff);
var position = {
x : 0,
y : 0,
z : 0
};
camera[_ff].position.z = position.z - sphereRadius * 1.8;
camera[_ff].position.x = position.x - sphereRadius * 1.8;
camera[_ff].position.y = position.y + sphereRadius * 1.3;
var cam = new THREE.Object3D();
cam.position.x = position.x;
cam.position.y = position.y;
cam.position.z = position.z;
camera[_ff].lookAt(cam);
controls[_ff].target.z = position.z;
controls[_ff].target.x = position.x;
controls[_ff].target.y = position.y;
geomStats[_ff] = {vertices: particles.vertices.length, faces: 0, segments: 0};
sphereRadius /= 60;
scene[_ff].add(particleSystem);
console.log("Loading complete!");
spinner[_ff].stop();
displayText (_ff, "Model loaded");
functionDone (_ff);
animate();
//$("#spinText_"+_ff+"").html("Model loaded");
//console.log(xmlhttp.responseText);
}
});
}
loadTXT(ff);
} else if (ext[ff] == "ply") {
//displayText (ff, "Loading PLY model...");
$("#spinText_"+ff+"").html("Loading PLY model...");
console.log("Loading performed...");
var xmlhttp;
function loadXMLDoc(url, cfunc) {
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = cfunc;
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
function loadPLY(_ff) {
var vertex = new THREE.Vector3();
loadXMLDoc(WissKI.object3d.files[_ff], function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
particles = new THREE.Geometry();
var values_size = attributes.size.value;
var values_color = attributes.customColor.value;
var vertices = (xmlhttp.responseText).split("\n");
var startRow;
var flag = true;
for (var ii = 0; ii < vertices.length && flag; ii++) {
var texx = vertices[ii];
if (texx == "end_header") {
flag = false;
startRow = ii;
}
}
var ind = 0;
for (var ii = startRow + 1; ii < vertices.length; ii++) {
ind = ii - (startRow + 1);
var vertt = vertices[ii].split(" ");
vertex = new THREE.Vector3(vertt[0], vertt[1], vertt[2]);
particles.vertices.push(vertex);
values_size[ind] = 0.1;
values_color[ind] = new THREE.Color().setRGB(vertt[3] / 256, vertt[4] / 256, vertt[5] / 256);
attributes.alpha.value[ind] = 0.7;
}
particles.computeBoundingBox();
particles.name = 'nameOfJSON';
particleSystem = new THREE.PointCloud(
particles,
pMaterial);
particleSystem.visible = true;
particleSystem.matrixAutoUpdate = true;
particleSystem.updateMatrix();
particleSystem.rotateX(Math.PI / 2);
particleSystem.rotateY(Math.PI);
var pos = new THREE.Box3().setFromObject(particleSystem);
particleSystem.position.x -= pos.min.x + (pos.max.x - pos.min.x) / 2;
particleSystem.position.y -= pos.min.y + (pos.max.y - pos.min.y) / 2;
particleSystem.position.z -= pos.min.z + (pos.max.z - pos.min.z) / 2;
sphereRadius = ((pos.max.x - pos.min.x) + (pos.max.y - pos.min.y) + (pos.max.z - pos.min.z)) / 3;
camera[_ff].far = sphereRadius * 7;
camera[_ff].updateProjectionMatrix();
bbox = new THREE.BoundingBoxHelper(particleSystem, hex);
bbox.update();
bbox.visible = false;
scene[_ff].add(bbox);
//addFloor(sphereRadius * 2, 0, - ((pos.max.y - pos.min.y) / 2), 0, _ff);
var text = {
x : pos.max.x - pos.min.x,
y : pos.max.y - pos.min.y,
z : pos.max.z - pos.min.z
};
text.x = text.x.toFixed(2);
text.y = text.y.toFixed(2);
text.z = text.z.toFixed(2);
addAxis(sphereRadius, text, _ff);
var color = new THREE.Color();
color.setRGB(255, 255, 255);
var textpos = new THREE.Vector3(0, 0, 0);
var floorT = addFloor(sphereRadius * 2, 0, - ((pos.max.y - pos.min.y) / 2), 0, _ff);
textpos.x -= floorT.geometry.boundingSphere.radius * 0.9;
textpos.y = bbox.box.min.y;
textpos.z = floorT.position.z - floorT.geometry.boundingSphere.radius / 2;
addText((filename[_ff] + "." + ext[_ff]), color, textpos, 'xyz', sphereRadius*0.75, _ff);
var position = {
x : 0,
y : 0,
z : 0
};
camera[_ff].position.z = position.z - sphereRadius * 1.8;
camera[_ff].position.x = position.x - sphereRadius * 1.8;
camera[_ff].position.y = position.y + sphereRadius * 1.3;
var cam = new THREE.Object3D();
cam.position.x = position.x;
cam.position.y = position.y;
cam.position.z = position.z;
camera[_ff].lookAt(cam);
controls[_ff].target.z = position.z;
controls[_ff].target.x = position.x;
controls[_ff].target.y = position.y;
geomStats[_ff] = {vertices: particles.vertices.length, faces: 0, segments: 0};
sphereRadius /= 60;
scene[_ff].add(particleSystem);
console.log("Loading complete!");
spinner[_ff].stop();
displayText (_ff, "Model loaded");
//$("#spinText_"+_ff+"").html("Model loaded");
functionDone(_ff);
animate();
//console.log(xmlhttp.responseText);
}
});
}
loadPLY(ff);
} else if (wholePano == 6) {
//displayText (ff, "Loading panoramic view...");
$("#spinText_"+ff+"").html("Loading panoramic view...");
//var directions = ["px", "nx", panoramas[0], panoramas[1], "pz", "nz"];
var directions = [panoramas[4], panoramas[2], panoramas[1], panoramas[0], panoramas[3], panoramas[5]];
//var imageSuffix = ".jpg";
var panoGeometry = new THREE.BoxGeometry(3000, 3000, 3000);
var materialArray = [];
for (var i = 0; i < 6; i++) {
materialArray.push(new THREE.MeshBasicMaterial({
map : THREE.ImageUtils.loadTexture(directions[i]),
side : THREE.DoubleSide
}));
materialArray[i].map.flipY = false;
}
var panoMaterial = new THREE.MeshFaceMaterial(materialArray);
var panoBox = new THREE.Mesh(panoGeometry, panoMaterial);
panoBox.position.z = 0;
panoBox.position.x = 0;
panoBox.position.y = 0;
panoBox.name = "nameOfPANO";
var position = {
x : 0,
y : 0,
z : 0
};
camera[ff].position.z = position.z - 500;
camera[ff].position.x = position.x - 500;
camera[ff].position.y = position.y;
camera[ff].far = 4500;
var cam = new THREE.Object3D();
cam.position.x = position.x;
cam.position.y = position.y;
cam.position.z = position.z;
camera[ff].lookAt(cam);
camera[ff].updateProjectionMatrix();
controls[ff].target.z = position.z;
controls[ff].target.x = position.x;
controls[ff].target.y = position.y;
controls[ff].zoomSpeed = 1.0;
controls[ff].rotateSpeed = 0.5;
controls[ff].minDistance = -5500;
controls[ff].maxDistance = 1500;
controls[ff].noPan = true;
//panoBox.rotation.y = Math.PI / 4;
scene[ff].add(panoBox);
panoBox.rotation.x = Math.PI;
mObject.push(panoBox);
sphereRadius = 30;
//animate();
prepareDesc(_filename[ff], ff);
//functionDone(ff);
//spinner[ff].stop();
} else if (isJPG) {
//displayText (ff, "Loading " + ext[ff] + " file...");
$("#spinText_"+ff+"").html("Loading " + ext[ff] + " file...");
isJPG = true;
typePick = 5;
pickConst = 5;
var callJPG = ff;
var callbackJPG = function (_fff) {
var plane = new THREE.Mesh(new THREE.PlaneBufferGeometry(material.map.image.width, material.map.image.height), material);
plane.overdraw = true;
plane.position.set(0, 0, 0);
plane.geometry.computeBoundingBox();
plane.matrixAutoUpdate = true;
plane.overdraw = true;
plane.castShadow = true;
plane.receiveShadow = true;
plane.name = 'nameOfJPG';
plane.rotateY(Math.PI);
plane.material.side = THREE.DoubleSide;
plane.renderDepth = 1;
//pos = plane.geometry.boundingBox;
plane.geometry.computeBoundingSphere();
var pos = originPosition[_fff] = plane.geometry.boundingBox;
originPosition[_fff].x = pos.min.x + (pos.max.x - pos.min.x) / 2;
originPosition[_fff].y = pos.min.y + (pos.max.y - pos.min.y) / 2;
originPosition[_fff].z = pos.min.z + (pos.max.z - pos.min.z) / 2;
plane.position.x -= originPosition[_fff].x;
plane.position.y -= originPosition[_fff].y;
plane.position.z -= originPosition[_fff].z;
scene[_fff].add(plane);
mObject.push(plane);
sphereRadius = ((pos.max.x - pos.min.x) + (pos.max.y - pos.min.y) + (pos.max.z - pos.min.z)) / 3;
camera[_fff].far = sphereRadius * 7;
camera[_fff].updateProjectionMatrix();
var position = {
x : 0,
y : 0,
z : 0
};
bbox = new THREE.BoundingBoxHelper(plane, hex);
bbox.update();
bbox.visible = false;
scene[_fff].add(bbox);
/*var text = {
x : pos.max.x - pos.min.x,
y : pos.max.y - pos.min.y,
z : 0
};
text.x = text.x.toFixed(2);
text.y = text.y.toFixed(2);
text.z = 0;
addAxis(sphereRadius, text);*/
camera[_fff].position.z = plane.position.z - plane.geometry.boundingSphere.radius * 1.1;
camera[_fff].position.x = plane.position.x;
camera[_fff].position.y = plane.position.y;
var cam = new THREE.Object3D();
cam.position.x = position.x;
cam.position.y = position.y;
cam.position.z = position.z;
camera[_fff].lookAt(cam);
controls[_fff].target.z = position.z;
controls[_fff].target.x = position.x;
controls[_fff].target.y = position.y;
controls[_fff].maxDistance = plane.geometry.boundingSphere.radius * 1.1;
controls[_fff].noRotate = true;
lights[_fff][1].position.z -= 4;
lightPosition.z -= 4;
//addFloor(sphereRadius * 2, 0, - ((pos.max.y - pos.min.y) / 2), 0, _fff);
sphereRadius /= 100;
$("#descForm").data("filename", _filename[_fff]);
animate();
$.ajax({
url : prepareDesc(_filename[_fff], _fff),
success : function () {
spinner[_fff].stop();
functionDone (_fff);
}
});
//filename = preg_replace("/[^a-zA-Z0-9.]/", "", filename);
}
var material;
if (ext[ff] == 'tif' || ext[ff] == 'tiff') {
$.ajax ({
url: "http://www.patrimonium.net/wisski/object3d/tif-to-jpg",
data : {params:"{\"file\":\""+WissKI.object3d.files[ff]+"\"}"},
success: function (result) {
var path = result;
path = path.replace(/\\/g, "");
path = path.replace(/["']/g, "");
path = "http://www.patrimonium.net/" + path;
WissKI.object3d.files[ff] = path;
material = new THREE.MeshLambertMaterial({
map : THREE.ImageUtils.loadTexture(WissKI.object3d.files[ff], THREE.UVMapping, function () {
callbackJPG(callJPG);
}),
side : THREE.DoubleSide,
transparent : true
});
},
error: function () {
console.log("Error");
}
});
}
else
{
material = new THREE.MeshLambertMaterial({
map : THREE.ImageUtils.loadTexture(WissKI.object3d.files[ff], THREE.UVMapping, function () {
callbackJPG(callJPG);
}),
side : THREE.DoubleSide,
transparent : true
});
}
}
}
function createTriangle(_id, coords, _color, _name, _events, _ii, _stringGeom) {
var newColor = new THREE.Color();
newColor.setHex(_color);
var spheres = [];
var material = new THREE.MeshBasicMaterial({
color : newColor,
side : THREE.DoubleSide,
transparent : true,
opacity : 0.5,
depthTest : true,
depthWrite : false,
polygonOffset : true,
polygonOffsetFactor : -4
});
var geo = new THREE.Geometry();
coords = coords.split(" ");
if (coords[coords.length - 1] === '')
coords.pop();
var sphere;
if (isJPG == false)
var tempRadius = sphereRadius / 3;
else
var tempRadius = sphereRadius;
for (var i = 0; i < coords.length; i += 3) {
var vert = new THREE.Vector3(parseFloat(coords[i]), parseFloat(coords[i + 1]), parseFloat(coords[i + 2]));
geo.vertices.push(vert);
sphere = new THREE.Mesh(new THREE.SphereGeometry(tempRadius, 7, 7), new THREE.MeshBasicMaterial({
transparent : true,
opacity : 0.5,
color : (0xffffff - newColor.getHex())
}));
sphere.position.set(vert.x, vert.y, vert.z);
scene[_ii].add(sphere);
spheres.push(sphere);
allSpheres.push(sphere);
}
geo.faces.push(new THREE.Face3(0, 2, 1));
geo.computeFaceNormals();
var triangle = new THREE.Mesh(geo, material);
triangle.name = _name;
triangle.events = _events;
//triangle.desc = _desc;
triangle.stringGeom = _stringGeom;
triangle.idd = _id;
/*triangle.geometry.verticesNeedUpdate = true;
triangle.geometry.normalsNeedUpdate = true;
triangle.geometry.computeFaceNormals();
triangle.geometry.computeVertexNormals();
triangle.geometry.computeBoundingSphere();
triangle.updateMatrix();*/
triangle.geometry.computeBoundingSphere();
scene[_ii].add(triangle);
triangles.push(triangle);
/*sphere = new THREE.Mesh(new THREE.SphereGeometry(triangle.geometry.boundingSphere.radius / 15, 7, 7), new THREE.MeshBasicMaterial({
transparent : true,
color : (0xffffff - _color),
opacity : 0.5
}));
sphere.position.set(triangle.geometry.boundingSphere.center.x, triangle.geometry.boundingSphere.center.y, triangle.geometry.boundingSphere.center.z);
scene.add(sphere);
spheres.push(sphere);*/
var tt = new Triangle(spheres[0].id, spheres[1].id, spheres[2].id, triangle.id);
trObj.push(tt);
spheres = [];
lastIDHoverT = lastIDHover = 0;
}
function createQuad(_id, coords, _color, _name, _events, _ii, _stringGeom) {
var newColor = new THREE.Color();
newColor.setHex(_color);
var spheres = [];
var material = new THREE.MeshBasicMaterial({
color : newColor,
side : THREE.DoubleSide,
transparent : true,
opacity : 0.5,
depthTest : true,
depthWrite : false,
polygonOffset : true,
polygonOffsetFactor : -4
});
var geo = new THREE.Geometry();
coords = coords.split(" ");
if (coords[coords.length - 1] === '')
coords.pop();
var sphere;
if (isJPG == false)
var tempRadius = sphereRadius / 3;
else
var tempRadius = sphereRadius;
for (var i = 0; i < coords.length; i += 3) {
var vert = new THREE.Vector3(parseFloat(coords[i]), parseFloat(coords[i + 1]), parseFloat(coords[i + 2]), parseFloat(coords[i + 3]));
geo.vertices.push(vert);
sphere = new THREE.Mesh(new THREE.SphereGeometry(tempRadius, 7, 7), new THREE.MeshBasicMaterial({
transparent : true,
opacity : 0.5,
color : (0xffffff - newColor.getHex())
}));
sphere.position.set(vert.x, vert.y, vert.z);
scene[_ii].add(sphere);
spheres.push(sphere);
allSpheres.push(sphere);
}
geo.faces.push(new THREE.Face3(0, 1, 2));
geo.faces.push(new THREE.Face3(0, 2, 3));
geo.computeFaceNormals();
var triangle = new THREE.Mesh(geo, material);
triangle.name = _name;
triangle.events = _events;
//triangle.desc = _desc;
triangle.idd = _id;
triangle.stringGeom = _stringGeom;
triangle.geometry.computeBoundingSphere();
scene[_ii].add(triangle);
triangles.push(triangle);
/*sphere = new THREE.Mesh(new THREE.SphereGeometry(triangle.geometry.boundingSphere.radius / 15, 7, 7), new THREE.MeshBasicMaterial({
transparent : true,
color : (0xffffff - _color),
opacity : 0.5
}));
sphere.position.set(triangle.geometry.boundingSphere.center.x, triangle.geometry.boundingSphere.center.y, triangle.geometry.boundingSphere.center.z);
scene.add(sphere);
spheres.push(sphere);*/
var tt = new Quad(spheres[0].id, spheres[1].id, spheres[2].id, spheres[3].id, triangle.id);
trObj.push(tt);
spheres = [];
lastIDHoverT = lastIDHover = 0;
}
function createPolygon(_id, _coords, _faces, _color, _name, _events, _ii, _stringGeom) {
var newColor = new THREE.Color();
newColor.setHex(_color);
var spheres = [];
var tempVert = [];
var material = new THREE.MeshBasicMaterial({
color : newColor,
side : THREE.DoubleSide,
transparent : true,
opacity : 0.5,
depthTest : true,
depthWrite : false,
polygonOffset : true,
polygonOffsetFactor : -4
});
var geo = new THREE.Geometry();
coords = _coords.split(" ");
if (coords[coords.length - 1] === '')
coords.pop();
var faces = _faces.split(" ");
var sphere;
if (isJPG == false)
var tempRadius = sphereRadius / 3;
else
var tempRadius = sphereRadius;
for (var i = 0; i < coords.length - 1; i += 3) {
var vert = new THREE.Vector3(parseFloat(coords[i]), parseFloat(coords[i + 1]), parseFloat(coords[i + 2]));
geo.vertices.push(vert);
sphere = new THREE.Mesh(new THREE.SphereGeometry(tempRadius, 7, 7), new THREE.MeshBasicMaterial({
transparent : true,
opacity : 0.5,
color : (0xffffff - newColor.getHex())
}));
sphere.position.set(vert.x, vert.y, vert.z);
scene[_ii].add(sphere);
spheres.push(sphere);
allSpheres.push(sphere);
tempVert.push(sphere.id);
}
for (var face = 0; face < spheres.length - 2; face++) {
geo.faces.push(new THREE.Face3(0, face + 1, face + 2));
}
geo.computeFaceNormals();
var triangle = new THREE.Mesh(geo, material);
triangle.name = _name;
triangle.events = _events;
//triangle.desc = _desc;
triangle.idd = _id;
triangle.stringGeom = _stringGeom;
triangle.geometry.computeBoundingSphere();
scene[_ii].add(triangle);
triangles.push(triangle);
var tt = new Polygon(tempVert, triangle.id);
trObj.push(tt);
spheres = [];
lastIDHoverT = lastIDHover = 0;
}
function createFaces3(_id, _coords, _faces, _color, _name, _events, _ii, _stringGeom) {
var tempVert = [];
var newColor = new THREE.Color();
newColor.setHex(_color);
var preMesh = new THREE.Geometry();
var faces = _faces.split(" ");
var coords = _coords.split(" ");
if (coords[coords.length - 1] === '')
coords.pop();
if (faces[faces.length - 1] === '')
faces.pop();
for (var ii = 0; ii < coords.length; ii += 3) {
var tempVertex = new THREE.Vector3(parseFloat(coords[ii]), parseFloat(coords[ii + 1]), parseFloat(coords[ii + 2]));
preMesh.vertices.push(tempVertex);
}
for (var ii = 0; ii < faces.length; ii += 3) {
preMesh.faces.push(new THREE.Face3(parseFloat(faces[ii]), parseFloat(faces[ii + 1]), parseFloat(faces[ii + 2])));
}
var redMat = new THREE.MeshBasicMaterial({
color : newColor,
side : THREE.DoubleSide,
transparent : true,
opacity : 0.5,
depthTest : true,
depthWrite : false,
polygonOffset : true,
polygonOffsetFactor : -4
});
var mesh = new THREE.Mesh(preMesh, redMat);
mesh.name = _name;
mesh.events = _events;
mesh.idd = _id;
mesh.stringGeom = _stringGeom;
scene[_ii].add(mesh);
mesh.geometry.computeBoundingSphere();
createdMeshes.push(mesh);
var sphere = new THREE.Mesh(new THREE.SphereGeometry(mesh.geometry.boundingSphere.radius / 15, 7, 7), new THREE.MeshBasicMaterial({
transparent : true,
color : (0xffffff - newColor),
opacity : 0.5
}));
sphere.position.set(mesh.geometry.boundingSphere.center.x, mesh.geometry.boundingSphere.center.y, mesh.geometry.boundingSphere.center.z);
scene[_ii].add(sphere);
createdSpheres.push(sphere);
tempVert.push(sphere.id);
var tt = new Polygon(tempVert, mesh.id);
trObj.push(tt);
spheres = [];
lastIDHoverT = lastIDHover = 0;
}
var readModTime = function (_filename, _ii) {
if (saving == false) {
var file = {};
file.name = _filename;
$.ajax({
url : "http://www.patrimonium.net/wisski/object3d/read-mod-times",
data : {params:"{\"target_obj_file\":\" \\t http://www.patrimonium.net/sites/default/files/"+_filename+"."+ext[_ii]+"\"}"},
success : function (result) {
var changed = false;
var notFound = 0;
var obj = JSON.parse(result);
for (var property in obj) {
if (obj.hasOwnProperty(property)) {
for (var ii = 0; ii < triangles.length; ii++) {
if (property == triangles[ii].idd && triangles[ii].modTime !== obj[property]) {
changed = true;
triangles[ii].modTime = obj[property];
scene[_ii].remove(triangles[ii]);
}
if (property == triangles[ii].idd) {
notFound++;
}
}
for (var ii = 0; ii < createdMeshes.length; ii++) {
if (property == createdMeshes[ii].idd && createdMeshes[ii].modTime !== obj[property]) {
changed = true;
createdMeshes[ii].modTime = obj[property];
scene[_ii].remove(createdMeshes[ii]);
}
if (property == createdMeshes[ii].idd) {
notFound++;
}
}
}
}
if (notFound !== (createdMeshes.length + triangles.length))
changed = true;
if (changed == true) {
displayText (_ii, "Changes in desciptions found");
console.log("Changes in descriptions found");
for (var ii = 0; ii < allSpheres.length; ii++) {
scene[_ii].remove(allSpheres[ii]);
}
for (var ii = 0; ii < trObj.length; ii++) {
for (var name in trObj[ii]) {
var temp = trObj[ii][name];
if (typeof(temp.length) !== 'undefined') {
scene[_ii].remove(scene[_ii].getObjectById(trObj[ii]['id']));
}
}
}
trObj = new Array();
createdMeshes = new Array();
triangles = new Array();
allSpheres = new Array();
lastIDHoverT = lastIDHover = 0;
readDescription(_filename, _ii);
}
},
error : function (response) {
console.log("Could not read description!\n" + response);
}
});
}
}
function readModTimeOnce(_filename, _ii) {
var file = {};
file.name = _filename;
$.ajax({
url : "http://www.patrimonium.net/wisski/object3d/read-mod-times",
data : {params:"{\"target_obj_file\":\" \\t http://www.patrimonium.net/sites/default/files/"+_filename+"."+ext[_ii]+"\"}"},
success : function (result) {
var obj = JSON.parse(result);
for (var property in obj) {
if (obj.hasOwnProperty(property)) {
for (var ii = 0; ii < triangles.length; ii++) {
if (property == triangles[ii].idd) {
triangles[ii].modTime = obj[property];
}
}
for (var ii = 0; ii < createdMeshes.length; ii++) {
if (property == createdMeshes[ii].idd) {
createdMeshes[ii].modTime = obj[property];
}
}
}
}
//lastModTime = new Date(Number(result) * 1000);
},
error : function (response) {
console.log("Could not read description!\n" + response);
}
});
}
function prepareDesc(_filename, _ii) {
//displayText (_ii, "Looking for descriptions...");
//$("#spinText_"+_ii+"").html("Loading descriptions...");
readDescription(_filename, _ii);
setInterval(function () {
readModTime(_filename, _ii)
}, 3000);
}
function readDescription(_filename, _ii) {
var file = {};
file.name = _filename;
jQuery.ajax({
url:"http://www.patrimonium.net/wisski/object3d/read-annotations",
data: {params:"{\"target_obj_file\":\" \\t http://www.patrimonium.net/sites/default/files/"+_filename+"."+ext[_ii]+"\"}"},
success: function (result) {
if (result !== "[]") {
var obj = JSON.parse(result);
var dropID = [];
var dropNames = [];
//displayText (_ii, "Loading new descriptions...");
var counter = 0;
for (key in obj) {
counter++;
}
var key;
var newCounter = 0;
for (key in obj) {
newCounter++;
displayText(_ii, "Loading new descriptions... (" + newCounter + "/" + counter +")");
dropID.push(key);
dropNames.push(obj[key]['name'][0]);
descriptionsID++;
var _type = stringGeom = obj[key]['coords'][0];
var _coords = _type.substring(_type.lastIndexOf("(") + 1,_type.lastIndexOf(")"));
_type = _type.substring(0, _type.indexOf('('));
var _faces = _coords.substring(_coords.lastIndexOf("|") + 1, _coords.length);
_coords = _coords.substring(0, _coords.lastIndexOf("|"));
if (typeof(obj[key]['reference']) !== 'undefined') {
var events = obj[key]['reference'][0];
events = events.split("|");
for (var jj = 0; jj < events.length; jj++) {
events[jj] = events[jj].split("#");
if (events[jj].length < 3)
events.splice(jj, 1);
}
}
switch (_type) {
case 'triangle':
createTriangle(key, _coords, obj[key]['color'][0], obj[key]['name'], events, _ii, stringGeom);
break;
case 'quad':
createQuad(key, _coords, obj[key]['color'][0], obj[key]['name'], events, _ii, stringGeom);
break;
case 'polygon':
createPolygon(key, _coords, _faces, obj[key]['color'][0], obj[key]['name'], events, _ii, stringGeom);
break;
case 'face3':
createFaces3(key, _coords, _faces, obj[key]['color'][0], obj[key]['name'], events, _ii, stringGeom);
break;
case 'face4':
createFaces4(key, _coords, _faces, obj[key]['color'][0], obj[key]['name'], events, _ii, stringGeom);
break;
}
}
if (dropNames.length > 0) {
f3.add(settings, 'Areas', dropNames).onChange(function () {
var found = false;
for (var ii = 0; ii < triangles.length && found == false; ii++) {
if (triangles[ii].name == settings.Areas) {
newEdges(triangles[ii]);
found = true;
}
}
for (var ii = 0; ii < createdMeshes.length && found == false; ii++) {
if (createdMeshes[ii].name == settings.Areas) {
newEdges(createdMeshes[ii]);
found = true;
}
}
});
}
readModTimeOnce(_filename, _ii);
}
else {
displayText (_ii, "Descriptions not found");
}
}
});
}
function newEdges(_obj) {
if (typeof(egh.id) == 'undefined') {
egh = new THREE.WireframeHelper(_obj, new THREE.Color(0xffffff - _obj.material.color.getHex()));
egh.material.linewidth = 20;
egh.material.side = THREE.DoubleSide;
egh.material.transparent = true;
egh.material.depthTest = true;
egh.material.depthWrite = false;
egh.material.polygonOffset = true;
egh.material.polygonOffsetFactor = -4;
_obj.material.opacity = 1;
lastPickedObj = _obj;
scene[whichScene].add(egh);
} else {
scene[whichScene].remove(scene[whichScene].getObjectById(egh.id));
lastPickedObj.material.opacity = 0.5;
egh = new THREE.WireframeHelper(_obj, new THREE.Color(0xffffff - _obj.material.color.getHex()));
egh.material.linewidth = 20;
egh.material.side = THREE.DoubleSide;
egh.material.transparent = true;
egh.material.depthTest = true;
egh.material.depthWrite = false;
egh.material.polygonOffset = true;
egh.material.polygonOffsetFactor = -4;
_obj.material.opacity = 1;
scene[whichScene].add(egh);
lastPickedObj = _obj;
//egh = '';
}
}
/*var png = new dPNG(WissKI.object3d.files[0]);
//png.loadModel();
png.loadModell(function (ooo) {
//var temporary = new THREE.Mesh(ooo);
particles = new THREE.Geometry();
var values_size = attributes.size.value;
var values_color = attributes.customColor.value;
//ooo.computeBoundingBox();
var pos = new THREE.Box3().setFromObject(ooo);
sphereRadius = ((pos.max.x-pos.min.x) + (pos.max.y-pos.min.y) + (pos.max.z-pos.min.z))/3;
sphereRadius /= 70;
var position = {x: (pos.min.x+pos.max.x)/2, y: (pos.min.y+pos.max.y)/2, z: (pos.min.z+pos.max.z)/2};
WissKI.object3d.camPosition = position;
camera.position.z = position.z;
camera.position.x = position.x - 400;
camera.position.y = position.y + 150;
var cam = new THREE.Object3D();
cam.position.x = position.x;
cam.position.y = position.y;
cam.position.z = position.z;
camera.lookAt(cam);
controls.target.z = position.z;
controls.target.x = position.x;
controls.target.y = position.y;
for (var u = 0; u < ooo.geometry.vertices.length; u++){
particles.vertices.push(ooo.geometry.vertices[u]);
values_size[u] = sphereRadius;
values_color[u] = new THREE.Color().setRGB( 0.9, 0.2, 0.2 );
attributes.alpha.value[u] = 0.7;
}
//console.log(particles.vertices.length);
particles.name = 'nameOfJSON';
WissKI.object3d.mainObject.push(particles);
mObject.push(particles);
particleSystem = new THREE.PointCloud(
particles,
pMaterial);
particleSystem.visible = true;
particlesObjects.push(particleSystem);
particleSystem.matrixAutoUpdate = true;
particleSystem.updateMatrix();
scene.add(particleSystem);
});*/
if (wholePano != 6) {
for (var ii = 0; ii < _filename.length; ii++) {
//STATS window (FPS)
if (multi == false) {
ii = findIDfilename(_filename[ii]);
}
stats[ii] = new Stats();
stats[ii].domElement.style.position = 'relative';
stats[ii].domElement.style.top = '-' + $("#stats").height() + 'px';
//stats.domElement.style.right = '-110%';
stats[ii].domElement.style.zIndex = 100;
container[ii].appendChild(stats[ii].domElement);
}
} else if (wholePano == 6) {
//STATS window (FPS)
stats[0] = new Stats();
stats[0].domElement.style.position = 'relative';
stats[0].domElement.style.top = '-' + $("#stats").height() + 'px';
//stats.domElement.style.right = '-110%';
stats[0].domElement.style.zIndex = 100;
container[0].appendChild(stats[0].domElement);
}
function clearVariables() {
container = new Array();
stats = new Array();
object = null;
base = null;
canvasWidth = new Array();
canvasHeight = new Array();
camera = new Array();
controls = new Array();
scene = new Array();
renderer = new Array();
cross = null;
canvas = new Array();
whichScene = 0;
ccc = null;
maxRadius = 0;
objectPosition = {
x : 0,
y : 0,
z : 0
};
objectScale = 1;
typePick = 3;
pickConst = 3;
raycaster = new THREE.Raycaster();
raycasterT = new THREE.Raycaster();
mouseDown = new THREE.Vector2();
mouseUp = new THREE.Vector2();
raycasterr = new THREE.Raycaster();
pickedVert = [];
vertexx = new THREE.Vector3();
spheres = [];
triangles = [];
mObject = new Array();
mObjectID = 0;
polygonTab = [];
clickCount = 0;
mouse = new THREE.Vector2();
INTERSECTED = null;
pickVertices = false;
particleSystem = new THREE.PointCloud();
newSize = 1;
raycasterMove = new THREE.Raycaster();
particlesObjects = [];
sphereRadius = 1;
trObj = [];
allSpheres = [];
attached = '';
transform = null;
floorID;
axisID;
directionalLight;
lightPosition = {
x : 0,
y : 0,
z : 0
};
isJSON = false;
edgesArray = [];
originPosition;
pickedFaces = [];
pickedFacesID = [];
facesSpheres = [];
faceColor = new THREE.Color(0xff0000);
typePickingFaces = 0;
createdMeshes = [];
createdSpheres = [];
intersectsMeshes = [];
dragMouse = false;
rect = {};
floors = new Array();
origins = new Array();
texts = new Array();
bboxes = new Array();
sceneObjects = new Array();
}
if (typeof (gui) == 'undefined' ) {
//3D MENU
settings = {
//Title: "change, collapse & play!",
Scale : 1,
PosX : 0,
PosY : 0,
PosZ : 0,
lightPosX : 0,
lightPosY : 0,
lightPosZ : 0,
lightIntensity : 0.1,
Rotate : rotateObject,
Speed : rotateSpeed,
Wireframe : false,
DoubleSided : true,
EdgesHelper : 0,
Type : pickConst,
Areas : areas,
PickVertices : pickVertices,
VertexSize : sphereRadius,
BoundingBox : false,
Labels : true,
Descriptions : true,
Display : _filename,
Material: sceneMaterials,
SaveMTL: function () { saveMTL(sceneMaterials);}
};
gui = new dat.GUI({
autoPlace : false
});
//li.domElement.style.list-style-type = 'none';
gui.domElement.style.left = '-9px';
gui.domElement.style.top = '0px';
gui.domElement.style.zIndex = 100;
//gui.domElement.style.padding = "5 0";
gui.domElement.style.position = 'absolute';
//gui.domElement.style.position = 'fixed';
//for (var ii = 0; ii < container.length; ii++)
container[mainID].appendChild(gui.domElement);
if (isJPG == false || is3D == true) {
var f4 = gui.addFolder('Lightning');
f4.add(settings, 'lightPosX', -lightPosition.x - 10, lightPosition.x + 10).name('Position X').onChange(function () {
for (var ii = 0; ii < lights.length; ii++) {
lights[ii][1].position.x = lightPosition.x = settings.lightPosX;
//directionalLight.position.x = lightPosition.x = settings.lightPosX;
}
});
f4.add(settings, 'lightPosY', -lightPosition.y - 5, lightPosition.y + 5).name('Position Y').onChange(function () {
for (var ii = 0; ii < lights.length; ii++)
lights[ii][1].position.y = lightPosition.y = settings.lightPosY;
//directionalLight.position.y = lightPosition.y = settings.lightPosY;
});
f4.add(settings, 'lightPosZ', -lightPosition.z - 10, lightPosition.z + 10).name('Position Z').onChange(function () {
for (var ii = 0; ii < lights.length; ii++)
lights[ii][1].position.z = lightPosition.z = settings.lightPosZ;
//directionalLight.position.z = lightPosition.z = settings.lightPosZ;
});
f4.add(settings, 'lightIntensity', 0, 5).name('Intensity').onChange(function () {
for (var ii = 0; ii < lights.length; ii++)
lights[ii][1].intensity = settings.lightIntensity;
//directionalLight.intensity = settings.lightIntensity;
});
}
//}
//if (_filename.length == 1) {
f3 = gui.addFolder('Drawing');
f3.add(settings, 'Type', {
Triangle : 3,
Quad : 4,
Polygon : 5
}).onChange(function () {
pickConst = settings.Type;
typePick = pickConst;
if (spheres.length > 0)
for (var i = 0; i < spheres.length; i++) {
scene[whichScene].remove(scene[whichScene].getObjectById(spheres[i].id));
}
spheres = [];
pickedVert = [];
});
if (isJPG == false || is3D == true) {
f3.add(settings, 'EdgesHelper', {
Disabled : 0,
Tri : 1,
Quad_beta : 2
}).name('Picking by face').onChange(function () {
typePickingFaces = settings.EdgesHelper;
if (typePickingFaces == 1 || typePickingFaces == 2) {
if (isJSON) {
for (var oo = 0; oo < mObject.length; oo++) {
edges = new THREE.WireframeHelper(mObject[oo], 0x00ff00);
scene[whichScene].add(edges);
edgesArray.push(edges.id);
}
} else if (isDAE) {
for (var ii = 0; mObject[ii].type !== 'Group' && ii < mObject.length; ii++) {
edges = new THREE.WireframeHelper(mObject[ii], 0x00ff00);
scene[whichScene].add(edges);
edgesArray.push(edges.id);
}
}
else {
for (var ii = 0; ii < mObject.length; ii++) {
for (var jj = 0; jj < mObject[ii].children.length; jj++) {
if (mObject[ii].children[jj].type !== 'Object3D') {
edges = new THREE.WireframeHelper(mObject[ii].children[jj], 0x00ff00);
scene[whichScene].add(edges);
edgesArray.push(edges.id);
}
else {
for (var kk = 0; kk < mObject[ii].children[jj].children.length; kk++) {
edges = new THREE.WireframeHelper(mObject[ii].children[jj].children[kk], 0x00ff00);
scene[whichScene].add(edges);
edgesArray.push(edges.id);
}
}
}
}
}
} else {
for (var ii = 0; ii < edgesArray.length; ii++)
scene[whichScene].remove(scene[whichScene].getObjectById(edgesArray[ii]));
}
});
f3.add(settings, 'PickVertices').name('Vertices Draw').onChange(function () {
pickVertices = settings.PickVertices;
particleSystem.visible = pickVertices;
});
f3.add(settings, 'VertexSize', 0, sphereRadius * 4).name('Vertex Size').onChange(function () {
newSize = settings.VertexSize;
for (var u = 0; u < values_size.length; u++)
values_size[u] = newSize;
attributes.size.value = values_size;
attributes.size.needsUpdate = true;
});
}
//}
if (isJPG == false || is3D == true) {
f5 = gui.addFolder('Materials');
f5.add(settings, 'Wireframe').name('Wireframe').onChange(function () {
for (var ii = 0; ii < mObject.length; ii++) {
if (isJSON || isDAE) {
for (var jj = 0; (typeof(mObject[ii].material) !== 'undefined') && (typeof(mObject[ii].material.materials) !== 'undefined') && jj < mObject[ii].material.materials.length; jj++) {
mObject[ii].material.materials[jj].wireframe = settings.Wireframe;
}
} else {
for (var jj = 0; jj < mObject[ii].children.length; jj++) {
if (mObject[ii].children[jj].type !== 'Object3D') {
mObject[ii].children[jj].material.wireframe = settings.Wireframe;
}
else {
for (var kk = 0; kk < mObject[ii].children[jj].children.length; kk++)
mObject[ii].children[jj].children[kk].material.wireframe = settings.Wireframe;
}
}
}
}
});
f5.add(settings, 'DoubleSided').name('Double sided').onChange(function () {
for (var ii = 0; ii < mObject.length; ii++) {
if (isJSON || isDAE) {
for (var jj = 0; (typeof(mObject[ii].material) !== 'undefined') && (typeof(mObject[ii].material.materials) !== 'undefined') && jj < mObject[ii].material.materials.length; jj++) {
if (settings.DoubleSided)
mObject[ii].material.materials[jj].side = THREE.DoubleSide;
else
mObject[ii].material.materials[jj].side = THREE.SingleSide;
}
} else {
for (var jj = 0; jj < mObject[ii].children.length; jj++) {
if (typeof (mObject[ii].children[jj].material) !== 'undefined') {
if (settings.DoubleSided)
mObject[ii].children[jj].material.side = THREE.DoubleSide;
else
mObject[ii].children[jj].material.side = THREE.SingleSide;
}
}
}
}
});
function setMTLfromPicker () {
if ($("#MTLedit").dialog("isOpen")) {
var _str = '#MTL file generated by Daniel\'s module
';
var lastName = materialName;
for (var ii = 0; ii < OBJmaterials.length; ii++) {
if (OBJmaterials[ii].key == "newmtl") {_str +="
" + OBJmaterials[ii].key + " " + OBJmaterials[ii].value + " "; _str += "
"; lastName = OBJmaterials[ii].value}
else {
switch (OBJmaterials[ii].key) {
case "ka":
var search = true;
for (var jj = 0; jj < sceneMaterials.length && search; jj++) {
if (sceneMaterials[jj].name == lastName) {
search = false;
if (sceneMaterials[jj].changed && typeof (sceneMaterials[jj].ka) !== 'undefined')
_str += "
ka " + sceneMaterials[jj].ka.r.toFixed(6) + " " + sceneMaterials[jj].ka.g.toFixed(6) + " " + sceneMaterials[jj].ka.b.toFixed(6) + "
";
else
_str += "
"+OBJmaterials[ii].key + " " + OBJmaterials[ii].value + "
";
}
}
break;
case "kd":
var search = true;
for (var jj = 0; jj < sceneMaterials.length && search; jj++) {
if (sceneMaterials[jj].name == lastName) {
search = false;
if (sceneMaterials[jj].changed && typeof (sceneMaterials[jj].kd) !== 'undefined')
_str += "
kd " + sceneMaterials[jj].kd.r.toFixed(6) + " " + sceneMaterials[jj].kd.g.toFixed(6) + " " + sceneMaterials[jj].kd.b.toFixed(6) + "
";
else
_str += "
"+OBJmaterials[ii].key + " " + OBJmaterials[ii].value + "
";
}
}
break;
case "ks":
var search = true;
for (var jj = 0; jj < sceneMaterials.length && search; jj++) {
if (sceneMaterials[jj].name == lastName) {
search = false;
if (sceneMaterials[jj].changed && typeof (sceneMaterials[jj].ks) !== 'undefined')
_str += "
ks " + sceneMaterials[jj].ks.r.toFixed(6) + " " + sceneMaterials[jj].ks.g.toFixed(6) + " " + sceneMaterials[jj].ks.b.toFixed(6) + "
";
else
_str += "
"+OBJmaterials[ii].key + " " + OBJmaterials[ii].value + "
";
}
}
break;
default:
_str += OBJmaterials[ii].key + " " + OBJmaterials[ii].value + "
";
break;
}
}
}
tinymce.get('modalTextarea').setContent(_str);
//$("#MTLedit textarea").val(_str);
}
}
var FizzyText = function() {
this.Ka = "#1E00FF";
this.Kd = "#00FF1E";
this.Ks = "#00D1FF";
};
textColors = new FizzyText();
f5.addColor(textColors, 'Ka').onChange( function( colorValue )
{
colorValue=colorValue.replace( '#','0x' );
var colorObject = new THREE.Color() ;
colorObject.setHex(colorValue);
handleMaterials(colorObject, "ka", materialName);
setMTLfromPicker ();
});
f5.addColor(textColors, 'Kd').onChange( function( colorValue )
{
colorValue=colorValue.replace( '#','0x' );
var colorObject = new THREE.Color() ;
colorObject.setHex(colorValue);
handleMaterials(colorObject, "kd", materialName);
setMTLfromPicker ();
});
f5.addColor(textColors, 'Ks').onChange( function( colorValue )
{
colorValue=colorValue.replace( '#','0x' );
var colorObject = new THREE.Color() ;
colorObject.setHex(colorValue);
handleMaterials(colorObject, "ks", materialName);
setMTLfromPicker ();
});
/*var matLabels = new Array();
matLabels.push("all");
for (var ii = 0; ii < sceneMaterials.length; ii++)
if (sceneMaterials[ii].name !== '')
matLabels.push(sceneMaterials[ii].name);
materialF5 = f5.add(settings, 'Material', matLabels).onChange(function () {
materialName = settings.Material;
var search = true;
for (var ii = 0; ii < sceneMaterials.length && search; ii++) {
if (sceneMaterials[ii].name == materialName)
{
search = false;
var tempColor = setGuiColors(sceneMaterials[ii].name);
textColors.Ka = "#" + tempColor.ka.getHexString();
textColors.Kd = "#" + tempColor.kd.getHexString();
textColors.Ks = "#" + tempColor.ks.getHexString();
for (var i = 0; i < gui.__folders.Materials.__controllers.length; i++) {
if (typeof(gui.__folders.Materials.__controllers[i].updateDisplay()) == 'function')
gui.__folders.Materials.__controllers[i].updateDisplay();
}
}
}
});
f5.add(settings, 'SaveMTL').name("Save MTL");*/
gui.add(settings, 'Labels').name('Labels').onChange(function () {
if (texts.length > 0) {
for (var i = 0; i < texts.length; i++) {
for (var j = 0; j < texts[i].length; j++) {
texts[i][j].visible = settings.Labels;
}
}
for (var i = 0; i < origins.length; i++) {
origins[i].visible = settings.Labels;
}
for (var i = 0; i < floors.length; i++) {
floors[i].visible = settings.Labels;
}
for (var i = 0; i < filenamesText.length; i++) {
filenamesText[i].visible = settings.Labels;
}
}
});
}
gui.add(settings, 'Descriptions').name('Descriptions').onChange(function () {
if (triangles.length > 0) {
for (var i = 0; i < triangles.length; i++)
triangles[i].visible = settings.Descriptions;
}
if (createdMeshes.length > 0) {
for (var i = 0; i < createdMeshes.length; i++)
createdMeshes[i].visible = settings.Descriptions;
}
if (createdSpheres.length > 0) {
for (var i = 0; i < createdSpheres.length; i++)
createdSpheres[i].visible = settings.Descriptions;
}
if (spheres.length > 0) {
for (var i = 0; i < spheres.length; i++)
spheres[i].visible = settings.Descriptions;
}
if (allSpheres.length > 0) {
for (var i = 0; i < allSpheres.length; i++)
allSpheres[i].visible = settings.Descriptions;
}
});
gui.add(settings, 'BoundingBox').name('BoundingBox').onChange(function () {
for (var ii = 0; ii < bboxes.length; ii++)
bboxes[ii].visible = settings.BoundingBox;
});
var displayFile = new Array();
/*if (filename.length > 1)
displayFile.push("-----");*/
for (var oo = 0; oo < filename.length; oo++)
displayFile.push(filename[oo]);
gui.add(settings, 'Display', displayFile).onChange(function () {
cancelAnimationFrame(idAnimation);
for (var ii = 0; ii < edgesArray.length; ii++)
scene[mainID].remove(scene[mainID].getObjectById(edgesArray[ii]));
OBJmaterials = new Array();
var newFile = new Array();
newFile = filename.slice();
$("#object3d-viewer").html("");
renderer[mainID].domElement.addEventListener('dblclick', null, false); //remove listener to render
scene[mainID] = null;
camera[mainID] = null;
controls[mainID] = null;
empty(container[mainID]);
sceneMaterials = new Array();
edgesArray = new Array();
mObject = new Array();
function empty(elem) {
while (elem.lastChild) elem.removeChild(elem.lastChild);
}
if (settings.Display != "multi") {
newFile = new Array();
newFile[0] = settings.Display;
multi = false;
var search = true;
for (var ii = 0; ii < filename.length && search; ii++) {
if (filename[ii] == settings.Display) {
search = false;
var _filename = new Array();
_filename.push(filename[ii]);
var id = findIDfilename(_filename[0]);
$('#object3d-viewer-canvas_'+id).show();
$("#descForm").data("filename", filename[id]);
$.ajax({
url : initMain(_filename),
success : function () {
container[mainID].appendChild(gui.domElement);
floorsF();
if (wholePano == 6) {
spinner[0].stop();
animate();
functionDone(0);
}
for (var iii = 0; iii < texts.length; iii++) {
for (var jj = 0; jj < texts[iii].length; jj++) {
texts[iii][jj].lookAt(camera[id].position);
}
}
}
});
}
}
/*$('#object3d-viewer-canvas_' + ii).show();
$('#object3d-viewer-canvas_' + ii).css('width', $("#object3d-viewer").width());
$('#object3d-viewer-canvas_' + ii).css('height', $("#object3d-viewer").height());
$("#object3d-viewer-canvas_" + ii).css("top", 0);
$("#object3d-viewer-canvas_" + ii).css("left", 0);
multi = false;
canvas[ii] = (document.getElementById('object3d-viewer-canvas_' + ii));
var cc = $('#object3d-viewer-canvas_' + ii);
var viewportWidth = $("#object3d-viewer").width();
var viewportHeight = $("#object3d-viewer").height();
canvasWidth[ii] = viewportWidth;
canvasHeight[ii] = viewportHeight;
canvas[ii].setAttribute("width", canvasWidth[ii]);
canvas[ii].setAttribute("height", canvasHeight[ii]);
renderer[ii].setClearColor(0xffffff, 100);
renderer[ii].setSize(canvasWidth[ii], canvasHeight[ii]);
container[ii] = document.getElementById('object3d-viewer-canvas_' + ii);
container[ii].appendChild(renderer[ii].domElement);
camera[ii].fov = 60;
camera[ii].aspect = canvasWidth[ii] / canvasHeight[ii];
camera[ii].updateProjectionMatrix();
whichScene = ii;
container[ii].appendChild(gui.domElement);*/
//animate();
//}
} else {
newFile = new Array();
newFile[0] = settings.Display;
multi = true;
//$('#object3d-viewer-canvas_'+ii).show();
$("#descForm").data("filename", filename[ii]);
$.ajax({
url : initMain(filename),
success : function () {
floorsF();
if (wholePano == 6) {
spinner[0].stop();
animate();
functionDone(0);
}
for (var ii = 0; ii < texts.length; ii++) {
for (var jj = 0; jj < texts[ii].length; jj++) {
texts[ii][jj].lookAt(camera[ii].position);
}
}
}
});
/*for (var ii = 0; ii < container.length; ii++) {
$('#object3d-viewer-canvas_' + ii).hide();
$('#object3d-viewer-canvas_' + ii).html("");
}
ww = $('#object3d-viewer').width();
hh = $('#object3d-viewer').height();
widthW = new Array();
heightH = new Array();
heightH[0] = hh;
widthW[0] = ww / 2;
var offX = 0;
var offY = 0;
initMain(filename);*/
/*for (var ii = 0; ii < filename.length; ii++) {
widthW[ii] = ww / 2;
heightH[ii + 1] = hh / 2;
$('#object3d-viewer-canvas_' + ii).css("width", widthW[ii]);
$('#object3d-viewer-canvas_' + ii).css("height", heightH[ii]);
$('#object3d-viewer-canvas_' + ii).show();
if (ii % 2 == 0) {
$("#object3d-viewer-canvas_" + ii).css("left", offX);
} else {
offX += widthW[ii];
$("#object3d-viewer-canvas_" + ii).css("left", offX);
}
if (ii % 3 == 0) {
$("#object3d-viewer-canvas_" + ii).css("top", offY);
} else {
$("#object3d-viewer-canvas_" + ii).css("top", offY);
offY += heightH[ii];
}
multi = true;
canvas[ii] = (document.getElementById('object3d-viewer-canvas_' + ii));
var cc = $('#object3d-viewer-canvas_' + ii);
viewportWidth = widthW[ii];
viewportHeight = heightH[ii];
canvasWidth[ii] = viewportWidth;
canvasHeight[ii] = viewportHeight;
canvas[ii].setAttribute("width", canvasWidth[ii]);
canvas[ii].setAttribute("height", canvasHeight[ii]);
renderer[ii].setClearColor(0xffffff, 100);
renderer[ii].setSize(canvasWidth[ii], canvasHeight[ii]);
container[ii] = document.getElementById('object3d-viewer-canvas_' + ii);
container[ii].appendChild(renderer[ii].domElement);
camera[ii].fov = 60;
camera[ii].aspect = canvasWidth[ii] / canvasHeight[ii];
camera[ii].updateProjectionMatrix();
whichScene = ii;
container[0].appendChild(gui.domElement);
animate();
}*/
}
});
//if (isJPG == true)
gui.close();
}
loadCSS("/sites/all/libraries/jquery-ui/themes/base/jquery-ui.css");
loadCSS("/sites/all/modules/wisski_object3d/desc.css");
//loadCSS("/sites/all/libraries/toastr/toastr.css");
window.addEventListener('resize', onWindowResize, false);
window.addEventListener('mousemove', onWindowMouseMove, false);
if (multi)
for (var ii = 0; ii < container.length; ii++) {
container[ii].addEventListener('mouseup', onDocumentMouseUp, false);
container[ii].addEventListener('mousedown', onDocumentMouseDown, false);
container[ii].addEventListener('mousemove', onDocumentMouseMove, false);
container[ii].addEventListener('dblclick', onDocumentMouseDouble, false);
}
else {
container[mainID].addEventListener('mouseup', onDocumentMouseUp, false);
container[mainID].addEventListener('mousedown', onDocumentMouseDown, false);
container[mainID].addEventListener('mousemove', onDocumentMouseMove, false);
container[mainID].addEventListener('dblclick', onDocumentMouseDouble, false);
}
document.addEventListener('keyup', onDocumentKeyUp, false);
var old_alpha = 0;
var offset = new Array();
if (multi)
for (var ii = 0; ii < scene.length; ii++) {
offset[ii] = $('#object3d-viewer-canvas_' + ii).offset();
}
else {
offset[mainID] = $('#object3d-viewer-canvas_' + mainID).offset();
}
var lastIDHover = 0;
var lastIDHoverT = 0;
var lastScene = null;
function onWindowMouseMove(event) {
if ($(event.target).is("CANVAS")) {}
else if (lastScene != null && multi) {
$(lastScene).removeClass('borderRed').addClass('borderGray');
lastScene = null;
}
}
function onDocumentMouseMove(event) {
if ($(event.target).is("CANVAS")) {
event.preventDefault();
whichScene = $(event.target).context.offsetParent.id;
whichScene = whichScene.substr(whichScene.indexOf("_") + 1);
if (lastScene != whichScene && multi) {
$(lastScene).removeClass('borderRed').addClass('borderGray');
$(event.target).removeClass('borderGray').addClass('borderRed');
lastScene = $(event.target);
}
if (event.which === 1) {
for (var ii = 0; ii < lights.length; ii++) {
lights[ii][1].position.x = lightPosition.x = camera[mainID].position.x;
lights[ii][1].position.y = lightPosition.y = camera[mainID].position.y;
lights[ii][1].position.z = lightPosition.z = camera[mainID].position.z;
}
}
mouse.x = ((event.clientX - offset[whichScene].left) / canvasWidth[whichScene]) * 2 - 1;
mouse.y = - ((event.clientY - (offset[whichScene].top - document.body.scrollTop)) / (canvasHeight[whichScene])) * 2 + 1;
if (typeof(texts[whichScene]) != 'undefined') {
for (var jj = 0; jj < texts[whichScene].length; jj++) {
texts[whichScene][jj].lookAt(camera[whichScene].position);
}
}
if (pickVertices) {
raycasterMove.setFromCamera(mouse, camera[whichScene]);
intersects = raycasterMove.intersectObjects(particlesObjects);
if (intersects.length > 0) {
if (INTERSECTED != intersects[0].index) {
attributes.alpha.value[INTERSECTED] = 0.7;
attributes.size.value[INTERSECTED] = newSize;
//console.log(particlesObjects[0].geometry.vertices[intersects[ 0 ].index]);
INTERSECTED = intersects[0].index;
attributes.size.value[INTERSECTED] = newSize * 2;
attributes.size.needsUpdate = true;
attributes.alpha.value[INTERSECTED] = 1.0;
attributes.alpha.needsUpdate = true;
} else if (INTERSECTED !== null) {
attributes.size.value[INTERSECTED] = newSize;
attributes.size.needsUpdate = true;
attributes.alpha.value[INTERSECTED] = 0.7;
attributes.alpha.needsUpdate = true;
INTERSECTED = null;
}
}
} else {
if (settings.Descriptions && (createdMeshes.length !== 0 || triangles.length !== 0)) {
raycasterr.setFromCamera(mouse, camera[whichScene]);
var intersectsMeshes = raycasterr.intersectObjects(createdMeshes);
var intersectsTriangles = raycasterr.intersectObjects(triangles);
if (intersectsMeshes.length > 0) {
if (lastIDHover !== intersectsMeshes[0].object.id) {
scene[whichScene].getObjectById(intersectsMeshes[0].object.id).material.opacity = 1.0;
addDescription(event, intersectsMeshes[0]);
/*$("#tooltip").dialog({position:[ event.clientX + 20, event.clientY + 20]});
var strEvents = '';
if (typeof(intersectsMeshes[0].object.events) !== 'undefined') {
for (var j = 0; j < intersectsMeshes[0].object.events.length; j++) {
strEvents += intersectsMeshes[0].object.events[j]['@attributes']['name'];
}
strEvents = ("
Events: ").concat(strEvents);
}
$("#tooltip").html("
Name: " + intersectsMeshes[0].object.name + "
" + strEvents);
$("#tooltip").dialog("open");*/
searchSpheresInMeshes(intersectsMeshes[0].object.id, 1);
if (lastIDHover !== 0) {
scene[whichScene].getObjectById(lastIDHover).material.opacity = 0.5;
if (typeof(egh.id) === 'undefined')
$("#tooltip").dialog("close");
searchSpheresInMeshes(lastIDHover, 2);
}
lastIDHover = intersectsMeshes[0].object.id;
}
} else if (lastIDHover !== 0) {
searchSpheresInMeshes(lastIDHover, 2);
scene[whichScene].getObjectById(lastIDHover).material.opacity = 0.5;
if (typeof(egh.id) === 'undefined')
$("#tooltip").dialog("close");
lastIDHover = 0;
}
if (intersectsTriangles.length > 0) {
if (lastIDHoverT !== intersectsTriangles[0].object.id) {
scene[whichScene].getObjectById(intersectsTriangles[0].object.id).material.opacity = 1.0;
addDescription(event, intersectsTriangles[0]);
/*$("#tooltip").dialog({position:[ event.clientX + 20, event.clientY + 20]});
var strEvents = '';
if (typeof(intersectsTriangles[0].object.events) !== 'undefined') {
for (var j = 0; j < intersectsTriangles[0].object.events.length; j++) {
strEvents += intersectsTriangles[0].object.events[j]['@attributes']['name'];
}
strEvents = ("
Events: ").concat(strEvents);
}
//$("#tooltip").dialog("option", "title", ("Entry no. " + intersectsTriangles[0].object.id));
$("#tooltip").html("
Name: " + intersectsTriangles[0].object.name + "
" + strEvents);
$("#tooltip").dialog("open");*/
if (lastIDHoverT !== 0) {
scene[whichScene].getObjectById(lastIDHoverT).material.opacity = 0.5;
if (typeof(egh.id) === 'undefined')
$("#tooltip").dialog("close");
}
lastIDHoverT = intersectsTriangles[0].object.id;
}
} else if (lastIDHoverT !== 0) {
scene[whichScene].getObjectById(lastIDHoverT).material.opacity = 0.5;
if (typeof(egh.id) === 'undefined')
$("#tooltip").dialog("close");
lastIDHoverT = 0;
}
}
}
}
}
function addDescription(_event, _intersects) {
$("#tooltip").dialog({
position : [_event.clientX + 20, _event.clientY + 20]
});
var strEvents = '';
var editDesc = '';
if (typeof(_intersects.object.events) !== 'undefined') {
strEvents += "
";
editDesc += "
";
for (var j = 0; j < _intersects.object.events.length; j++) {
var encodedUri = encodeURIComponent(_intersects.object.events[j][1]);
strEvents += ("
");
editDesc += ("
");
//strEvents += _intersects.object.events[j]['@attributes']['name'];
}
strEvents += "
";
editDesc += "
";
strEvents = ("
Activity: ").concat(strEvents);
}
$("#tooltip").html("
Name: " + _intersects.object.name + "
" + strEvents);
if (typeof(_intersects.object.events) !== 'undefined') {
for (var j = 0; j < _intersects.object.events.length; j++) {
var encodedUri = encodeURIComponent(_intersects.object.events[j][1]);
var elem = $("#item_" + encodedUri);
//elem.ttip_set();
}
}
editedObject = {
object : _intersects.object,
item : editDesc
};
$("#tooltip").append("
");
$("#tooltip").dialog("open");
//var elem = $("
").appendTo($('#wki-data-item')); // this is your annotation html element
//elem.append("
");
}
function onDocumentKeyUp(event) {
if (event.which === 27 || event.which === 13) {
if (attached !== '') {
transform.detach(attached);
controls[whichScene].enabled = true;
scene[whichScene].remove(transform);
searchSpheres(attached.id);
attached = '';
}
}
}
function onDocumentMouseDouble(event) {
if (pickConst == 5) {
event.preventDefault();
clickCount = 2;
var geo = new THREE.Geometry();
var tempVert = [];
var strSave = '';
var strFaces = '';
for (var aa = 0; aa < pickedVert.length; aa++) {
geo.vertices.push(pickedVert[aa]);
tempVert.push(spheres[aa].id);
strSave += pickedVert[aa].x + " " + pickedVert[aa].y + " " + pickedVert[aa].z + " ";
}
for (var face = 0; face < pickedVert.length - 2; face++) {
geo.faces.push(new THREE.Face3(0, face + 1, face + 2));
strFaces += 0 + " " + (face + 1) + " " + (face + 2) + " ";
}
if (strSave[strSave.length - 1] === '')
strSave.pop();
if (strFaces[strFaces.length - 1] === '')
strFaces.pop();
var _color = new THREE.Color(Math.random() * 0xffffff);
var redMat = new THREE.MeshBasicMaterial({
color : _color,
side : THREE.DoubleSide,
transparent : true,
opacity : 0.5,
depthTest : true,
depthWrite : false,
polygonOffset : true,
polygonOffsetFactor : -4
});
var polygon = new THREE.Mesh(geo, redMat);
scene[whichScene].add(polygon);
var tt = new Polygon(tempVert, polygon.id);
trObj.push(tt);
//triangles.push(polygon);
pickedVert = [];
spheres = [];
$("#descForm").data("type", "polygon");
$("#descForm").data("color", _color.getHex().toString(16));
$("#descForm").data("coords", strSave);
$("#descForm").data("faces", strFaces);
$("#descForm").dialog("option", "title", ("Description of entry no. " + polygon.id));
clearEvents();
lastAddedObject = {
"object" : polygon,
"tt" : tt
};
readID(_filename[0]);
$("#descForm").dialog("open");
}
}
function onDocumentMouseDown(event) {
if ($(event.target).is("CANVAS")) {
event.preventDefault();
clickCount = 1;
whichScene = $(event.target).context.offsetParent.id;
whichScene = whichScene.substr(whichScene.indexOf("_") + 1);
var offset = $('#object3d-viewer-canvas_' + whichScene).offset();
mouseDown.x = ((event.clientX - offset.left) / canvasWidth[whichScene]) * 2 - 1;
mouseDown.y = - ((event.clientY - (offset.top - document.body.scrollTop)) / (canvasHeight[whichScene])) * 2 + 1;
container[whichScene].style.cursor = 'move';
dragMouse = true;
}
}
function onDocumentMouseUp(event) {
if ($(event.target).is("CANVAS")) {
event.preventDefault();
whichScene = $(event.target).context.offsetParent.id;
whichScene = whichScene.substr(whichScene.indexOf("_") + 1);
var offset = $('#object3d-viewer-canvas_' + whichScene).offset();
mouseUp.x = ((event.clientX - offset.left) / canvasWidth[whichScene]) * 2 - 1;
mouseUp.y = - ((event.clientY - (offset.top - document.body.scrollTop)) / (canvasHeight[whichScene])) * 2 + 1;
container[whichScene].style.cursor = 'auto';
if (mouseUp.x == mouseDown.x && mouseUp.y == mouseDown.y) {
if (event.which === 1) {
if (pickConst == 5)
setTimeout(function () {
if (clickCount != 2)
picking(1);
}, 300);
else if (typePickingFaces) {
picking(1);
} else
picking(1);
}
if (event.which === 3) {
picking(3);
//if (typePickingFaces) {
raycasterr.setFromCamera(mouseUp, camera[whichScene]);
var intersectsFaces = raycasterr.intersectObjects(pickedFaces);
var intersectsMeshes = raycasterr.intersectObjects(createdMeshes);
if (intersectsFaces.length > 0) {
scene[whichScene].remove(scene[whichScene].getObjectById(intersectsFaces[0].object.id));
searchSpheresInFaces(intersectsFaces[0].object.id);
} else if (intersectsMeshes.length > 0) {
$("#confirm").data("id", intersectsMeshes[0].object.id);
$("#confirm").data("idd", intersectsMeshes[0].object.idd);
$("#confirm").data("type", 2);
$("#confirm").dialog("option", "title", ("Deleting entry of
" + intersectsMeshes[0].object.name + " "));
$("#confirm").dialog("open");
} else
if (pickedFaces.length > 0)
makeMeshFromFaces();
//}
}
}
dragMouse = false;
}
}
var iter = 0,
triangle;
var attached = '';
var egh = '';
var second = true;
var dist,
distT = [{
distance : 9999
}
],
distM = [{
distance : 9999
}
];
//typePick = pickConst;
function addEdges(_intersects) {
if (typeof(_intersects[0]) != 'undefined' && _intersects[0].object.id != '') {
if (typeof(egh.id) == 'undefined') {
egh = new THREE.WireframeHelper(_intersects[0].object, new THREE.Color(0xffffff - _intersects[0].object.material.color.getHex()));
egh.material.linewidth = 20;
egh.material.side = THREE.DoubleSide;
egh.material.transparent = true;
egh.material.depthTest = true;
egh.material.depthWrite = false;
egh.material.polygonOffset = true;
egh.material.polygonOffsetFactor = -4;
} else {
scene[whichScene].remove(scene[whichScene].getObjectById(egh.id));
egh = new THREE.WireframeHelper(_intersects[0].object, new THREE.Color(0xffffff /* intersects[0].object.material.color.getHex()*/
));
egh.material.linewidth = 20;
egh.material.side = THREE.DoubleSide;
egh.material.transparent = true;
egh.material.depthTest = true;
egh.material.depthWrite = false;
egh.material.polygonOffset = true;
egh.material.polygonOffsetFactor = -4;
}
scene[whichScene].add(egh);
}
}
function picking(wMouse) {
if (multi == false) {
raycaster.setFromCamera(mouseUp, camera[whichScene]);
var intersects;
if (wMouse == 1) {
intersects = raycaster.intersectObjects(scene[whichScene].children, true);
if (intersects.length > 0 && intersects[0].object.name !== '') {
if (typeof(intersects[1]) != 'undefined') {
if (intersects[1].object.id == intersects[0].object.id) {}
else {
second = false;
}
}
}
intersects = raycaster.intersectObjects(allSpheres);
if (intersects.length > 0) {
if (attached != '') {
transform.detach(attached);
attached == '';
} else {
attached = scene[whichScene].getObjectById(intersects[0].object.id);
controls.enabled = false;
transform.attach(attached);
scene[whichScene].add(transform);
}
if (typeof(egh.id) !== 'undefined') {
scene[whichScene].remove(scene[whichScene].getObjectById(egh.id));
egh = '';
}
} else {
intersectsMeshes = [];
/*if (typePickingFaces == 1 || typePickingFaces == 2)
intersectsMeshes = raycasterr.intersectObjects(createdMeshes);*/
if (intersectsMeshes.length == 0) {
intersectsT = raycaster.intersectObjects(triangles);
intersectsMeshes = raycasterr.intersectObjects(createdMeshes);
intersects = raycaster.intersectObjects(sceneObjects);
if (intersects.length > 0)
dist = raycaster.intersectObject(intersects[0].object);
else
dist = [{
distance : 9999999999
}
];
if (intersectsT.length > 0)
distT = raycaster.intersectObject(intersectsT[0].object);
else
distT = [{
distance : 9999999999
}
];
if (intersectsMeshes.length > 0)
distM = raycaster.intersectObject(intersectsMeshes[0].object);
else
distM = [{
distance : 9999999999
}
];
dist[0].distance = Math.round(dist[0].distance, 5);
distT[0].distance = Math.round(distT[0].distance, 5);
distM[0].distance = Math.round(distM[0].distance, 5);
if (distT[0].distance <= dist[0].distance) {
addEdges(intersectsT, egh);
} else if (distM[0].distance <= dist[0].distance) {
addEdges(intersectsMeshes, egh);
} else if (distT[0].distance > dist[0].distance) {
if (typeof(egh.id) !== 'undefined') {
scene[whichScene].remove(scene[whichScene].getObjectById(egh.id));
egh = '';
$("#tooltip").dialog("close");
} else if (intersects.length > 0) {
if (intersects[0].object.name != '') {
if ((typePickingFaces == 1 || typePickingFaces == 2) && searchFaces(intersects[0].faceIndex)) {
var faceIndex = intersects[0].faceIndex;
var geom = intersects[0].object.geometry;
var facesIndices = ["a", "b", "c"];
var tempVert = new THREE.Vector3();
var vertArray = [];
var vertArray2 = [];
facesIndices.forEach(function (indices) {
tempVert = (geom.vertices[intersects[0].object.geometry.faces[faceIndex][indices]]);
vertArray.push(tempVert);
});
if (typePickingFaces == 2) {
if (faceIndex % 2 == 0) {
faceIndex = faceIndex + 1;
} else {
faceIndex = faceIndex - 1;
}
var finished = false;
facesIndices.forEach(function (indices) {
var toPush = 0;
tempVert = (geom.vertices[intersects[0].object.geometry.faces[faceIndex][indices]]);
for (var ii = 0; ii < vertArray.length && finished == false; ii++) {
if (vertArray[ii] !== tempVert)
toPush++;
}
if (toPush === 3) {
vertArray.push(tempVert);
finished = true;
}
});
}
var geo = new THREE.Geometry();
for (var aa = 0; aa < vertArray.length; aa++) {
geo.vertices.push(vertArray[aa]);
}
for (var face = 0; face < vertArray.length - 2; face++) {
geo.faces.push(new THREE.Face3(0, face + 1, face + 2));
}
var redMat = new THREE.MeshBasicMaterial({
color : faceColor,
side : THREE.DoubleSide,
transparent : true,
opacity : 0.7,
depthTest : true,
depthWrite : false,
polygonOffset : true,
polygonOffsetFactor : -4
});
var polygon = new THREE.Mesh(geo, redMat);
if (wholePano != 6) {
polygon.position.x -= originPosition[whichScene].x;
polygon.position.y -= originPosition[whichScene].y;
polygon.position.z -= originPosition[whichScene].z;
}
scene[whichScene].add(polygon);
pickedFaces.push(polygon);
pickedFacesID.push(intersects[0].faceIndex);
var sphere = new THREE.Mesh(new THREE.SphereGeometry(sphereRadius / 2, 7, 7), new THREE.MeshBasicMaterial({
transparent : true,
opacity : 0.8,
color : 0xff0000
}));
sphere.position.set(intersects[0].point.x, intersects[0].point.y, intersects[0].point.z);
scene[whichScene].add(sphere);
facesSpheres.push(sphere);
//geom.verticesNeedUpdate = true;
} else if (typePickingFaces == 0) {
if (typePick % (pickConst + 1) != 0) {
var sphere = new THREE.Mesh(new THREE.SphereGeometry(sphereRadius, 7, 7), new THREE.MeshBasicMaterial({
transparent : true,
opacity : 0.8,
color : 0xff0000
}));
/*lineGeometry.vertices.push(new THREE.Vector3(intersects[0].point.x, intersects[0].point.y, intersects[0].point.z));
lineGeometry.vertices.needsUpdate = true;
line = new THREE.Line(lineGeometry, lineMaterial);
scene[whichScene].add(line);*/
sphere.position.set(intersects[0].point.x, intersects[0].point.y, intersects[0].point.z);
scene[whichScene].add(sphere);
spheres.push(sphere);
allSpheres.push(sphere);
vertexx = sphere.position;
pickedVert.push(vertexx);
if (pickConst != 5)
typePick--;
}
if (typePick % (pickConst + 1) == 0) {
var pickedArea = new THREE.Geometry();
var toSlice = [];
var strSave = '';
for (var i = 0; i < pickedVert.length; i++) {
pickedArea.vertices.push(pickedVert[i]);
strSave += pickedVert[i].x + " " + pickedVert[i].y + " " + pickedVert[i].z + " ";
//iter++;
}
if (strSave[strSave.length - 1] === '')
strSave.pop();
pickedVert = [];
var _color = new THREE.Color();
_color.setHex(Math.random() * 0xffffff);
var redMat = new THREE.MeshBasicMaterial({
color : _color,
side : THREE.DoubleSide,
transparent : true,
opacity : 0.5,
depthTest : true,
depthWrite : false,
polygonOffset : true,
polygonOffsetFactor : -4
});
if (pickConst == 3) {
pickedArea.faces.push(new THREE.Face3(0, 2, 1));
triangle = new THREE.Mesh(pickedArea, redMat);
scene[whichScene].add(triangle);
var tt = new Triangle(spheres[0].id, spheres[1].id, spheres[2].id, triangle.id);
$("#descForm").data("type", "triangle");
}
if (pickConst == 4) {
pickedArea.faces.push(new THREE.Face3(0, 1, 2));
pickedArea.faces.push(new THREE.Face3(0, 2, 3));
triangle = new THREE.Mesh(pickedArea, redMat);
scene[whichScene].add(triangle);
var tt = new Quad(spheres[0].id, spheres[1].id, spheres[2].id, spheres[3].id, triangle.id);
$("#descForm").data("type", "quad");
} else if (pickConst == 5) {}
spheres = [];
//triangles.push(triangle);
trObj.push(tt);
typePick = pickConst;
$("#descForm").data("color", _color.getHex().toString(16));
$("#descForm").data("coords", strSave);
$("#descForm").data("faces", '');
$("#descForm").dialog("option", "title", ("Describe entry no. " + triangle.id));
clearEvents();
lastAddedObject = {
"object" : triangle,
"tt" : tt
};
readID(_filename[0]);
$("#descForm").dialog("open");
}
}
}
}
}
}
}
}
if (wMouse == 3) {
if (typePickingFaces == 1 || typePickingFaces == 2) {
var intersectsTriangles = raycaster.intersectObjects(pickedFaces);
var intersectsSpheres = raycaster.intersectObjects(facesSpheres);
if (intersectsTriangles.length > 0) {
if (intersectsTriangles[0].object.id == searchTriangles(intersectsTriangles[0].object.id)) {
for (var i = 0; i < spheres.length; i++) {
typePick++;
}
//pickedVert = [];
if (typeof(egh.id) !== 'undefined') {
scene[whichScene].remove(scene[whichScene].getObjectById(egh.id));
egh = '';
}
}
}
if (intersectsSpheres.length > 0) {
scene[whichScene].remove(scene[whichScene].getObjectById(intersectsSpheres[0].object.id));
var indd = spheres.indexOf(intersectsSpheres[0].object);
spheres.splice(indd, 1);
indd = pickedVert.indexOf(intersectsSpheres[0].object.position);
pickedVert.splice(indd, 1);
typePick++;
}
} else {
//raycasterT.setFromCamera( mouseUp, camera );
var intersectsTriangles = raycaster.intersectObjects(triangles);
var intersectsSpheres = raycaster.intersectObjects(spheres);
if (intersectsTriangles.length > 0) {
lastIDHoverT = lastIDHover = 0;
if (intersectsTriangles[0].object.id == searchTriangles(intersectsTriangles[0].object.id)) {
for (var i = 0; i < spheres.length; i++) {
typePick++;
}
if (typeof(egh.id) !== 'undefined') {
scene[whichScene].remove(scene[whichScene].getObjectById(egh.id));
egh = '';
}
}
}
if (intersectsSpheres.length > 0) {
scene[whichScene].remove(scene[whichScene].getObjectById(intersectsSpheres[0].object.id));
var indd = spheres.indexOf(intersectsSpheres[0].object);
spheres.splice(indd, 1);
indd = pickedVert.indexOf(intersectsSpheres[0].object.position);
pickedVert.splice(indd, 1);
typePick++;
}
}
}
}
}
function save(_name, _events, _type, _color, _coords, _faces, _filename, _isOK, _ii, _object) {
saving = true;
var eventsString = '';
_events.forEach (function (key) {
eventsString += key['name'] + "#" + key['uri'] + "#" + key['class_name'] + "|";
});
$("#descFormError").html("Saving, please wait...").css('color', 'blue');
$.ajax({
url:"http://www.patrimonium.net/wisski/object3d/save-annotation",
data: {params:"{\"name\":\""+_name+"\",\"target_obj_file\":\" \\t http://www.patrimonium.net/sites/default/files/"+_filename+"."+ext[_ii]+"\",\"color\":\"0x"+_color+"\",\"coords\":\""+_type+"("+_coords+"|"+_faces+")\",\"reference\":\""+ eventsString +"\"}"},
success : function (result) {
var obj = JSON.parse(result);
newID = obj['anno_uri'];
_object.idd = newID.substring(newID.lastIndexOf("/") + 1, newID.length);
$("#descFormError").html("
Entry saved successfully! ").css('color', 'green');
if (_isOK === 1) {
setTimeout(function () {
$("#descForm").dialog("close");
$("#descFormError").html(" ");
$("#descName").html(" ");
saving = false;
//$("#descDescription").html(" ");
}, 1200);
}
},
error : function (jqXHR, textStatus, errorThrown) {
$("#descFormError").html("
Could not save description! ").css('color', 'red');
console.log(jqXHR + " " + textStatus + " " + errorThrown);
}
});
}
function saveEntry(_object, _name, _events, _filename, _ii, _color) {
saving = true;
var eventsString = '';
var newEvents = new Array();
_events.forEach (function (key) {
eventsString += key['name'] + "#" + key['uri'] + "#" + key['class_name'] + "|";
var tempEvent = new Array();
tempEvent.push(key['name']);
tempEvent.push(key['uri']);
tempEvent.push(key['class_name']);
newEvents.push(tempEvent);
});
/*spinner[_ii].opts.left = $("#descFormError").offset().left;
spinner[_ii].opts.top = $("#descFormError").offset().top;
spinner[_ii].spin(target);*/
$("#descFormError").html("Saving, please wait...").css('color', 'blue');
$.ajax({
url : "http://www.patrimonium.net/wisski/object3d/delete-annotation",
data: {params:"{\"anno_uri\":\"" + _object.idd + "\"}"},
success : function (result) {
if (result == '[]') {
$.ajax({
url : "http://www.patrimonium.net/wisski/object3d/save-annotation",
data: {params:"{\"name\":\""+_name+"\",\"target_obj_file\":\" \\t http://www.patrimonium.net/sites/default/files/"+_filename+"."+ext[_ii]+"\",\"coords\":\"" + _object.stringGeom + "\",\"color\":\"0x"+_color+"\",\"reference\":\""+ eventsString +"\"}"},
success : function (result) {
newID = _object.idd = result['anno_uri'];
_object.eventsString = eventsString;
scene[_ii].getObjectById(_object.id).events = newEvents;
readModTimeOnce(_filename, _ii);
$("#descFormError").html("
Entry saved successfully! ").css('color', 'green');
//spinner[_ii].stop();
setTimeout(function () {
$("#descForm").dialog("close");
$("#descFormError").html(" ");
$("#descName").html(" ");
$(buttonDomElement).button('enable');
clearEvents();
saving = false;
}, 1200);
},
error : function (jqXHR, textStatus, errorThrown) {
$("#descFormError").html("
Could not save description! ").css('color', 'red');
console.log(jqXHR + " " + textStatus + " " + errorThrown);
}
});
}
},
error : function (jqXHR, textStatus, errorThrown) {
$("#descFormError").html("
Could not save description! ").css('color', 'red');
$(buttonDomElement).button('enable');
console.log(jqXHR + " " + textStatus + " " + errorThrown);
}
});
}
function removeNode(_idd, _filename) {
$.ajax({
url : "http://www.patrimonium.net/wisski/object3d/delete-annotation",
data : {params:"{\"anno_uri\":\"" + _idd + "\"}"},
success : function (result) {
console.log(result);
//$("#descFormError").html("
Entry saved successfully! ").css('color', 'green');
},
error : function () {
//$("#descFormError").html("
Could not save description! ").css('color', 'red');
}
});
}
}
function animate() {
idAnimation = requestAnimationFrame(animate);
if (multi == true)
for (var ii = 0; ii < controls.length; ii++) {
controls[ii].update();
}
else
controls[mainID].update();
render();
}
function render() {
if (multi == false) {
if (typeof(realMirror) !== 'undefined')
realMirror.render( );
renderer[mainID].render(scene[mainID], camera[mainID]);
stats[mainID].update();
}
else {
for (var ii = 0; ii < renderer.length; ii++) {
renderer[ii].render(scene[ii], camera[ii]);
stats[ii].update();
}
}
}
function readID(_filename) {
var obj = [{
"filename" : _filename
}
];
$.ajax({
type : "post",
url : "../sites/default/readID.php",
data : JSON.stringify(obj),
contentType : "application/json; charset=utf-8",
dataType : "html",
cache : false,
processData : false,
success : function (result) {
newID = result;
},
error : function (jqXHR, textStatus, errorThrown) {
console.log(jqXHR + " " + textStatus + " " + errorThrown);
}
});
}
function searchSpheres(_id) {
for (var ii = 0; ii < trObj.length; ii++) {
for (var name in trObj[ii]) {
var temp = trObj[ii][name];
if (typeof(temp.length) !== 'undefined') {
var geom = scene[whichScene].getObjectById(trObj[ii]['id']);
geom.geometry.verticesNeedUpdate = true;
} else {
if (_id === trObj[ii][name]) {
var geom = scene[whichScene].getObjectById(trObj[ii]['id']);
geom.geometry.verticesNeedUpdate = true;
}
}
}
}
}
function searchSpheresInFaces(_id) {
var _finished = false;
for (var ii = 0; ii < pickedFaces.length && _finished == false; ii++) {
if (pickedFaces[ii].id == _id) {
scene[whichScene].remove(scene[whichScene].getObjectById(facesSpheres[ii].id));
pickedFaces.splice(ii, 1);
pickedFacesID.splice(ii, 1);
facesSpheres.splice(ii, 1);
finished = true;
}
}
}
function searchSpheresInMeshes(_id, _type) {
var _finished = false;
if (_type == 0) {
for (var ii = 0; ii < createdMeshes.length && _finished == false; ii++) {
if (createdMeshes[ii].id == _id) {
scene[whichScene].remove(scene[whichScene].getObjectById(createdSpheres[ii].id));
createdMeshes.splice(ii, 1);
createdSpheres.splice(ii, 1);
lastIDHover = 0;
finished = true;
}
}
} else if (_type == 1) {
for (var ii = 0; ii < createdMeshes.length && _finished == false; ii++) {
if (createdMeshes[ii].id == _id) {
scene[whichScene].getObjectById(createdSpheres[ii].id).material.opacity = 1.0;
finished = true;
}
}
} else if (_type == 2) {
for (var ii = 0; ii < createdMeshes.length && _finished == false; ii++) {
if (createdMeshes[ii].id == _id) {
scene[whichScene].getObjectById(createdSpheres[ii].id).material.opacity = 0.5;
finished = true;
}
}
}
}
function makeMeshFromFaces() {
var preMesh = new THREE.Geometry();
var strFaces = '';
var strCoords = '';
for (var ii = 0; ii < pickedFaces.length; ii++) {
pickedFaces[ii].updateMatrix();
preMesh.merge(pickedFaces[ii].geometry, pickedFaces[ii].matrix, 0);
}
var redMat = new THREE.MeshBasicMaterial({
color : faceColor,
side : THREE.DoubleSide,
transparent : true,
opacity : 0.5,
depthTest : true,
depthWrite : false,
polygonOffset : true,
polygonOffsetFactor : -4
});
var mesh = new THREE.Mesh(preMesh, redMat);
scene[whichScene].add(mesh);
mesh.geometry.computeBoundingSphere();
for (var ii = 0; ii < mesh.geometry.vertices.length; ii++) {
strCoords += mesh.geometry.vertices[ii].x + " " + mesh.geometry.vertices[ii].y + " " + mesh.geometry.vertices[ii].z + " ";
}
for (var ii = 0; ii < mesh.geometry.faces.length; ii++) {
strFaces += mesh.geometry.faces[ii].a + " " + mesh.geometry.faces[ii].b + " " + mesh.geometry.faces[ii].c + " ";
}
if (strCoords[strCoords.length - 1] === '')
strCoords.pop();
if (strFaces[strFaces.length - 1] === '')
strFaces.pop();
//createdMeshes.push(mesh);
var sphere = new THREE.Mesh(new THREE.SphereGeometry(mesh.geometry.boundingSphere.radius / 15, 7, 7), new THREE.MeshBasicMaterial({
transparent : true,
color : (0xffffff - faceColor),
opacity : 0.5
}));
sphere.position.set(mesh.geometry.boundingSphere.center.x, mesh.geometry.boundingSphere.center.y, mesh.geometry.boundingSphere.center.z);
scene[whichScene].add(sphere);
createdSpheres.push(sphere);
for (var ii = 0; ii < pickedFaces.length; ii++) {
scene[whichScene].remove(scene[whichScene].getObjectById(pickedFaces[ii].id));
}
for (var ii = 0; ii < facesSpheres.length; ii++) {
scene[whichScene].remove(scene[whichScene].getObjectById(facesSpheres[ii].id));
}
$("#descForm").data("coords", strCoords);
$("#descForm").data("faces", strFaces);
$("#descForm").data("color", (faceColor.getHex().toString(16)));
$("#descForm").data("type", "face3");
$("#descForm").dialog("option", "title", ("Describe entry no. " + mesh.id));
lastAddedObject = {
"object" : mesh,
"mtt" : sphere.id
};
readID(filename[0]);
$("#descForm").dialog("open");
facesSpheres = [];
pickedFaces = [];
pickedFacesID = [];
faceColor.setHex(Math.random() * 0xffffff);
}
function searchTriangles(_id) {
for (var ii = 0; ii < triangles.length; ii++) {
if (trObj[ii].id == _id) {
var indd = trObj.indexOf(trObj[ii]);
if (typeof(trObj[ii].tabl) == 'undefined') {
scene[whichScene].remove(scene[whichScene].getObjectById(trObj[ii].a));
scene[whichScene].remove(scene[whichScene].getObjectById(trObj[ii].b));
scene[whichScene].remove(scene[whichScene].getObjectById(trObj[ii].c));
scene[whichScene].remove(scene[whichScene].getObjectById(trObj[ii].d));
} else {
for (var oo = 0; oo < trObj[ii].tabl.length; oo++) {
scene[whichScene].remove(scene[whichScene].getObjectById(trObj[ii].tabl[oo]));
}
}
trObj.splice(indd, 1);
}
if (triangles[ii].id == _id) {
var indd = triangles.indexOf(triangles[ii]);
$("#confirm").data("id", triangles[ii].id);
$("#confirm").data("idd", triangles[ii].idd);
$("#confirm").data("ind", indd);
$("#confirm").data("type", 1);
$("#confirm").dialog("option", "title", ("Deleting entry of
" + triangles[ii].name + " "));
$("#confirm").dialog("open");
return (_id);
}
}
}
function searchFaces(_id) {
if (pickedFacesID.length === 0)
return true;
else {
for (var ii = 0; ii < pickedFacesID.length; ii++) {
if (pickedFacesID[ii] === _id)
return false;
}
}
return true;
}
function addFloor(width, _x, _y, _z, ii) {
//material for ground
var material = new THREE.MeshLambertMaterial({
wireframe : true,
color : 0x0022ce,
side : THREE.DoubleSide,
transparent : true,
opacity : 0.2
});
var floorGeo = new THREE.PlaneGeometry(width, width, 20, 20);
floor = new THREE.Mesh(floorGeo, material);
floor.position.set(_x, _y, _z);
floor.rotation.x = Math.PI / 2;
floor.receiveShadow = true;
scene[ii].add(floor);
floor.geometry.computeBoundingSphere();
floors.push(floor);
floorID = floor.id;
return floor;
}
function addAxis(size, _text, ii) {
var origin = new THREE.AxisHelper(1);
origin.scale.set(_text.x * 0.7, _text.y * 0.7, _text.z * 0.7);
origin.position.set(0, 0, 0);
//origin.position.x += offsetNext.x;
//origin.position.y += offsetNext.y;
//origin.position.z += offsetNext.z;
scene[ii].add(origin);
origins.push(origin);
axisID = origin.id;
var bbb = new THREE.Box3().setFromObject(origin);
labels = new Array();
var color = new THREE.Color();
color.setRGB(255, 0, 0);
addText(_text.x, color, bbb.max.x, 'x', size, ii);
color.setRGB(0, 255, 0);
addText(_text.y, color, bbb.max.y, 'y', size, ii);
color.setRGB(0, 20, 255);
addText(_text.z, color, bbb.max.z, 'z', size, ii);
texts[ii] = labels;
}
function addText(_text, _color, pos, type, _size, ii) {
var textMaterial = new THREE.MeshBasicMaterial({
color : _color
});
_size /= 17;
var textGeo;
if (type !== 'xyz') {
var units = " cm";
_text = _text.replace(".", ",");
//if (parseFloat(_text) >= 100000) {units = " km"; _text = (parseFloat(_text)/100000).toFixed(4);}
if (parseFloat(_text) >= 100) {units = " m"; _text = (parseFloat(_text)/100).toFixed(2);}
textGeo = new THREE.TextGeometry(_text + units, {
size : _size,
height : 0.01,
curveSegments : 6,
font : "helvetiker",
style : "normal"
});
}
else {
textGeo = new THREE.TextGeometry(_text, {
size : _size,
height : 0.01,
curveSegments : 6,
font : "helvetiker",
style : "normal"
});
}
var text = new THREE.Mesh(textGeo, textMaterial);
text.position.set(0, 0, 0);
if (type == 'xyz') {
text.rotation.x = -Math.PI / 2;
text.rotation.z = -Math.PI / 2;
} else
text.rotation.y = -Math.PI / 2;
switch (type) {
case 'x':
text.position.x = pos;
labels.push(text);
break;
case 'y':
text.position.y = pos;
labels.push(text);
break;
case 'z':
text.position.z = pos;
labels.push(text);
break;
case 'xyz':
text.position.z = pos.z;
text.position.x = pos.x;
text.position.y = pos.y;
filenamesText.push(text);
break;
};
scene[ii].add(text);
scene[ii].updateMatrixWorld(true);
var position = new THREE.Vector3();
position.setFromMatrixPosition(text.matrixWorld);
labelsOrigin.push(position);
}
function addRay(raycasterr) {
var material = new THREE.LineBasicMaterial({
color : 0x0000ff
});
var geometry = new THREE.Geometry();
geometry.vertices.push(new THREE.Vector3(raycasterr.ray.origin.x, raycasterr.ray.origin.y, raycasterr.ray.origin.z));
geometry.vertices.push(new THREE.Vector3(raycasterr.ray.origin.x + (raycasterr.ray.direction.x * 100000), raycasterr.ray.origin.y + (raycasterr.ray.direction.y * 100000), raycasterr.ray.origin.z + (raycasterr.ray.direction.z * 100000)));
var line = new THREE.Line(geometry, material);
scene[whichScene].add(line);
}
function onWindowResize() {
if (multi)
for (var ii = 0; ii < camera.length; ii++) {
camera[ii].aspect = canvasWidth[ii] / canvasHeight[ii];
camera[ii].updateProjectionMatrix();
renderer[ii].setSize(canvasWidth[ii], canvasHeight[ii]);
}
else {
camera[mainID].aspect = canvasWidth[mainID] / canvasHeight[mainID];
camera[mainID].updateProjectionMatrix();
renderer[mainID].setSize(canvasWidth[mainID], canvasHeight[mainID]);
}
render();
}
function switchColor (_name) {
var values = {ka: "", kd: "", ks: ""};
values.ka = _name.ambient;
values.kd = _name.color;
values.ks = _name.specular;
return values;
}
function setGuiColors (_name) {
var values;
for (var ii = 0; ii < mObject.length; ii++)
{
if (isJSON || isDAE) {
for (var jj = 0; (typeof(mObject[ii].material) !== 'undefined') && (typeof(mObject[ii].material.materials) !== 'undefined') && jj < mObject[ii].material.materials.length; jj++) {
if (mObject[ii].material.materials[jj].name == _name || _name == 'all') {
values = switchColor (mObject[ii].material.materials[jj]);
}
}
} else {
for (var jj = 0; jj < mObject[ii].children.length; jj++) {
if (typeof (mObject[ii].children[jj].children) !== 'undefined' && mObject[ii].children[jj].children.length > 0 ) {
for (var kk = 0; kk < mObject[ii].children[jj].children.length; kk++) {
if (typeof (mObject[ii].children[jj].children[kk].material) !== 'undefined' && typeof (mObject[ii].children[jj].children[kk].material.ambient) !== 'undefined') {
if (mObject[ii].children[jj].children[kk].material.name == _name || _name == 'all') {
values = switchColor (mObject[ii].children[jj].children[kk].material);
}
}
}
}
else {
if (typeof (mObject[ii].children[jj].material) !== 'undefined') {
if (mObject[ii].children[jj].material.name == _name || _name == 'all') {
values = switchColor (mObject[ii].children[jj].material);
}
}
}
}
}
}
return values;
}
function floorsF() {
for (var ii = 0; ii < mObject.length; ii++) {
if (mObject[ii].children.length > 0) {
for (var jj = 0; jj < mObject[ii].children.length; jj++) {
if (mObject[ii].children[jj].type != 'Object3D') {
sceneObjects.push(mObject[ii].children[jj]);
}
else {
for (var kk = 0; kk < mObject[ii].children[jj].children.length; kk++) {
mObject[ii].children[jj].children[kk].name = 'obj';
sceneObjects.push(mObject[ii].children[jj].children[kk]);
}
}
}
} else {
sceneObjects.push(mObject[ii]);
}
}
for (var ii = 0; ii < lights.length; ii++) {
lights[ii][1].position.x = lightPosition.x = camera[mainID].position.x;
lights[ii][1].position.y = lightPosition.y = camera[mainID].position.y;
lights[ii][1].position.z = lightPosition.z = camera[mainID].position.z;
}
if (is3D) {
if (multi) {
if (typeof (geomStats[ii].vertices) !== 'undefined') {
for (var ii = 0; ii < geomStats.length; ii++) {
$("#vertices_"+ii+"").html("Vertices: "+ geomStats[ii].vertices + ", faces: " + geomStats[ii].faces + " | " + geomStats[ii].segments + " segments");
}
}
}
else {
if (typeof(geomStats[mainID].vertices) !== 'undefined' && wholePano !== 6)
$("#vertices_"+mainID+"").html("Vertices: "+geomStats[mainID].vertices + ", faces: " + geomStats[mainID].faces + " | " + geomStats[mainID].segments + " segments");
}
if (typeof (materialF5) !== 'undefined')
f5.remove(materialF5);
var matLabels = new Array();
matLabels.push("all");
for (var ii = 0; ii < sceneMaterials.length; ii++)
if (sceneMaterials[ii].name !== '')
matLabels.push(sceneMaterials[ii].name);
materialF5 = f5.add(settings, 'Material', matLabels).onChange(function () {
materialName = settings.Material;
var search = true;
for (var ii = 0; ii < sceneMaterials.length && search; ii++) {
if (sceneMaterials[ii].name == materialName)
{
search = false;
var tempColor = setGuiColors(sceneMaterials[ii].name);
textColors.Ka = "#" + tempColor.ka.getHexString();
textColors.Kd = "#" + tempColor.kd.getHexString();
textColors.Ks = "#" + tempColor.ks.getHexString();
for (var i = 0; i < gui.__folders.Materials.__controllers.length; i++) {
if (typeof(gui.__folders.Materials.__controllers[i].updateDisplay()) == 'function')
gui.__folders.Materials.__controllers[i].updateDisplay();
}
}
}
});
if (typeof (saveMTLbutton) !== 'undefined')
f5.remove(saveMTLbutton);
if (isDAE == false && wholePano !== 6)
saveMTLbutton = f5.add(settings, 'SaveMTL').name("Preview MTL");
}
}
function getModTime (_url, callback) {
_url.forEach(function(url) {
var xhr = $.ajax({
url: url,
success: function(response) {
return callback(xhr.responseURL + "|" + xhr.getResponseHeader("Last-Modified") + "|" + xhr.getResponseHeader('Content-Length'));
}
});
});
}
var spinner_begin;
$(window).load(function () {
$('.wisski_object3d').each(function (i, f) {
WissKI.object3d.files.push($(f).text());
});
if (WissKI.object3d.files.length == 0 && isJPG)
WissKI.object3d.files = JPGS;
else {is3D = true;}
if (WissKI.object3d.files.length > 0 || wholePano == 6 || WissKI.object3d.files[0] != null || isJPG) {
$('#object3d-viewer').append("
Loading of the 3D content... The loading time depends on the file's size and it's format.
");
var target_begin = document.getElementById('spinner_begin');
spinner_begin = new Spinner(optsBegin);
spinner_begin.spin(target_begin);
console.log("Detected 3D files...");
var toRemove = new Array();
for (var ff = 0; ff < WissKI.object3d.files.length; ff++) {
var parts = WissKI.object3d.files[ff].split('.');
var pp = (parts.length > 1) ? parts.pop() : '';
pp = pp.toLowerCase();
if ((pp !== "jpg" && pp !== "png" && pp !== "tiff" && pp !== "tif" && pp !== "gif") || isJPG) {
var temp = WissKI.object3d.files[ff];
temp = temp.replace(/\\/g, '/');
temp = temp.substring(temp.lastIndexOf('/') + 1, temp.lastIndexOf('.'));
temp = temp.replace(/[|&;$%@"<>()+,]/g, "");
ext.push(pp);
filename.push(temp);
console.log("Loading '" + temp + "." + pp + "' file");
spinner.push(new Spinner(opts));
}
}
function performInit(filename) {
console.log("Performing " + filename);
for (var ii = 0; ii < toRemove.length; ii++) {
WissKI.object3d.files.splice(ii, 1);
}
$("#object3d-viewer-canvas_0").remove();
//$('#spinText_begin').html("");
spinner_begin.stop();
if (wholePano == 6) {
spinner[0] = new Spinner(opts);
}
var __filename = new Array();
__filename.push(filename[0]);
$.ajax({
url : initMain(__filename),
success : function () {
floorsF();
if (wholePano == 6) {
spinner[0].stop();
animate();
functionDone(0);
}
for (var ii = 0; ii < texts.length; ii++) {
for (var jj = 0; jj < texts[ii].length; jj++) {
texts[ii][jj].lookAt(camera[ii].position);
}
}
}
});
}
if (filename.length > 1)
{
if (is3D == true) {
var askUser = false;
$.ajax({
url: getModTime(WissKI.object3d.files, function (buf) {
var dd = buf.split("|");
dd[0] = dd[0].replace(/\\/g, '/');
dd[0] = dd[0].substring(dd[0].lastIndexOf('/') + 1, dd[0].lastIndexOf('.'));
dd[0] = dd[0].replace(/[|&;$%@"<>()+,]/g, "");
var str = {_modified: dd[1], _filename: dd[0], _size: dd[2]};
if (dd[2] > 20971520)
askUser = true;
filenameMod.push(str);
}),
complete: function () {
for (var ii = 0; ii < filenameMod.length; ii++) {
var search = true;
for (var jj = 0; jj < filename.length && search; jj++) {
if (filename[jj] == filenameMod[ii]._filename) {
var d = {_filename: filenameMod[ii]._filename, ext: ext[jj], _WissKI: WissKI.object3d.files[jj], date: new Date(filenameMod[ii]._modified), ind: jj, size: filenameMod[ii]._size};
filenameMod[ii] = d;
search = false;
}
}
}
filenameMod.sort(function(a,b) {
return new Date(a.date).getTime() - new Date(b.date).getTime()
});
//filenameMod.reverse();
for (var ii = 0; ii < filenameMod.length; ii++) {
if (filenameMod[ii]._filename != '') {
WissKI.object3d.files[ii] = filenameMod[ii]._WissKI;
filename[ii] = filenameMod[ii]._filename;
ext[ii] = filenameMod[ii].ext;
size[ii] = filenameMod[ii].size;
if (ext[ii] == 'dae' || ext[ii] == 'DAE' || filenameMod[ii].size > 20971520) {
askUser = true;
}
}
}
if (askUser) {
$('#object3d-viewer').append("
Loading huge 3D files may cause website suspension and/or long loading time. Are you sure to load this content?
");
$( "#confirm-load" ).dialog({
resizable: false,
height: 210,
modal: true,
buttons: {
"Yes, load it anyway": function() {
$( this ).dialog( "close" );
performInit(filename);
},
Cancel: function() {
$('#spinText_begin').html("You cancelled loading process. There would be 3D content.");
//$("#object3d-viewer-canvas_0").remove();
spinner_begin.stop();
$( this ).dialog( "close" );
}
}
});
}
else
performInit(filename);
},
error: function () {
$('#object3d-viewer').append("
Loading huge 3D files may cause website suspension and/or long loading time. Are you sure to load this content?
");
$( "#confirm-load" ).dialog({
resizable: false,
height: 210,
modal: true,
buttons: {
"Yes, load it anyway": function() {
$( this ).dialog( "close" );
performInit(filename);
},
Cancel: function() {
$('#spinText_begin').html("You cancelled loading process. There would be 3D content.");
//$("#object3d-viewer-canvas_0").remove();
spinner_begin.stop();
$( this ).dialog( "close" );
}
}
});
}
});
}
else {
var search = true;
for (var ii = 0; ii < filename.length && search; ii++) {
if (filename[ii].indexOf("_preview") == 1) {
search = false;
var _tempName = filename[0];
var _tempExt = ext[0];
var _tempWissKI = WissKI.object3d.files[0]
filename [0] = filename[ii];
filename[ii] = _tempName;
ext[0] = ext[ii];
ext[ii] = _tempExt;
WissKI.object3d.files[0] = WissKI.object3d.files[ii];
WissKI.object3d.files[ii] = _tempWissKI;
performInit(filename);
}
else if (filename[ii].indexOf("_preview") !== -1) {
search = false;
var _tempName = filename[0];
var _tempExt = ext[0];
var _tempWissKI = WissKI.object3d.files[0]
filename [0] = filename[ii];
filename[ii] = _tempName;
ext[0] = ext[ii];
ext[ii] = _tempExt;
WissKI.object3d.files[0] = WissKI.object3d.files[ii];
WissKI.object3d.files[ii] = _tempWissKI;
performInit(filename);
}
}
if (search == false) {
//performInit(filename[0]);
}
else {
performInit(filename);
}
}
}
else {
if (is3D == true) {
var askUser = false;
$.ajax({
url: getModTime(WissKI.object3d.files, function (buf) {
var dd = buf.split("|");
dd[0] = dd[0].replace(/\\/g, '/');
dd[0] = dd[0].substring(dd[0].lastIndexOf('/') + 1, dd[0].lastIndexOf('.'));
dd[0] = dd[0].replace(/[|&;$%@"<>()+,]/g, "");
var str = {_modified: dd[1], _filename: dd[0], _size: dd[2]};
if (dd[2] > 20971520)
askUser = true;
filenameMod.push(str);
}),
complete: function () {
for (var ii = 0; ii < filenameMod.length; ii++) {
var search = true;
for (var jj = 0; jj < filename.length && search; jj++) {
if (filename[jj] == filenameMod[ii]._filename) {
var d = {_filename: filenameMod[ii]._filename, ext: ext[jj], _WissKI: WissKI.object3d.files[jj], date: new Date(filenameMod[ii]._modified), ind: jj, size: filenameMod[ii]._size};
filenameMod[ii] = d;
search = false;
}
}
}
/*filenameMod.sort(function(a,b) {
return new Date(a.date).getTime() - new Date(b.date).getTime()
});*/
//filenameMod.reverse();
for (var ii = 0; ii < filenameMod.length; ii++) {
if (filenameMod[ii]._filename != '') {
WissKI.object3d.files[ii] = filenameMod[ii]._WissKI;
filename[ii] = filenameMod[ii]._filename;
ext[ii] = filenameMod[ii].ext;
size[ii] = filenameMod[ii].size;
if (ext[ii] == 'dae' || ext[ii] == 'DAE' || filenameMod[ii].size > 20971520) {
askUser = true;
}
}
}
if (askUser) {
$('#object3d-viewer').append("
Loading huge 3D files may cause website suspension and/or long loading time. Are you sure to load this content?
");
$( "#confirm-load" ).dialog({
resizable: false,
height: 210,
modal: true,
buttons: {
"Yes, load it anyway": function() {
$( this ).dialog( "close" );
performInit(filename);
},
Cancel: function() {
$('#spinText_begin').html("You cancelled loading process. There would be 3D content.");
spinner_begin.stop();
$( this ).dialog( "close" );
}
}
});
}
else
performInit(filename);
//performInit(filename);
},
error: function () {
$('#object3d-viewer').append("
Loading huge 3D files may cause website suspension and/or long loading time. Are you sure to load this content?
");
$( "#confirm-load" ).dialog({
resizable: false,
height: 210,
modal: true,
buttons: {
"Yes, load it anyway": function() {
$( this ).dialog( "close" );
performInit(filename);
},
Cancel: function() {
$('#spinText_begin').html("You cancelled loading process. There would be 3D content.");
//$("#object3d-viewer-canvas_0").remove();
spinner_begin.stop();
$( this ).dialog( "close" );
}
}
});
}
});
}
else {
performInit(filename);
}
//performInit(filename);
}
}
}); // end ready
//-->