69 lines
2.3 KiB
JavaScript
69 lines
2.3 KiB
JavaScript
import { buildUvs, buildSimpleUvs } from '../../../../rendering/renderers/shared/geometry/utils/buildUvs.mjs';
|
|
import { transformVertices } from '../../../../rendering/renderers/shared/geometry/utils/transformVertices.mjs';
|
|
import { MeshGeometry } from '../../../mesh/shared/MeshGeometry.mjs';
|
|
import { buildCircle } from '../buildCommands/buildCircle.mjs';
|
|
import { buildPolygon } from '../buildCommands/buildPolygon.mjs';
|
|
import { buildRectangle } from '../buildCommands/buildRectangle.mjs';
|
|
import { buildTriangle } from '../buildCommands/buildTriangle.mjs';
|
|
import { GraphicsPath } from '../path/GraphicsPath.mjs';
|
|
|
|
"use strict";
|
|
const buildMap = {
|
|
rectangle: buildRectangle,
|
|
polygon: buildPolygon,
|
|
triangle: buildTriangle,
|
|
circle: buildCircle,
|
|
ellipse: buildCircle,
|
|
roundedRectangle: buildCircle
|
|
};
|
|
function buildGeometryFromPath(options) {
|
|
if (options instanceof GraphicsPath) {
|
|
options = {
|
|
path: options,
|
|
textureMatrix: null,
|
|
out: null
|
|
};
|
|
}
|
|
const vertices = [];
|
|
const uvs = [];
|
|
const indices = [];
|
|
const shapePath = options.path.shapePath;
|
|
const textureMatrix = options.textureMatrix;
|
|
shapePath.shapePrimitives.forEach(({ shape, transform: matrix }) => {
|
|
const indexOffset = indices.length;
|
|
const vertOffset = vertices.length / 2;
|
|
const points = [];
|
|
const build = buildMap[shape.type];
|
|
build.build(shape, points);
|
|
if (matrix) {
|
|
transformVertices(points, matrix);
|
|
}
|
|
build.triangulate(points, vertices, 2, vertOffset, indices, indexOffset);
|
|
const uvsOffset = uvs.length / 2;
|
|
if (textureMatrix) {
|
|
if (matrix) {
|
|
textureMatrix.append(matrix.clone().invert());
|
|
}
|
|
buildUvs(vertices, 2, vertOffset, uvs, uvsOffset, 2, vertices.length / 2 - vertOffset, textureMatrix);
|
|
} else {
|
|
buildSimpleUvs(uvs, uvsOffset, 2, vertices.length / 2 - vertOffset);
|
|
}
|
|
});
|
|
const out = options.out;
|
|
if (out) {
|
|
out.positions = new Float32Array(vertices);
|
|
out.uvs = new Float32Array(uvs);
|
|
out.indices = new Uint32Array(indices);
|
|
return out;
|
|
}
|
|
const geometry = new MeshGeometry({
|
|
positions: new Float32Array(vertices),
|
|
uvs: new Float32Array(uvs),
|
|
indices: new Uint32Array(indices)
|
|
});
|
|
return geometry;
|
|
}
|
|
|
|
export { buildGeometryFromPath };
|
|
//# sourceMappingURL=buildGeometryFromPath.mjs.map
|