GRFL: Ground Floor of the main building of Schlodien manor house
Parts of Parts of Parts of Object
Object (Objekt)
Title set
Title
Ground Floor of the main building of Schlodien manor house
Title set
Title
Erdgeschoss des Hauptgebäudes von Herrenhaus Schlodien
');
$('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
//-->