UNPKG

xtorcga

Version:

Xtor Compute Geometry Algorithm Libary 计算几何算法库

81 lines (80 loc) 2.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.linksToGeometry = exports.linkToGeometry = exports.extrudeToGeometryBuffer = exports.toGeometryBuffer = void 0; /* * @Description : * @Author : 赵耀圣 * @Q群 : 632839661 * @Date : 2020-12-10 15:01:42 * @LastEditTime : 2021-03-11 10:54:11 * @FilePath : \cga.js\src\extends\geometryaid.ts */ var mesh_1 = require("../render/mesh"); var extrude_1 = require("../alg/extrude"); var trianglution_1 = require("../alg/trianglution"); var array_1 = require("../utils/array"); function toGeometryBuffer(geo) { var buffer = mesh_1.toGeoBuffer(geo.position, geo.index, geo.uv); return buffer; } exports.toGeometryBuffer = toGeometryBuffer; /** * shape 挤压后转几何体 * @param {*} shape * @param {*} arg_path * @param {*} options */ function extrudeToGeometryBuffer(shape, arg_path, options) { var extrudeRes = extrude_1.extrude_obsolete(shape, arg_path, options); return mesh_1.toGeoBuffer(extrudeRes.vertices, extrudeRes.index, extrudeRes.uvs); } exports.extrudeToGeometryBuffer = extrudeToGeometryBuffer; /** * 两个轮廓缝合 * @param {*} shape * @param {*} arg_path * @param {*} options * @param {*} material */ function linkToGeometry(shape, shape1, axisPlane, shapeClose) { if (axisPlane === void 0) { axisPlane = trianglution_1.AxisPlane.XY; } if (shapeClose === void 0) { shapeClose = false; } var geo = extrude_1.linkSides({ shapes: [shape, shape1], shapeClosed: shapeClose, orgShape: shape, axisPlane: axisPlane }); var geometry = toGeometryBuffer(geo); return geometry; } exports.linkToGeometry = linkToGeometry; /** * 多个轮廓缝合 * @param shapes * @param isClose * @param material */ function linksToGeometry(shapes, pathClosed, shapeClosed) { if (pathClosed === void 0) { pathClosed = true; } if (shapeClosed === void 0) { shapeClosed = true; } var vertices = array_1.flat(shapes); mesh_1.indexable(vertices); var geo = extrude_1.linkSides({ shapes: shapes, shapeClosed: pathClosed, orgShape: shapes[0] }); var geometry = toGeometryBuffer(geo); return geometry; } exports.linksToGeometry = linksToGeometry; // /** // * 三角剖分后转成几何体 // * 只考虑XY平面 // * @param {*} boundary // * @param {*} hole // * @param {*} options // */ // export function trianglutionToGeometryBuffer(boundary: any, holes: any[] = [], options: any = { normal: Vec3.UnitZ }) { // var triangles = triangulation(boundary, holes, options) // var vertices = [...boundary, ...flat(holes)] // var uvs: any = []; // vertices.reduce((acc, v) => { // acc.push(v.x, v.y); // return acc; // }, uvs); // var geometry = toGeometryBuffer(vertices, triangles, uvs); // return geometry; // }