Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
车家大少爷
three.js
提交
06ed1e8d
T
three.js
项目概览
车家大少爷
/
three.js
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
three.js
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
06ed1e8d
编写于
4月 22, 2013
作者:
M
Mr.doob
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'arodic/editorRefactoring' into dev
上级
28136e7b
105611a4
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
372 addition
and
368 deletion
+372
-368
editor/index.html
editor/index.html
+5
-368
editor/js/Loader.js
editor/js/Loader.js
+367
-0
未找到文件。
editor/index.html
浏览文件 @
06ed1e8d
...
...
@@ -97,6 +97,7 @@
<script
src=
"js/libs/signals.min.js"
></script>
<script
src=
"js/Loader.js"
></script>
<script
src=
"js/UI.js"
></script>
<script
src=
"js/UI.three.js"
></script>
<script
src=
"js/ui/Menubar.js"
></script>
...
...
@@ -155,6 +156,8 @@
//
var
loader
=
new
Loader
(
signals
);
var
viewport
=
new
Viewport
(
signals
);
viewport
.
setTop
(
'
32px
'
);
viewport
.
setLeft
(
'
0px
'
);
...
...
@@ -180,374 +183,6 @@
sidebar
.
setBottom
(
'
0px
'
);
document
.
body
.
appendChild
(
sidebar
.
dom
);
document
.
addEventListener
(
'
dragover
'
,
function
(
event
)
{
event
.
preventDefault
();
event
.
dataTransfer
.
dropEffect
=
'
copy
'
;
},
false
);
document
.
addEventListener
(
'
drop
'
,
function
(
event
)
{
event
.
preventDefault
();
var
file
=
event
.
dataTransfer
.
files
[
0
];
var
chunks
=
file
.
name
.
split
(
'
.
'
);
var
extension
=
chunks
.
pop
().
toLowerCase
();
var
filename
=
chunks
.
join
(
'
.
'
);
parseFile
(
file
,
filename
,
extension
);
},
false
);
var
parseFile
=
function
(
file
,
filename
,
extension
)
{
switch
(
extension
)
{
case
'
ctm
'
:
var
reader
=
new
FileReader
();
reader
.
addEventListener
(
'
load
'
,
function
(
event
)
{
var
contents
=
event
.
target
.
result
;
var
stream
=
new
CTM
.
Stream
(
contents
);
stream
.
offset
=
0
;
var
loader
=
new
THREE
.
CTMLoader
();
loader
.
createModelClassic
(
new
CTM
.
File
(
stream
),
function
(
geometry
)
{
geometry
.
sourceType
=
"
ctm
"
;
geometry
.
sourceFile
=
file
.
name
;
var
material
=
new
THREE
.
MeshPhongMaterial
();
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
material
);
mesh
.
name
=
filename
;
signals
.
objectAdded
.
dispatch
(
mesh
);
signals
.
objectSelected
.
dispatch
(
mesh
);
}
);
},
false
);
reader
.
readAsBinaryString
(
file
);
break
;
case
'
dae
'
:
var
reader
=
new
FileReader
();
reader
.
addEventListener
(
'
load
'
,
function
(
event
)
{
var
contents
=
event
.
target
.
result
;
var
parser
=
new
DOMParser
();
var
xml
=
parser
.
parseFromString
(
contents
,
'
text/xml
'
);
var
loader
=
new
THREE
.
ColladaLoader
();
loader
.
parse
(
xml
,
function
(
collada
)
{
collada
.
scene
.
name
=
filename
;
signals
.
objectAdded
.
dispatch
(
collada
.
scene
);
signals
.
objectSelected
.
dispatch
(
collada
.
scene
);
}
);
},
false
);
reader
.
readAsText
(
file
);
break
;
case
'
js
'
:
case
'
json
'
:
var
handleJSON
=
function
(
data
)
{
if
(
data
.
metadata
===
undefined
)
{
// 2.0
data
.
metadata
=
{
type
:
'
geometry
'
};
}
if
(
data
.
metadata
.
type
===
undefined
)
{
// 3.0
data
.
metadata
.
type
=
'
geometry
'
;
}
if
(
data
.
metadata
.
version
===
undefined
)
{
data
.
metadata
.
version
=
data
.
metadata
.
formatVersion
;
}
if
(
data
.
metadata
.
type
===
'
geometry
'
)
{
var
loader
=
new
THREE
.
JSONLoader
();
var
result
=
loader
.
parse
(
data
);
var
geometry
=
result
.
geometry
;
var
material
=
result
.
materials
!==
undefined
?
new
THREE
.
MeshFaceMaterial
(
result
.
materials
)
:
new
THREE
.
MeshPhongMaterial
();
geometry
.
sourceType
=
"
ascii
"
;
geometry
.
sourceFile
=
file
.
name
;
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
material
);
mesh
.
name
=
filename
;
signals
.
objectAdded
.
dispatch
(
mesh
);
signals
.
objectSelected
.
dispatch
(
mesh
);
}
else
if
(
data
.
metadata
.
type
===
'
object
'
)
{
var
loader
=
new
THREE
.
ObjectLoader
();
var
result
=
loader
.
parse
(
data
);
if
(
result
instanceof
THREE
.
Scene
)
{
signals
.
sceneAdded
.
dispatch
(
result
);
}
else
{
signals
.
objectAdded
.
dispatch
(
result
);
}
}
else
if
(
data
.
metadata
.
type
===
'
scene
'
)
{
// DEPRECATED
var
loader
=
new
THREE
.
SceneLoader
();
loader
.
parse
(
data
,
function
(
result
)
{
var
scene
=
result
.
scene
;
while
(
scene
.
children
.
length
>
0
)
{
signals
.
objectAdded
.
dispatch
(
scene
.
children
[
0
]
);
}
},
''
);
}
};
var
reader
=
new
FileReader
();
reader
.
addEventListener
(
'
load
'
,
function
(
event
)
{
var
contents
=
event
.
target
.
result
;
// 2.0
if
(
contents
.
indexOf
(
'
postMessage
'
)
!==
-
1
)
{
var
blob
=
new
Blob
(
[
contents
],
{
type
:
'
text/javascript
'
}
);
var
url
=
URL
.
createObjectURL
(
blob
);
var
worker
=
new
Worker
(
url
);
worker
.
onmessage
=
function
(
event
)
{
event
.
data
.
metadata
=
{
version
:
2
};
handleJSON
(
event
.
data
);
};
worker
.
postMessage
(
Date
.
now
()
);
return
;
}
// >= 3.0
var
data
;
try
{
data
=
JSON
.
parse
(
contents
);
}
catch
(
error
)
{
alert
(
error
);
return
;
}
handleJSON
(
data
);
},
false
);
reader
.
readAsText
(
file
);
break
;
case
'
obj
'
:
var
reader
=
new
FileReader
();
reader
.
addEventListener
(
'
load
'
,
function
(
event
)
{
var
contents
=
event
.
target
.
result
;
var
object
=
new
THREE
.
OBJLoader
().
parse
(
contents
);
object
.
name
=
filename
;
signals
.
objectAdded
.
dispatch
(
object
);
signals
.
objectSelected
.
dispatch
(
object
);
},
false
);
reader
.
readAsText
(
file
);
break
;
case
'
ply
'
:
var
reader
=
new
FileReader
();
reader
.
addEventListener
(
'
load
'
,
function
(
event
)
{
var
contents
=
event
.
target
.
result
;
console
.
log
(
contents
);
var
geometry
=
new
THREE
.
PLYLoader
().
parse
(
contents
);
geometry
.
sourceType
=
"
ply
"
;
geometry
.
sourceFile
=
file
.
name
;
var
material
=
new
THREE
.
MeshPhongMaterial
();
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
material
);
mesh
.
name
=
filename
;
signals
.
objectAdded
.
dispatch
(
mesh
);
signals
.
objectSelected
.
dispatch
(
mesh
);
},
false
);
reader
.
readAsText
(
file
);
break
;
case
'
stl
'
:
var
reader
=
new
FileReader
();
reader
.
addEventListener
(
'
load
'
,
function
(
event
)
{
var
contents
=
event
.
target
.
result
;
var
geometry
=
new
THREE
.
STLLoader
().
parse
(
contents
);
geometry
.
sourceType
=
"
stl
"
;
geometry
.
sourceFile
=
file
.
name
;
var
material
=
new
THREE
.
MeshPhongMaterial
();
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
material
);
mesh
.
name
=
filename
;
signals
.
objectAdded
.
dispatch
(
mesh
);
signals
.
objectSelected
.
dispatch
(
mesh
);
},
false
);
reader
.
readAsBinaryString
(
file
);
break
;
/*
case 'utf8':
var reader = new FileReader();
reader.addEventListener( 'load', function ( event ) {
var contents = event.target.result;
var geometry = new THREE.UTF8Loader().parse( contents );
var material = new THREE.MeshLambertMaterial();
var mesh = new THREE.Mesh( geometry, material );
signals.objectAdded.dispatch( mesh );
signals.objectSelected.dispatch( mesh );
}, false );
reader.readAsBinaryString( file );
break;
*/
case
'
vtk
'
:
var
reader
=
new
FileReader
();
reader
.
addEventListener
(
'
load
'
,
function
(
event
)
{
var
contents
=
event
.
target
.
result
;
var
geometry
=
new
THREE
.
VTKLoader
().
parse
(
contents
);
geometry
.
sourceType
=
"
vtk
"
;
geometry
.
sourceFile
=
file
.
name
;
var
material
=
new
THREE
.
MeshPhongMaterial
();
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
material
);
mesh
.
name
=
filename
;
signals
.
objectAdded
.
dispatch
(
mesh
);
signals
.
objectSelected
.
dispatch
(
mesh
);
},
false
);
reader
.
readAsText
(
file
);
break
;
}
}
// localStorage
if
(
localStorage
.
threejsEditor
!==
undefined
)
{
var
loader
=
new
THREE
.
ObjectLoader
();
var
scene
=
loader
.
parse
(
JSON
.
parse
(
localStorage
.
threejsEditor
)
);
signals
.
sceneAdded
.
dispatch
(
scene
);
}
var
timeout
;
var
sceneExporter
=
new
THREE
.
ObjectExporter
();
signals
.
sceneChanged
.
add
(
function
(
scene
)
{
clearTimeout
(
timeout
);
timeout
=
setTimeout
(
function
()
{
localStorage
.
threejsEditor
=
JSON
.
stringify
(
sceneExporter
.
parse
(
scene
)
);
},
3000
);
}
);
//
document
.
addEventListener
(
'
keydown
'
,
function
(
event
)
{
switch
(
event
.
keyCode
)
{
case
46
:
// delete
signals
.
removeSelectedObject
.
dispatch
();
break
;
}
},
false
);
var
onWindowResize
=
function
(
event
)
{
signals
.
windowResize
.
dispatch
();
...
...
@@ -558,6 +193,8 @@
onWindowResize
();
loader
.
loadLocalStorage
();
</script>
</body>
</html>
editor/js/Loader.js
0 → 100644
浏览文件 @
06ed1e8d
var
Loader
=
function
(
signals
)
{
scope
=
this
;
var
sceneExporter
=
new
THREE
.
ObjectExporter
();
document
.
addEventListener
(
'
dragover
'
,
function
(
event
)
{
event
.
preventDefault
();
event
.
dataTransfer
.
dropEffect
=
'
copy
'
;
},
false
);
document
.
addEventListener
(
'
drop
'
,
function
(
event
)
{
event
.
preventDefault
();
var
file
=
event
.
dataTransfer
.
files
[
0
];
var
chunks
=
file
.
name
.
split
(
'
.
'
);
var
extension
=
chunks
.
pop
().
toLowerCase
();
var
filename
=
chunks
.
join
(
'
.
'
);
scope
.
parseFile
(
file
,
filename
,
extension
);
},
false
);
var
timeout
;
signals
.
sceneChanged
.
add
(
function
(
scene
)
{
clearTimeout
(
timeout
);
timeout
=
setTimeout
(
function
()
{
scope
.
saveLocalStorage
(
scene
);
},
3000
);
}
);
this
.
loadLocalStorage
=
function
()
{
if
(
localStorage
.
threejsEditor
!==
undefined
)
{
var
loader
=
new
THREE
.
ObjectLoader
();
var
scene
=
loader
.
parse
(
JSON
.
parse
(
localStorage
.
threejsEditor
)
);
signals
.
sceneAdded
.
dispatch
(
scene
);
}
};
this
.
saveLocalStorage
=
function
(
scene
)
{
localStorage
.
threejsEditor
=
JSON
.
stringify
(
sceneExporter
.
parse
(
scene
)
);
}
this
.
handleJSON
=
function
(
data
)
{
if
(
data
.
metadata
===
undefined
)
{
// 2.0
data
.
metadata
=
{
type
:
'
geometry
'
};
}
if
(
data
.
metadata
.
type
===
undefined
)
{
// 3.0
data
.
metadata
.
type
=
'
geometry
'
;
}
if
(
data
.
metadata
.
version
===
undefined
)
{
data
.
metadata
.
version
=
data
.
metadata
.
formatVersion
;
}
if
(
data
.
metadata
.
type
===
'
geometry
'
)
{
var
loader
=
new
THREE
.
JSONLoader
();
var
result
=
loader
.
parse
(
data
);
var
geometry
=
result
.
geometry
;
var
material
=
result
.
materials
!==
undefined
?
new
THREE
.
MeshFaceMaterial
(
result
.
materials
)
:
new
THREE
.
MeshPhongMaterial
();
geometry
.
sourceType
=
"
ascii
"
;
geometry
.
sourceFile
=
file
.
name
;
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
material
);
mesh
.
name
=
filename
;
signals
.
objectAdded
.
dispatch
(
mesh
);
signals
.
objectSelected
.
dispatch
(
mesh
);
}
else
if
(
data
.
metadata
.
type
===
'
object
'
)
{
var
loader
=
new
THREE
.
ObjectLoader
();
var
result
=
loader
.
parse
(
data
);
if
(
result
instanceof
THREE
.
Scene
)
{
signals
.
sceneAdded
.
dispatch
(
result
);
}
else
{
signals
.
objectAdded
.
dispatch
(
result
);
}
}
else
if
(
data
.
metadata
.
type
===
'
scene
'
)
{
// DEPRECATED
var
loader
=
new
THREE
.
SceneLoader
();
loader
.
parse
(
data
,
function
(
result
)
{
var
scene
=
result
.
scene
;
while
(
scene
.
children
.
length
>
0
)
{
signals
.
objectAdded
.
dispatch
(
scene
.
children
[
0
]
);
}
},
''
);
}
};
this
.
parseFile
=
function
(
file
,
filename
,
extension
)
{
switch
(
extension
)
{
case
'
ctm
'
:
var
reader
=
new
FileReader
();
reader
.
addEventListener
(
'
load
'
,
function
(
event
)
{
var
contents
=
event
.
target
.
result
;
var
stream
=
new
CTM
.
Stream
(
contents
);
stream
.
offset
=
0
;
var
loader
=
new
THREE
.
CTMLoader
();
loader
.
createModelClassic
(
new
CTM
.
File
(
stream
),
function
(
geometry
)
{
geometry
.
sourceType
=
"
ctm
"
;
geometry
.
sourceFile
=
file
.
name
;
var
material
=
new
THREE
.
MeshPhongMaterial
();
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
material
);
mesh
.
name
=
filename
;
signals
.
objectAdded
.
dispatch
(
mesh
);
signals
.
objectSelected
.
dispatch
(
mesh
);
}
);
},
false
);
reader
.
readAsBinaryString
(
file
);
break
;
case
'
dae
'
:
var
reader
=
new
FileReader
();
reader
.
addEventListener
(
'
load
'
,
function
(
event
)
{
var
contents
=
event
.
target
.
result
;
var
parser
=
new
DOMParser
();
var
xml
=
parser
.
parseFromString
(
contents
,
'
text/xml
'
);
var
loader
=
new
THREE
.
ColladaLoader
();
loader
.
parse
(
xml
,
function
(
collada
)
{
collada
.
scene
.
name
=
filename
;
signals
.
objectAdded
.
dispatch
(
collada
.
scene
);
signals
.
objectSelected
.
dispatch
(
collada
.
scene
);
}
);
},
false
);
reader
.
readAsText
(
file
);
break
;
case
'
js
'
:
case
'
json
'
:
var
reader
=
new
FileReader
();
reader
.
addEventListener
(
'
load
'
,
function
(
event
)
{
var
contents
=
event
.
target
.
result
;
// 2.0
if
(
contents
.
indexOf
(
'
postMessage
'
)
!==
-
1
)
{
var
blob
=
new
Blob
(
[
contents
],
{
type
:
'
text/javascript
'
}
);
var
url
=
URL
.
createObjectURL
(
blob
);
var
worker
=
new
Worker
(
url
);
worker
.
onmessage
=
function
(
event
)
{
event
.
data
.
metadata
=
{
version
:
2
};
scope
.
handleJSON
(
event
.
data
);
};
worker
.
postMessage
(
Date
.
now
()
);
return
;
}
// >= 3.0
var
data
;
try
{
data
=
JSON
.
parse
(
contents
);
}
catch
(
error
)
{
alert
(
error
);
return
;
}
scope
.
handleJSON
(
data
);
},
false
);
reader
.
readAsText
(
file
);
break
;
case
'
obj
'
:
var
reader
=
new
FileReader
();
reader
.
addEventListener
(
'
load
'
,
function
(
event
)
{
var
contents
=
event
.
target
.
result
;
var
object
=
new
THREE
.
OBJLoader
().
parse
(
contents
);
object
.
name
=
filename
;
signals
.
objectAdded
.
dispatch
(
object
);
signals
.
objectSelected
.
dispatch
(
object
);
},
false
);
reader
.
readAsText
(
file
);
break
;
case
'
ply
'
:
var
reader
=
new
FileReader
();
reader
.
addEventListener
(
'
load
'
,
function
(
event
)
{
var
contents
=
event
.
target
.
result
;
console
.
log
(
contents
);
var
geometry
=
new
THREE
.
PLYLoader
().
parse
(
contents
);
geometry
.
sourceType
=
"
ply
"
;
geometry
.
sourceFile
=
file
.
name
;
var
material
=
new
THREE
.
MeshPhongMaterial
();
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
material
);
mesh
.
name
=
filename
;
signals
.
objectAdded
.
dispatch
(
mesh
);
signals
.
objectSelected
.
dispatch
(
mesh
);
},
false
);
reader
.
readAsText
(
file
);
break
;
case
'
stl
'
:
var
reader
=
new
FileReader
();
reader
.
addEventListener
(
'
load
'
,
function
(
event
)
{
var
contents
=
event
.
target
.
result
;
var
geometry
=
new
THREE
.
STLLoader
().
parse
(
contents
);
geometry
.
sourceType
=
"
stl
"
;
geometry
.
sourceFile
=
file
.
name
;
var
material
=
new
THREE
.
MeshPhongMaterial
();
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
material
);
mesh
.
name
=
filename
;
signals
.
objectAdded
.
dispatch
(
mesh
);
signals
.
objectSelected
.
dispatch
(
mesh
);
},
false
);
reader
.
readAsBinaryString
(
file
);
break
;
/*
case 'utf8':
var reader = new FileReader();
reader.addEventListener( 'load', function ( event ) {
var contents = event.target.result;
var geometry = new THREE.UTF8Loader().parse( contents );
var material = new THREE.MeshLambertMaterial();
var mesh = new THREE.Mesh( geometry, material );
signals.objectAdded.dispatch( mesh );
signals.objectSelected.dispatch( mesh );
}, false );
reader.readAsBinaryString( file );
break;
*/
case
'
vtk
'
:
var
reader
=
new
FileReader
();
reader
.
addEventListener
(
'
load
'
,
function
(
event
)
{
var
contents
=
event
.
target
.
result
;
var
geometry
=
new
THREE
.
VTKLoader
().
parse
(
contents
);
geometry
.
sourceType
=
"
vtk
"
;
geometry
.
sourceFile
=
file
.
name
;
var
material
=
new
THREE
.
MeshPhongMaterial
();
var
mesh
=
new
THREE
.
Mesh
(
geometry
,
material
);
mesh
.
name
=
filename
;
signals
.
objectAdded
.
dispatch
(
mesh
);
signals
.
objectSelected
.
dispatch
(
mesh
);
},
false
);
reader
.
readAsText
(
file
);
break
;
}
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录