46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
![]() |
import { Font, FontLoader, Mesh, ShapeGeometry, Vector3 } from "three";
|
||
|
import { ColorMaterial } from "./ColorPalette";
|
||
|
import { MoveMatrix } from "./GeUtils";
|
||
|
|
||
|
|
||
|
class FontLoaderUtil
|
||
|
{
|
||
|
private static defFont:Font;
|
||
|
static Load():Font
|
||
|
{
|
||
|
if(!this.defFont)
|
||
|
{
|
||
|
const f = require("../node_modules/three/examples/fonts/helvetiker_regular.typeface.json");
|
||
|
let loader = new FontLoader();
|
||
|
this.defFont = loader.parse(f);
|
||
|
}
|
||
|
return this.defFont;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export class DbText extends Mesh
|
||
|
{
|
||
|
/**
|
||
|
*
|
||
|
* 构造一个文本对象,8位点(中心点下面)在0点
|
||
|
* @param {string} str 数字字符串
|
||
|
* @param {number} height 文本高度
|
||
|
* @memberof DbText
|
||
|
*/
|
||
|
constructor(str:string,height:number = 5)
|
||
|
{
|
||
|
|
||
|
let font = FontLoaderUtil.Load();
|
||
|
|
||
|
let shapes: THREE.Shape[] = font.generateShapes(str, height,0.1);
|
||
|
let geometry = new ShapeGeometry(shapes);
|
||
|
|
||
|
geometry.computeBoundingBox();
|
||
|
|
||
|
super(geometry,ColorMaterial.GetLineMaterial(5));
|
||
|
|
||
|
let center = geometry.boundingBox.getCenter(new Vector3());
|
||
|
this.applyMatrix(MoveMatrix(new Vector3(-center.x,0,0)));
|
||
|
}
|
||
|
}
|