Skip to content

Commit 427863f

Browse files
committed
Move 'clone' from AnimationUtils to SkeletonUtils.
1 parent b5a16a5 commit 427863f

File tree

4 files changed

+114
-52
lines changed

4 files changed

+114
-52
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8" />
5+
<base href="../../" />
6+
<script src="list.js"></script>
7+
<script src="page.js"></script>
8+
<link type="text/css" rel="stylesheet" href="page.css" />
9+
</head>
10+
<body>
11+
<h1>[name]</h1>
12+
13+
<p class="desc">Utility functions for [page:Skeleton], [page:SkinnedMesh], and [page:Bone] manipulation.</p>
14+
15+
16+
<h2>Methods</h2>
17+
18+
<h3>[method:Object3D clone]( [param:Object3D object] )</h3>
19+
<p>
20+
Clones the given object and its descendants, ensuring that any [page:SkinnedMesh] instances
21+
are correctly associated with their bones. Bones are also cloned, and must be descendants of
22+
the object passed to this method. Other data, like geometries and materials, are reused by
23+
reference.
24+
</p>
25+
26+
<h3>[method:Object findBoneTrackData]( [param:String name], [param:Array tracks] )</h3>
27+
<p></p>
28+
29+
<h3>[method:Bone getBoneByName]( [param:String name], [param:Skeleton skeleton] )</h3>
30+
<p></p>
31+
32+
<h3>[method:Array getBones]( [param:Skeleton skeleton] )</h3>
33+
<p></p>
34+
35+
<h3>[method:Array getEqualsBonesNames]( [param:Skeleton skeleton], [param:Skeleton targetSkeleton] )</h3>
36+
<p></p>
37+
38+
<h3>[method:SkeletonHelper getHelperFromSkeleton]( [param:Skeleton skeleton] )</h3>
39+
<p></p>
40+
41+
<h3>[method:Bone getNearestBone]( [param:Bone bone], [param:Array names] )</h3>
42+
<p></p>
43+
44+
<h3>[method:Object getSkeletonOffsets]( [param:SkeletonHelper target], [param:SkeletonHelper source], [param:Object options] )</h3>
45+
<p></p>
46+
47+
<h3>[method:this renameBones]( [param:Skeleton skeleton], [param:Array names] )</h3>
48+
<p></p>
49+
50+
<h3>[method:null retarget]( [param:SkeletonHelper target], [param:SkeletonHelper source], [param:Object options] )</h3>
51+
<p></p>
52+
53+
<h3>[method:AnimationClip retargetClip]( [param:SkeletonHelper target], [param:SkeletonHelper source], [param:AnimationClip clip], [param:Object options] )</h3>
54+
<p></p>
55+
56+
<h2>Source</h2>
57+
58+
[link:https://github.com/mrdoob/three.js/blob/master/examples/js/utils/SkeletonUtils.js examples/js/utils/SkeletonUtils.js]
59+
</body>
60+
</html>

docs/list.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,8 @@ var list = {
406406

407407
"Utils": {
408408
"BufferGeometryUtils": "examples/utils/BufferGeometryUtils",
409-
"SceneUtils": "examples/utils/SceneUtils"
409+
"SceneUtils": "examples/utils/SceneUtils",
410+
"SkeletonUtils": "examples/utils/SkeletonUtils"
410411
}
411412

412413
},

examples/js/utils/SkeletonUtils.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,58 @@ THREE.SkeletonUtils = {
528528

529529
return bones;
530530

531+
},
532+
533+
clone: function ( source ) {
534+
535+
var sourceLookup = new Map();
536+
var cloneLookup = new Map();
537+
538+
var clone = source.clone();
539+
540+
parallelTraverse( source, clone, function ( sourceNode, clonedNode ) {
541+
542+
sourceLookup.set( clonedNode, sourceNode );
543+
cloneLookup.set( sourceNode, clonedNode );
544+
545+
} );
546+
547+
clone.traverse( function ( node ) {
548+
549+
if ( ! node.isSkinnedMesh ) return;
550+
551+
var clonedMesh = node;
552+
var sourceMesh = sourceLookup.get( node );
553+
var sourceBones = sourceMesh.skeleton.bones;
554+
555+
clonedMesh.skeleton = sourceMesh.skeleton.clone();
556+
clonedMesh.bindMatrix.copy( sourceMesh.bindMatrix );
557+
558+
clonedMesh.skeleton.bones = sourceBones.map( function ( bone ) {
559+
560+
return cloneLookup.get( bone );
561+
562+
} );
563+
564+
clonedMesh.bind( clonedMesh.skeleton, clonedMesh.bindMatrix );
565+
566+
} );
567+
568+
return clone;
569+
531570
}
532571

533572
};
573+
574+
575+
function parallelTraverse ( a, b, callback ) {
576+
577+
callback( a, b );
578+
579+
for ( var i = 0; i < a.children.length; i ++ ) {
580+
581+
parallelTraverse( a.children[ i ], b.children[ i ], callback );
582+
583+
}
584+
585+
}

src/animation/AnimationUtils.js

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -158,59 +158,8 @@ var AnimationUtils = {
158158

159159
}
160160

161-
},
162-
163-
clone: function ( source ) {
164-
165-
var sourceLookup = new Map();
166-
var cloneLookup = new Map();
167-
168-
var clone = source.clone();
169-
170-
parallelTraverse( source, clone, function ( sourceNode, clonedNode ) {
171-
172-
sourceLookup.set( clonedNode, sourceNode );
173-
cloneLookup.set( sourceNode, clonedNode );
174-
175-
} );
176-
177-
clone.traverse( function ( node ) {
178-
179-
if ( ! node.isSkinnedMesh ) return;
180-
181-
var clonedMesh = node;
182-
var sourceMesh = sourceLookup.get( node );
183-
var sourceBones = sourceMesh.skeleton.bones;
184-
185-
clonedMesh.skeleton = sourceMesh.skeleton.clone();
186-
clonedMesh.bindMatrix.copy( sourceMesh.bindMatrix );
187-
188-
clonedMesh.skeleton.bones = sourceBones.map( function ( bone ) {
189-
190-
return cloneLookup.get( bone );
191-
192-
} );
193-
194-
clonedMesh.bind( clonedMesh.skeleton, clonedMesh.bindMatrix );
195-
196-
} );
197-
198-
return clone;
199-
200161
}
201162

202163
};
203164

204-
function parallelTraverse ( a, b, callback ) {
205-
206-
callback( a, b );
207-
208-
for ( var i = 0; i < a.children.length; i ++ ) {
209-
210-
parallelTraverse( a.children[ i ], b.children[ i ], callback );
211-
212-
}
213-
214-
}
215-
216165
export { AnimationUtils };

0 commit comments

Comments
 (0)