feat:提交
This commit is contained in:
365
samples/handleAbility/common/ArrayExt.js
Normal file
365
samples/handleAbility/common/ArrayExt.js
Normal file
@@ -0,0 +1,365 @@
|
||||
"use strict";
|
||||
var __extends = (this && this.__extends) || (function () {
|
||||
var extendStatics = function (d, b) {
|
||||
extendStatics = Object.setPrototypeOf ||
|
||||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
||||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
||||
return extendStatics(d, b);
|
||||
};
|
||||
return function (d, b) {
|
||||
if (typeof b !== "function" && b !== null)
|
||||
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
||||
extendStatics(d, b);
|
||||
function __() { this.constructor = d; }
|
||||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||
};
|
||||
})();
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.arrayRemoveDuplicateBySort = exports.GroupItem = exports.ArrayExt = exports.List = void 0;
|
||||
var List = /** @class */ (function (_super) {
|
||||
__extends(List, _super);
|
||||
function List() {
|
||||
return _super !== null && _super.apply(this, arguments) || this;
|
||||
}
|
||||
/** 返回符合条件的第一个元素 */
|
||||
List.prototype.first = function (fn) {
|
||||
if (this.length == 0)
|
||||
return null;
|
||||
for (var _i = 0, _a = this; _i < _a.length; _i++) {
|
||||
var item = _a[_i];
|
||||
if (fn(item))
|
||||
return item;
|
||||
}
|
||||
return null;
|
||||
};
|
||||
/** 返回符合条件的最后一元素 */
|
||||
List.prototype.last = function (fn) {
|
||||
if (this.length == 0)
|
||||
return null;
|
||||
for (var i = this.length - 1; i >= 0; i--) {
|
||||
if (fn(this[i]))
|
||||
return this[i];
|
||||
}
|
||||
return null;
|
||||
};
|
||||
/** 最大值 */
|
||||
List.prototype.max = function (fn) {
|
||||
var maxV;
|
||||
for (var _i = 0, _a = this; _i < _a.length; _i++) {
|
||||
var i = _a[_i];
|
||||
var v = fn(i);
|
||||
if (maxV == null) {
|
||||
maxV = fn(i);
|
||||
}
|
||||
else {
|
||||
if (v > maxV) {
|
||||
maxV = v;
|
||||
}
|
||||
}
|
||||
}
|
||||
return maxV;
|
||||
};
|
||||
/** 最小值 */
|
||||
List.prototype.min = function (fn) {
|
||||
var minV;
|
||||
for (var _i = 0, _a = this; _i < _a.length; _i++) {
|
||||
var i = _a[_i];
|
||||
var v = fn(i);
|
||||
if (minV == null) {
|
||||
minV = fn(i);
|
||||
}
|
||||
else {
|
||||
if (v < minV) {
|
||||
minV = v;
|
||||
}
|
||||
}
|
||||
}
|
||||
return minV;
|
||||
};
|
||||
/** 累加 */
|
||||
List.prototype.sum = function (fn) {
|
||||
var v = 0;
|
||||
for (var _i = 0, _a = this; _i < _a.length; _i++) {
|
||||
var t = _a[_i];
|
||||
v = v + fn(t);
|
||||
}
|
||||
return v;
|
||||
};
|
||||
/** 平均值 */
|
||||
List.prototype.avg = function (fn) {
|
||||
if (this.length == 0)
|
||||
return 0;
|
||||
var sum = this.sum(fn);
|
||||
return sum / this.length;
|
||||
};
|
||||
/** 满足条件的元素数量 */
|
||||
List.prototype.count = function (fn) {
|
||||
if (this.length == 0)
|
||||
return 0;
|
||||
var c = 0;
|
||||
for (var _i = 0, _a = this; _i < _a.length; _i++) {
|
||||
var item = _a[_i];
|
||||
if (fn(item))
|
||||
c = c + 1;
|
||||
}
|
||||
return c;
|
||||
};
|
||||
List.prototype.FindMax = function (fn) {
|
||||
return this.reduce(function (a, b) { return fn(a) > fn(b) ? a : b; });
|
||||
};
|
||||
return List;
|
||||
}(Array));
|
||||
exports.List = List;
|
||||
var ArrayExt = /** @class */ (function () {
|
||||
function ArrayExt() {
|
||||
}
|
||||
/** 返回满足条件的元素数量 */
|
||||
ArrayExt.count = function (list, fn) {
|
||||
if (list.length == 0)
|
||||
return 0;
|
||||
var c = 0;
|
||||
for (var _i = 0, list_1 = list; _i < list_1.length; _i++) {
|
||||
var item = list_1[_i];
|
||||
if (fn(item))
|
||||
c = c + 1;
|
||||
}
|
||||
return c;
|
||||
};
|
||||
/** 移除 */
|
||||
ArrayExt.remove = function (list, obj) {
|
||||
var index = list.findIndex(function (t) { return t == obj; });
|
||||
if (index == -1)
|
||||
return;
|
||||
list.splice(index, 1);
|
||||
};
|
||||
/** 返回符合条件的第一个元素 */
|
||||
ArrayExt.first = function (list, fn, orderFn1, orderFn2) {
|
||||
if (orderFn1 === void 0) { orderFn1 = null; }
|
||||
if (orderFn2 === void 0) { orderFn2 = null; }
|
||||
if (list.length == 0)
|
||||
return null;
|
||||
if (orderFn1 == null) {
|
||||
for (var _i = 0, list_2 = list; _i < list_2.length; _i++) {
|
||||
var item = list_2[_i];
|
||||
if (fn(item))
|
||||
return item;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
var minValue1;
|
||||
var minValue2;
|
||||
var minItem;
|
||||
for (var _a = 0, list_3 = list; _a < list_3.length; _a++) {
|
||||
var item = list_3[_a];
|
||||
if (fn(item) == false)
|
||||
continue;
|
||||
var v1 = orderFn1(item);
|
||||
var v2 = orderFn2 != null ? orderFn2(item) : 0;
|
||||
if (minValue1 == null || v1 < minValue1 || (v1 == minValue1 && v2 < minValue2)) {
|
||||
minValue1 = v1;
|
||||
minValue2 = v2;
|
||||
minItem = item;
|
||||
}
|
||||
}
|
||||
return minItem;
|
||||
};
|
||||
/** 返回符合条件的最后一元素 */
|
||||
ArrayExt.last = function (list, fn, orderFn1, orderFn2) {
|
||||
if (orderFn1 === void 0) { orderFn1 = null; }
|
||||
if (orderFn2 === void 0) { orderFn2 = null; }
|
||||
if (list.length == 0)
|
||||
return null;
|
||||
if (orderFn1 == null) {
|
||||
for (var i = list.length - 1; i >= 0; i--) {
|
||||
if (fn(list[i]))
|
||||
return list[i];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
//
|
||||
var maxValue1;
|
||||
var maxValue2;
|
||||
var maxItem;
|
||||
for (var _i = 0, list_4 = list; _i < list_4.length; _i++) {
|
||||
var item = list_4[_i];
|
||||
if (fn(item) == false)
|
||||
continue;
|
||||
var v1 = orderFn1(item);
|
||||
var v2 = orderFn2 ? orderFn2(item) : 0;
|
||||
if (maxValue1 == null || v1 > maxValue1 || (v1 == maxValue1 && v2 > maxValue2)) {
|
||||
maxValue1 = v1;
|
||||
maxValue2 = v2;
|
||||
maxItem = item;
|
||||
}
|
||||
}
|
||||
return maxItem;
|
||||
};
|
||||
/** 取最大值 */
|
||||
ArrayExt.max = function (list, fn, whereF, defaultV) {
|
||||
if (whereF === void 0) { whereF = null; }
|
||||
if (defaultV === void 0) { defaultV = null; }
|
||||
var maxV;
|
||||
for (var _i = 0, list_5 = list; _i < list_5.length; _i++) {
|
||||
var i = list_5[_i];
|
||||
if (whereF && whereF(i) == false)
|
||||
continue;
|
||||
var v = fn(i);
|
||||
if (maxV == undefined) {
|
||||
maxV = fn(i);
|
||||
}
|
||||
else {
|
||||
if (v > maxV) {
|
||||
maxV = v;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (maxV != undefined)
|
||||
return maxV;
|
||||
return defaultV;
|
||||
};
|
||||
/** 最小值 */
|
||||
ArrayExt.min = function (list, fn, whereF, defaultV) {
|
||||
if (whereF === void 0) { whereF = null; }
|
||||
if (defaultV === void 0) { defaultV = null; }
|
||||
var minV;
|
||||
for (var _i = 0, list_6 = list; _i < list_6.length; _i++) {
|
||||
var i = list_6[_i];
|
||||
if (whereF && whereF(i) == false)
|
||||
continue;
|
||||
var v = fn(i);
|
||||
if (minV == undefined) {
|
||||
minV = v;
|
||||
}
|
||||
else {
|
||||
if (v < minV) {
|
||||
minV = v;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (minV != undefined)
|
||||
return minV;
|
||||
return defaultV;
|
||||
};
|
||||
/** 累加 */
|
||||
ArrayExt.sum = function (list, fn, wn) {
|
||||
var v = 0;
|
||||
for (var _i = 0, list_7 = list; _i < list_7.length; _i++) {
|
||||
var t = list_7[_i];
|
||||
if (wn && wn(t) == false)
|
||||
continue;
|
||||
v = v + fn(t);
|
||||
}
|
||||
return v;
|
||||
};
|
||||
/** 平均值 */
|
||||
ArrayExt.avg = function (list, fn) {
|
||||
if (this.length == 0)
|
||||
return 0;
|
||||
var sum = ArrayExt.sum(list, fn);
|
||||
return sum / this.length;
|
||||
};
|
||||
/** 排序 */
|
||||
ArrayExt.sortBy = function (list, fn, fn2) {
|
||||
if (fn2 === void 0) { fn2 = null; }
|
||||
if (fn2 == null)
|
||||
return list.sort(function (a, b) { return fn(a) - fn(b); });
|
||||
else
|
||||
return list.sort(function (a, b) { return fn(a) == fn(b) ? (fn2(a) - fn2(b)) : fn(a) - fn(b); });
|
||||
};
|
||||
/** 降序 排序 */
|
||||
ArrayExt.sortByDescending = function (list, fn) {
|
||||
list.sort(function (a, b) { return fn(b) - fn(a); });
|
||||
};
|
||||
/** 排序成新的数组 */
|
||||
ArrayExt.orderBy = function (list, fn, fn2) {
|
||||
if (fn2 === void 0) { fn2 = null; }
|
||||
var newList = list.concat([]);
|
||||
if (fn2 == null)
|
||||
return newList.sort(function (a, b) { return fn(a) - fn(b); });
|
||||
else
|
||||
return newList.sort(function (a, b) { return fn(a) == fn(b) ? (fn2(a) - fn2(b)) : fn(a) - fn(b); });
|
||||
};
|
||||
/** 降序成新的数组 */
|
||||
ArrayExt.orderByDescending = function (list, fn, fn2) {
|
||||
if (fn2 === void 0) { fn2 = null; }
|
||||
var newList = list.concat([]);
|
||||
if (fn2 == null)
|
||||
return list.sort(function (a, b) { return fn(b) - fn(a); });
|
||||
else
|
||||
return list.sort(function (a, b) { return fn(a) == fn(b) ? (fn2(b) - fn2(a)) : fn(b) - fn(a); });
|
||||
};
|
||||
/** 分组 */
|
||||
ArrayExt.groupBy = function (list, fn) {
|
||||
var groups = new Array();
|
||||
var _loop_1 = function (item) {
|
||||
var key = fn(item);
|
||||
var group = groups.find(function (t) { return t.key == key; });
|
||||
if (group == null) {
|
||||
group = new GroupItem(key);
|
||||
groups.push(group);
|
||||
}
|
||||
group.push(item);
|
||||
};
|
||||
for (var _i = 0, list_8 = list; _i < list_8.length; _i++) {
|
||||
var item = list_8[_i];
|
||||
_loop_1(item);
|
||||
}
|
||||
return groups;
|
||||
};
|
||||
/**
|
||||
* 选择
|
||||
* let newObjectList = ArrayExt.Select(list,t=>({pA:t.name, pB:t.age + "_"+ t.month}) ) ;
|
||||
*/
|
||||
ArrayExt.Select = function (list, fn) {
|
||||
var newList = new Array();
|
||||
for (var _i = 0, list_9 = list; _i < list_9.length; _i++) {
|
||||
var t = list_9[_i];
|
||||
newList.push(fn(t));
|
||||
}
|
||||
return newList;
|
||||
};
|
||||
/** 过来,并按顺序排序 */
|
||||
ArrayExt.where = function (list, whereFn, orderfn1, orderfn2) {
|
||||
if (orderfn1 === void 0) { orderfn1 = null; }
|
||||
if (orderfn2 === void 0) { orderfn2 = null; }
|
||||
var newList = list.filter(whereFn);
|
||||
if (orderfn1 == null && orderfn2 == null)
|
||||
return newList;
|
||||
return ArrayExt.sortBy(newList, orderfn1, orderfn2);
|
||||
};
|
||||
return ArrayExt;
|
||||
}());
|
||||
exports.ArrayExt = ArrayExt;
|
||||
var GroupItem = /** @class */ (function () {
|
||||
function GroupItem(k) {
|
||||
this.key = k;
|
||||
this.list = [];
|
||||
}
|
||||
Object.defineProperty(GroupItem.prototype, "count", {
|
||||
get: function () { return this.list.length; },
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
GroupItem.prototype.push = function (d) {
|
||||
this.list.push(d);
|
||||
};
|
||||
return GroupItem;
|
||||
}());
|
||||
exports.GroupItem = GroupItem;
|
||||
/**
|
||||
* 对排序好的数组进行去重操作
|
||||
* @param {(e1, e2) => boolean} [checkFuction] 校验对象相等函数
|
||||
* @returns {Array<T>} 返回自身
|
||||
*/
|
||||
function arrayRemoveDuplicateBySort(arr, checkFuction) {
|
||||
if (checkFuction === void 0) { checkFuction = checkEqual; }
|
||||
if (arr.length < 2)
|
||||
return arr;
|
||||
var j = 1;
|
||||
for (var i = 1, l = arr.length; i < l; i++)
|
||||
if (!checkFuction(arr[j - 1], arr[i]))
|
||||
arr[j++] = arr[i];
|
||||
arr.length = j;
|
||||
return arr;
|
||||
}
|
||||
exports.arrayRemoveDuplicateBySort = arrayRemoveDuplicateBySort;
|
141
samples/handleAbility/common/Box2.js
Normal file
141
samples/handleAbility/common/Box2.js
Normal file
@@ -0,0 +1,141 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.Box2 = void 0;
|
||||
var Vector2_js_1 = require("./Vector2.js");
|
||||
var Box2 = /** @class */ (function () {
|
||||
function Box2(min, max) {
|
||||
if (min === void 0) { min = new Vector2_js_1.Vector2(+Number.POSITIVE_INFINITY, +Number.POSITIVE_INFINITY); }
|
||||
if (max === void 0) { max = new Vector2_js_1.Vector2(Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY); }
|
||||
this.min = min;
|
||||
this.max = max;
|
||||
}
|
||||
Object.defineProperty(Box2.prototype, "area", {
|
||||
/** 获取面积 */
|
||||
get: function () {
|
||||
return (this.max.x - this.min.x) * (this.max.y - this.min.y);
|
||||
},
|
||||
enumerable: false,
|
||||
configurable: true
|
||||
});
|
||||
/** */
|
||||
Box2.prototype.set = function (min, max) {
|
||||
this.min.copy(min);
|
||||
this.max.copy(max);
|
||||
return this;
|
||||
};
|
||||
Box2.prototype.setFromPoints = function (points) {
|
||||
this.makeEmpty();
|
||||
for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {
|
||||
var p = points_1[_i];
|
||||
this.expandByPoint(p);
|
||||
}
|
||||
return this;
|
||||
};
|
||||
Box2.prototype.setFromCenterAndSize = function (center, size) {
|
||||
var v1 = Box2._setFromCenterAndSize_v1;
|
||||
var halfSize = v1.copy(size).multiplyScalar(0.5);
|
||||
this.min.copy(center).sub(halfSize);
|
||||
this.max.copy(center).add(halfSize);
|
||||
return this;
|
||||
};
|
||||
Box2.prototype.clone = function () {
|
||||
return new this.constructor().copy(this);
|
||||
};
|
||||
Box2.prototype.copy = function (box) {
|
||||
this.min.copy(box.min);
|
||||
this.max.copy(box.max);
|
||||
return this;
|
||||
};
|
||||
Box2.prototype.makeEmpty = function () {
|
||||
this.min.x = this.min.y = +Number.POSITIVE_INFINITY;
|
||||
this.max.x = this.max.y = Number.NEGATIVE_INFINITY;
|
||||
return this;
|
||||
};
|
||||
Box2.prototype.isEmpty = function () {
|
||||
// this is a more robust check for empty than (volume <= 0) because volume can get positive with two negative axes
|
||||
return (this.max.x < this.min.x) || (this.max.y < this.min.y);
|
||||
};
|
||||
Box2.prototype.getCenter = function (result) {
|
||||
if (result === void 0) { result = new Vector2_js_1.Vector2(); }
|
||||
return this.isEmpty() ? result.set(0, 0) : result.addVectors(this.min, this.max).multiplyScalar(0.5);
|
||||
};
|
||||
Box2.prototype.getSize = function (result) {
|
||||
if (result === void 0) { result = new Vector2_js_1.Vector2(); }
|
||||
return this.isEmpty() ? result.set(0, 0) : result.subVectors(this.max, this.min);
|
||||
};
|
||||
Box2.prototype.expandByPoint = function (point) {
|
||||
this.min.min(point);
|
||||
this.max.max(point);
|
||||
return this;
|
||||
};
|
||||
Box2.prototype.expandByVector = function (vector) {
|
||||
this.min.sub(vector);
|
||||
this.max.add(vector);
|
||||
return this;
|
||||
};
|
||||
Box2.prototype.expandByScalar = function (scalar) {
|
||||
this.min.addScalar(-scalar);
|
||||
this.max.addScalar(scalar);
|
||||
return this;
|
||||
};
|
||||
Box2.prototype.containsPoint = function (point) {
|
||||
if (point.x < this.min.x || point.x > this.max.x
|
||||
|| point.y < this.min.y || point.y > this.max.y) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
Box2.prototype.containsBox = function (box) {
|
||||
if ((this.min.x <= box.min.x) && (box.max.x <= this.max.x)
|
||||
&& (this.min.y <= box.min.y) && (box.max.y <= this.max.y)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
Box2.prototype.getParameter = function (point, result) {
|
||||
if (result === void 0) { result = new Vector2_js_1.Vector2(); }
|
||||
// This can potentially have a divide by zero if the box
|
||||
// has a size dimension of 0.
|
||||
return result.set((point.x - this.min.x) / (this.max.x - this.min.x), (point.y - this.min.y) / (this.max.y - this.min.y));
|
||||
};
|
||||
Box2.prototype.intersectsBox = function (box) {
|
||||
// using 6 splitting planes to rule out intersections.
|
||||
if (box.max.x < this.min.x || box.min.x > this.max.x
|
||||
|| box.max.y < this.min.y || box.min.y > this.max.y) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
Box2.prototype.clampPoint = function (point, result) {
|
||||
if (result === void 0) { result = new Vector2_js_1.Vector2(); }
|
||||
return result.copy(point).clamp(this.min, this.max);
|
||||
};
|
||||
Box2.prototype.distanceToPoint = function (point) {
|
||||
var v1 = Box2._distanceToPoint_v1;
|
||||
var clampedPoint = v1.copy(point).clamp(this.min, this.max);
|
||||
return clampedPoint.sub(point).length();
|
||||
};
|
||||
Box2.prototype.intersect = function (box) {
|
||||
this.min.max(box.min);
|
||||
this.max.min(box.max);
|
||||
return this;
|
||||
};
|
||||
Box2.prototype.union = function (box) {
|
||||
this.min.min(box.min);
|
||||
this.max.max(box.max);
|
||||
return this;
|
||||
};
|
||||
Box2.prototype.translate = function (offset) {
|
||||
this.min.add(offset);
|
||||
this.max.add(offset);
|
||||
return this;
|
||||
};
|
||||
Box2.prototype.equals = function (box) {
|
||||
return box.min.equals(this.min) && box.max.equals(this.max);
|
||||
};
|
||||
Box2._setFromCenterAndSize_v1 = new Vector2_js_1.Vector2();
|
||||
Box2._distanceToPoint_v1 = new Vector2_js_1.Vector2();
|
||||
return Box2;
|
||||
}());
|
||||
exports.Box2 = Box2;
|
||||
;
|
@@ -7,7 +7,6 @@ import type { Curve2d } from '../base/CAD'
|
||||
import { Arc2d, Point2d, copyTextToClipboard } from '../base/CAD'
|
||||
import { CurveWrap } from './Curves2Parts'
|
||||
|
||||
// import type { Curve2d } from '../../common/base/CAD'
|
||||
|
||||
export class PolylineHelper {
|
||||
/** 创建闭合多段线 */
|
||||
|
Reference in New Issue
Block a user