import { Font, FontLoader, Matrix4, Mesh, Shape, ShapeGeometry, Vector3 } from "three"; import { ColorMaterial } from "./ColorPalette"; import { MoveMatrix } from "./GeUtils"; import { XAxis, XAxisN, YAxis, YAxisN, ZAxisN } from "./Utils"; 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: 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))); } CreateDoubleMesh(IsFsText: boolean) { let mesh2 = new Mesh(this.geometry, ColorMaterial.GetBasicMaterial(5)); //左右视图时应该这样,俯视图是X,-Y,-Z(y+=(xxx) if (IsFsText) { mesh2.applyMatrix4(new Matrix4().makeBasis(XAxis, YAxisN, ZAxisN)); } else { mesh2.applyMatrix4(new Matrix4().makeBasis(XAxisN, YAxis, ZAxisN)); } this.add(mesh2); } }