Skip to content

Commit e990535

Browse files
committed
save and read done
1 parent 97cc48e commit e990535

File tree

13 files changed

+2782
-834
lines changed

13 files changed

+2782
-834
lines changed

index.html

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<body>
99
<form>
1010
<input type="file" id="inputModel">
11+
<button type="button" onclick="load()">load</button>
1112
<button type="button" id="addMesh" onclick="yo()">add mesh</button>
1213
<button type="button" id="saveScene" onclick="addData()">save scene</button>
1314
<button type="button" id="getScene" onclick="getData()">get scene</button>
@@ -22,8 +23,8 @@
2223
<script src="js/ColladaLoader.js"></script>
2324
<script src="js/basicScene.js"></script>
2425
<script src="js/loadModel.js"></script>
25-
<!--<script src="js/saveScene.js"></script>-->
26-
<script src="testSave.js"></script>
26+
<script src="js/saveScene.js"></script>
27+
<script src="js/getData.js"></script>
2728

2829
<script>
2930
//set up renderer
@@ -37,6 +38,7 @@
3738
init();
3839
} else {
3940
init();
41+
getData();
4042
}
4143
transform();
4244
//render

js/basicScene.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ function init() {
8383
objects = new THREE.Object3D();
8484
objects.name = "objects";
8585
scene.add(objects);
86+
87+
8688
}
8789

8890

