import { Font, FontLoader, Mesh, ShapeGeometry, Vector3, Shape } 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("../resources/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); let geometry = new ShapeGeometry(shapes); geometry.computeBoundingBox(); super(geometry, ColorMaterial.GetBasicMaterial(5)); let center = geometry.boundingBox.getCenter(new Vector3()); this.applyMatrix4(MoveMatrix(new Vector3(-center.x, 0, 0))); } }