提交 0e74e725 编写于 作者: M Mr.doob

Font: Clean up.

上级 a46d7393
......@@ -13,7 +13,7 @@ THREE.Font.prototype = {
constructor: THREE.Font,
generateShapes: function ( text, size, curveSegments ) {
generateShapes: function ( text, size, divisions ) {
function createPaths( text ) {
......@@ -25,9 +25,7 @@ THREE.Font.prototype = {
for ( var i = 0; i < chars.length; i ++ ) {
var path = new THREE.Path();
var ret = extractGlyphPoints( chars[ i ], scale, offset, path );
var ret = createPath( chars[ i ], scale, offset );
offset += ret.offset;
paths.push( ret.path );
......@@ -38,118 +36,102 @@ THREE.Font.prototype = {
}
function extractGlyphPoints( c, scale, offset, path ) {
var pts = [];
function createPath( c, scale, offset ) {
var b2 = THREE.ShapeUtils.b2;
var b3 = THREE.ShapeUtils.b3;
var i, i2, divisions,
outline, action, length,
scaleX, scaleY,
x, y, cpx, cpy, cpx0, cpy0, cpx1, cpy1, cpx2, cpy2,
laste,
glyph = data.glyphs[ c ] || data.glyphs[ '?' ];
var glyph = data.glyphs[ c ] || data.glyphs[ '?' ];
if ( ! glyph ) return;
if ( glyph.o ) {
var path = new THREE.Path();
outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );
length = outline.length;
var pts = [], b2 = THREE.ShapeUtils.b2, b3 = THREE.ShapeUtils.b3;
var x, y, cpx, cpy, cpx0, cpy0, cpx1, cpy1, cpx2, cpy2, laste;
scaleX = scale;
scaleY = scale;
if ( glyph.o ) {
for ( i = 0; i < length; ) {
var outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );
action = outline[ i ++ ];
for ( var i = 0, l = outline.length; i < l; ) {
//console.log( action );
var action = outline[ i ++ ];
switch ( action ) {
case 'm':
case 'm': // moveTo
// Move To
x = outline[ i ++ ] * scale + offset;
y = outline[ i ++ ] * scale;
x = outline[ i ++ ] * scaleX + offset;
y = outline[ i ++ ] * scaleY;
path.moveTo( x, y );
path.moveTo( x, y );
break;
break;
case 'l':
case 'l': // lineTo
// Line To
x = outline[ i ++ ] * scale + offset;
y = outline[ i ++ ] * scale;
x = outline[ i ++ ] * scaleX + offset;
y = outline[ i ++ ] * scaleY;
path.lineTo( x, y );
break;
path.lineTo( x, y );
case 'q':
break;
// QuadraticCurveTo
case 'q': // quadraticCurveTo
cpx = outline[ i ++ ] * scaleX + offset;
cpy = outline[ i ++ ] * scaleY;
cpx1 = outline[ i ++ ] * scaleX + offset;
cpy1 = outline[ i ++ ] * scaleY;
cpx = outline[ i ++ ] * scale + offset;
cpy = outline[ i ++ ] * scale;
cpx1 = outline[ i ++ ] * scale + offset;
cpy1 = outline[ i ++ ] * scale;
path.quadraticCurveTo( cpx1, cpy1, cpx, cpy );
path.quadraticCurveTo( cpx1, cpy1, cpx, cpy );
laste = pts[ pts.length - 1 ];
laste = pts[ pts.length - 1 ];
if ( laste ) {
if ( laste ) {
cpx0 = laste.x;
cpy0 = laste.y;
cpx0 = laste.x;
cpy0 = laste.y;
for ( i2 = 1, divisions = this.divisions; i2 <= divisions; i2 ++ ) {
for ( var i2 = 1; i2 <= divisions; i2 ++ ) {
var t = i2 / divisions;
b2( t, cpx0, cpx1, cpx );
b2( t, cpy0, cpy1, cpy );
var t = i2 / divisions;
b2( t, cpx0, cpx1, cpx );
b2( t, cpy0, cpy1, cpy );
}
}
}
}
break;
break;
case 'b':
case 'b': // bezierCurveTo
// Cubic Bezier Curve
cpx = outline[ i ++ ] * scale + offset;
cpy = outline[ i ++ ] * scale;
cpx1 = outline[ i ++ ] * scale + offset;
cpy1 = outline[ i ++ ] * scale;
cpx2 = outline[ i ++ ] * scale + offset;
cpy2 = outline[ i ++ ] * scale;
cpx = outline[ i ++ ] * scaleX + offset;
cpy = outline[ i ++ ] * scaleY;
cpx1 = outline[ i ++ ] * scaleX + offset;
cpy1 = outline[ i ++ ] * scaleY;
cpx2 = outline[ i ++ ] * scaleX + offset;
cpy2 = outline[ i ++ ] * scaleY;
path.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );
path.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );
laste = pts[ pts.length - 1 ];
laste = pts[ pts.length - 1 ];
if ( laste ) {
if ( laste ) {
cpx0 = laste.x;
cpy0 = laste.y;
cpx0 = laste.x;
cpy0 = laste.y;
for ( var i2 = 1; i2 <= divisions; i2 ++ ) {
for ( i2 = 1, divisions = this.divisions; i2 <= divisions; i2 ++ ) {
var t = i2 / divisions;
b3( t, cpx0, cpx1, cpx2, cpx );
b3( t, cpy0, cpy1, cpy2, cpy );
var t = i2 / divisions;
b3( t, cpx0, cpx1, cpx2, cpx );
b3( t, cpy0, cpy1, cpy2, cpy );
}
}
}
break;
break;
}
......@@ -164,7 +146,7 @@ THREE.Font.prototype = {
//
if ( size === undefined ) size = 100;
if ( curveSegments === undefined ) curveSegments = 4;
if ( divisions === undefined ) divisions = 4;
var data = this.data;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册