laya-coreui-es
Version:
laya核心库、ui库es版本,剔除了媒体、TTF等功能。基于 LayaAir-release_2.12.0 修改
158 lines (157 loc) • 6.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.BasePoly = void 0;
class BasePoly {
static createLine2(p, indices, lineWidth, indexBase, outVertex, loop) {
if (p.length < 4)
return null;
var points = BasePoly.tempData.length > (p.length + 2) ? BasePoly.tempData : new Array(p.length + 2);
points[0] = p[0];
points[1] = p[1];
var newlen = 2;
var i = 0;
var length = p.length;
for (i = 2; i < length; i += 2) {
if (Math.abs(p[i] - p[i - 2]) + Math.abs(p[i + 1] - p[i - 1]) > 0.01) {
points[newlen++] = p[i];
points[newlen++] = p[i + 1];
}
}
if (loop && Math.abs(p[0] - points[newlen - 2]) + Math.abs(p[1] - points[newlen - 1]) > 0.01) {
points[newlen++] = p[0];
points[newlen++] = p[1];
}
var result = outVertex;
length = newlen / 2;
var w = lineWidth / 2;
var px, py, p1x, p1y, p2x, p2y, p3x, p3y;
var perpx, perpy, perp2x, perp2y, perp3x, perp3y;
var a1, b1, c1, a2, b2, c2;
var denom, pdist, dist;
p1x = points[0];
p1y = points[1];
p2x = points[2];
p2y = points[3];
perpx = -(p1y - p2y);
perpy = p1x - p2x;
dist = Math.sqrt(perpx * perpx + perpy * perpy);
perpx = perpx / dist * w;
perpy = perpy / dist * w;
result.push(p1x - perpx, p1y - perpy, p1x + perpx, p1y + perpy);
for (i = 1; i < length - 1; i++) {
p1x = points[(i - 1) * 2];
p1y = points[(i - 1) * 2 + 1];
p2x = points[(i) * 2];
p2y = points[(i) * 2 + 1];
p3x = points[(i + 1) * 2];
p3y = points[(i + 1) * 2 + 1];
perpx = -(p1y - p2y);
perpy = p1x - p2x;
dist = Math.sqrt(perpx * perpx + perpy * perpy);
perpx = perpx / dist * w;
perpy = perpy / dist * w;
perp2x = -(p2y - p3y);
perp2y = p2x - p3x;
dist = Math.sqrt(perp2x * perp2x + perp2y * perp2y);
perp2x = perp2x / dist * w;
perp2y = perp2y / dist * w;
a1 = (-perpy + p1y) - (-perpy + p2y);
b1 = (-perpx + p2x) - (-perpx + p1x);
c1 = (-perpx + p1x) * (-perpy + p2y) - (-perpx + p2x) * (-perpy + p1y);
a2 = (-perp2y + p3y) - (-perp2y + p2y);
b2 = (-perp2x + p2x) - (-perp2x + p3x);
c2 = (-perp2x + p3x) * (-perp2y + p2y) - (-perp2x + p2x) * (-perp2y + p3y);
denom = a1 * b2 - a2 * b1;
if (Math.abs(denom) < 0.1) {
denom += 10.1;
result.push(p2x - perpx, p2y - perpy, p2x + perpx, p2y + perpy);
continue;
}
px = (b1 * c2 - b2 * c1) / denom;
py = (a2 * c1 - a1 * c2) / denom;
pdist = (px - p2x) * (px - p2x) + (py - p2y) + (py - p2y);
result.push(px, py, p2x - (px - p2x), p2y - (py - p2y));
}
p1x = points[newlen - 4];
p1y = points[newlen - 3];
p2x = points[newlen - 2];
p2y = points[newlen - 1];
perpx = -(p1y - p2y);
perpy = p1x - p2x;
dist = Math.sqrt(perpx * perpx + perpy * perpy);
perpx = perpx / dist * w;
perpy = perpy / dist * w;
result.push(p2x - perpx, p2y - perpy, p2x + perpx, p2y + perpy);
for (i = 1; i < length; i++) {
indices.push(indexBase + (i - 1) * 2, indexBase + (i - 1) * 2 + 1, indexBase + i * 2 + 1, indexBase + i * 2 + 1, indexBase + i * 2, indexBase + (i - 1) * 2);
}
return result;
}
static createLineTriangle(path, color, width, loop, outvb, vbstride, outib) {
var points = path.slice();
var ptlen = points.length;
var p1x = points[0], p1y = points[1];
var p2x = points[2], p2y = points[2];
var len = 0;
var rp = 0;
var dx = 0, dy = 0;
var pointnum = ptlen / 2;
if (pointnum <= 1)
return;
if (pointnum == 2) {
return;
}
var tmpData = new Array(pointnum * 4);
var realPtNum = 0;
var ci = 0;
for (var i = 0; i < pointnum - 1; i++) {
p1x = points[ci++], p1y = points[ci++];
p2x = points[ci++], p2y = points[ci++];
dx = p2x - p1x, dy = p2y - p1y;
if (dx != 0 && dy != 0) {
len = Math.sqrt(dx * dx + dy * dy);
if (len > 1e-3) {
rp = realPtNum * 4;
tmpData[rp] = p1x;
tmpData[rp + 1] = p1y;
tmpData[rp + 2] = dx / len;
tmpData[rp + 3] = dy / len;
realPtNum++;
}
}
}
if (loop) {
p1x = points[ptlen - 2], p1y = points[ptlen - 1];
p2x = points[0], p2y = points[1];
dx = p2x - p1x, dy = p2y - p1y;
if (dx != 0 && dy != 0) {
len = Math.sqrt(dx * dx + dy * dy);
if (len > 1e-3) {
rp = realPtNum * 4;
tmpData[rp] = p1x;
tmpData[rp + 1] = p1y;
tmpData[rp + 2] = dx / len;
tmpData[rp + 3] = dy / len;
realPtNum++;
}
}
}
else {
rp = realPtNum * 4;
tmpData[rp] = p1x;
tmpData[rp + 1] = p1y;
tmpData[rp + 2] = dx / len;
tmpData[rp + 3] = dy / len;
realPtNum++;
}
ci = 0;
for (i = 0; i < pointnum; i++) {
p1x = points[ci], p1y = points[ci + 1];
p2x = points[ci + 2], p2y = points[ci + 3];
}
if (loop) {
}
}
}
exports.BasePoly = BasePoly;
BasePoly.tempData = new Array(256);