@@ -103,12 +105,18 @@ function transform() {
103105
change( 'keydown', function ( event ) {
104106

105107
switch ( event.keyCode ) {
108+
case 46: //delete
109+
transformControls.detach();
110+
eventTransformControls('remove');
111+
object = null;
112+
scene.remove(transformControls);
113+
deleteObject();
106114

107115
case 81: // Q
108116
transformControls.setSpace( transformControls.space === "local" ? "world" : "local" );
109117
break;
110118

111-
case 17: // Ctrl
119+
case 16: // Shift
112120
transformControls.setTranslationSnap( 100 );
113121
transformControls.setRotationSnap( THREE.Math.degToRad( 15 ) );
114122
break;
@@ -143,7 +151,7 @@ function transform() {
143151

144152
switch ( event.keyCode ) {
145153

146-
case 17: // Ctrl
154+
case 16: // Shift
147155
transformControls.setTranslationSnap( null );
148156
transformControls.setRotationSnap( null );
149157
break;
@@ -182,6 +190,7 @@ function transform() {
182190
function handleClick() {
183191
if( onDownPosition.x == onUpPosition.x && onDownPosition.y == onUpPosition.y ) {
184192
var intersects = getIntersects( onUpPosition, objects.children );
193+
console.log(objects.children);
185194

186195
if ( intersects.length > 0 ) {
187196
if (object !== intersects[0].object) {

js/deleteObject.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
/**
2+
* Created by Elsa on 2016/7/12.
3+
*/

js/getData.js

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
function getData() {
2+
3+
var loader = new THREE.XHRLoader();
4+
5+
loader.crossOrigin = '';
6+
7+
//replace "scene.json" by file url
8+
loader.load( "scene.json", function ( data ) {
9+
10+
fromJSON ( JSON.parse( data ));
11+
})
12+
}
13+
14+
function fromJSON( json ) {
15+
16+
var loader = new THREE.ObjectLoader();
17+
18+
19+
if ( json.scene === undefined ) {
20+
21+
setScene( loader.parse( json ) );
22+
return;
23+
24+
}
25+
26+
var camera = loader.parse( json.camera );
27+
var Camera = defaultCamera.clone();
28+
Camera.copy( camera );
29+
Camera.aspect = defaultCamera.aspect;
30+
Camera.updateProjectionMatrix();
31+
32+
33+
setScene( loader.parse( json.scene ) );
34+
35+
}
36+
37+
function setScene( jsonScene ) {
38+
39+
scene = new THREE.Scene();
40+
scene.uuid = jsonScene.uuid;
41+
scene.name = jsonScene.name;
42+
43+
while ( jsonScene.children.length > 0 ) {
44+
45+
addObject( jsonScene.children[ 0 ] );
46+
47+
}
48+
49+
}
50+
51+
function addObject( object ) {
52+
53+
54+
object.traverse( function ( child ) {
55+
56+
if ( child.geometry !== undefined ) addGeometry( child.geometry );
57+
if ( child.material !== undefined ) addMaterial( child.material );
58+
59+
} );
60+
61+
scene.add( object );
62+
objects = scene.children[6];
63+
64+
}
65+
66+
function addGeometry( geometry ) {
67+
var geometries = {};
68+
geometries[ geometry.uuid ] = geometry;
69+
70+
}
71+
72+
function addMaterial( material ) {
73+
var materials = {};
74+
materials[ material.uuid ] = material;
75+
76+
}
77+

js/loadModel.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ function loadModel(file) {
1111
var reader = new FileReader();
1212

1313
if (extension == 'dae') {
14+
1415
reader.addEventListener( 'load', function ( event ) {
1516

1617
var contents = event.target.result;
@@ -60,3 +61,27 @@ function yo() {
6061
objects.add(ball);
6162
}
6263

64+
65+
function load() {
66+
var loader = new THREE.ColladaLoader();
67+
loader.options.convertUpAxis = true;
68+
69+
loader.load(
70+
// resource URL
71+
'model/rocket1.dae',
72+
// Function when resource is loaded
73+
function ( collada ) {
74+
dae = collada.scene;
75+
scene.add( collada.scene );
76+
77+
78+
//dae contains all the objects in a scene,
79+
//cast and receive shadow only works on object.
80+
dae.traverse(function(child) {
81+
child.castShadow = true;
82+
child.receiveShadow = true;
83+
console.log(child);
84+
});
85+
}
86+
);
87+
}

js/saveScene.js

Lines changed: 57 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,110 +1,81 @@
1-
/**
2-
* Created by Elsa on 2016/7/7.
3-
*/
1+
var db;
2+
43
if (!window.indexedDB) {
54
window.alert("Your browser doesn't support a stable version of IndexedDB. Such and such feature will not be available.")
65
}
76

8-
var sceneData = [];
7+
var DBOpenRequest = window.indexedDB.open("sceneList", 1);
8+
9+
DBOpenRequest.onerror = function(event) {
10+
console.log('Error loading database.');
11+
};
912

10-
//open database
11-
//name of database & version
12-
var request = window.indexedDB.open('sceneData',1);
13+
DBOpenRequest.onsuccess = function(event) {
14+
console.log('Database initialised.');
1315

16+
db = DBOpenRequest.result;
1417

15-
request.onerror = function(event) {
16-
console.log("Database error: " + event.target.errorCode);
18+
displayData();
1719
};
1820

19-
20-
//create and update database version
21-
//version naumber: only integer accepted
22-
request.onupgradeneeded = function(event) {
21+
DBOpenRequest.onupgradeneeded = function(event) {
2322
var db = event.target.result;
2423

25-
var objectStore = db.createObjectStore("sceneList");
24+
db.onerror = function (event) {
25+
console.log('Error loading database.');
26+
};
2627

27-
// objectStore.createIndex("scene", "scene", {unique: false});
28-
objectStore.createIndex("camera", "camera", {unique: false});
29-
// objectStore.createIndex("light", "light", {unique: false});
30-
// objectStore.createIndex("objects", "objects", {unique: false});
31-
// objectStore.createIndex("materials", "materials", {unique: false});
28+
// Create an objectStore for this database
29+
var objectStore = db.createObjectStore("sceneList");
3230

31+
// // define what data items the objectStore will contain
32+
// objectStore.createIndex("camera", "camera", {unique: false});
3333
};
3434

3535

36-
function sceneSave () {
37-
getData();
38-
addData();
3936

40-
}
37+
function addData(event) {
38+
//get data
39+
var sceneData = sceneToJson();
4140

42-
function addData() {
43-
for (var i in sceneData) {
44-
objectStore.add(sceneData[i]);
45-
}
46-
}
4741

48-
function getData() {
49-
var savedCamera = {
50-
far: camera.far,
51-
fov: camera.fov,
52-
near: camera.near,
53-
name: camera.name,
54-
position: camera.position,
55-
rotation: camera.rotation,
56-
scale: camera.scale,
57-
type: camera.type,
58-
uuid: camera.uuid
42+
var transaction = db.transaction(["sceneList"], "readwrite");
43+
44+
transaction.oncomplete = function() {
45+
displayData();
46+
};
47+
48+
transaction.onerror = function() {
49+
console.log('Transaction not opened due to error: ' + transaction.error);
5950
};
60-
61-
sceneData.push(savedCamera);
62-
//
63-
// var sceneObjects = scene.children;
64-
// var savedLights = [];
65-
// var savedMeshes = [];
66-
//
67-
// for (var i =0; i < sceneObjects.length; i++) {
68-
// var sceneObject = sceneObjects[i];
69-
//
70-
// switch (sceneObject.type) {
71-
// //light
72-
// case "Light":
73-
// //settings
74-
// break;
75-
// case "PointLight":
76-
// //settings
77-
// break;
78-
// case "SpotLight":
79-
// //settings
80-
// break;
81-
// case "HemisphereLight":
82-
// //settings
83-
// break;
84-
// case "DirectionalLight":
85-
// //settings
86-
// break;
87-
// case "AmbientLight":
88-
// //settings
89-
// break;
90-
//
91-
// //meshes
92-
// case "Object3D":
93-
// //settings
94-
// var objectContainer = sceneObject;
95-
// break;
96-
//
97-
// //default scene
98-
// case "Mesh":
99-
// //settings
100-
// var defaultScene = sceneObject;
101-
// break;
102-
//
103-
// }
104-
105-
106-
}
10751

52+
var objectStore = transaction.objectStore("sceneList");
10853

10954

55+
var objectStoreRequest = objectStore.put( sceneData, 0 );
56+
objectStoreRequest.onsuccess = function(event) {
57+
console.log('New item added to database.');
58+
};
59+
}
60+
61+
62+
function sceneToJson () {
63+
64+
return {
65+
66+
metadata: {},
67+
project: {
68+
69+
},
70+
camera: defaultCamera.toJSON(),
71+
scene: scene.toJSON()
72+
73+
};
74+
75+
}
76+
11077

78+
//display scene
79+
function displayData() {
80+
console.log('display');
81+
}

0 commit comments

Comments
 (0)