UNPKG

xtorcga

Version:

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

76 lines (75 loc) 2.53 kB
"use strict"; /* * @Description : * @Author : 赵耀圣 * @QQ : 549184003 * @Date : 2021-08-03 10:18:26 * @LastEditTime : 2021-08-03 15:56:34 * @FilePath : \cga.js\src\csg\node.ts */ Object.defineProperty(exports, "__esModule", { value: true }); exports.Node = void 0; var Node = /** @class */ (function () { function Node(polygons) { if (polygons === void 0) { polygons = []; } this.polygons = polygons; if (polygons && polygons.length > 0) this.divider = polygons[0].clone(); var i = 0; var plen = polygons.length; var front = [], back = []; if (this.divider) for (i = 0; i < plen; i++) { this.divider.splitPolygon(polygons[i], this.polygons, this.polygons, front, back); } if (front.length > 0) { this.front = new Node(front); } if (back.length > 0) { this.back = new Node(back); } } Node.prototype.clone = function () { var node = new Node(); if (this.divider) node.divider = this.divider.clone(); node.polygons = this.polygons.map(function (polygon) { return polygon.clone(); }); node.front = this.front && this.front.clone(); node.back = this.back && this.back.clone(); return node; }; Node.prototype.invert = function () { var i, polygon_count, temp; for (i = 0, polygon_count = this.polygons.length; i < polygon_count; i++) { this.polygons[i].flip(); } }; Node.prototype.clipPolygons = function (polygons) { var i, plen, front = [], back = []; if (!this.divider) return polygons.slice(); front = []; back = []; for (i = 0, plen = polygons.length; i < plen; i++) { this.divider.splitPolygon(polygons[i], front, back, front, back); } if (this.front) front = this.front.clipPolygons(front); if (this.back) back = this.back.clipPolygons(back); else back = []; return front.concat(back); }; Node.prototype.clipTo = function (node) { this.polygons = node.clipPolygons(this.polygons); if (this.front) this.front.clipTo(node); if (this.back) this.back.clipTo(node); }; return Node; }()); exports.Node = Node;