- Go backend (server/)
- Frontend (web/, server/static/)
- Database and deployment files
- Scripts and docs
Co-Authored-By: 狸花猫/Claude-Qwen3.6-Plus 🐾
82 lines
2.7 KiB
JavaScript
82 lines
2.7 KiB
JavaScript
"use strict";
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getShape = void 0;
|
||
var g_base_1 = require("@antv/g-base");
|
||
function invertFromMatrix(v, matrix) {
|
||
if (matrix) {
|
||
var invertMatrix = g_base_1.invert(matrix);
|
||
return g_base_1.multiplyVec2(invertMatrix, v);
|
||
}
|
||
return v;
|
||
}
|
||
function getRefXY(element, x, y) {
|
||
// @ts-ignore
|
||
var totalMatrix = element.getTotalMatrix();
|
||
if (totalMatrix) {
|
||
var _a = invertFromMatrix([x, y, 1], totalMatrix), refX = _a[0], refY = _a[1];
|
||
return [refX, refY];
|
||
}
|
||
return [x, y];
|
||
}
|
||
// 拾取前的检测,只有通过检测才能继续拾取
|
||
function preTest(element, x, y) {
|
||
// @ts-ignore
|
||
if (element.isCanvas && element.isCanvas()) {
|
||
return true;
|
||
}
|
||
// 不允许被拾取,则返回 null
|
||
// @ts-ignore
|
||
if (!g_base_1.isAllowCapture(element) || element.cfg.isInView === false) {
|
||
return false;
|
||
}
|
||
if (element.cfg.clipShape) {
|
||
// 如果存在 clip
|
||
var _a = getRefXY(element, x, y), refX = _a[0], refY = _a[1];
|
||
if (element.isClipped(refX, refY)) {
|
||
return false;
|
||
}
|
||
}
|
||
// @ts-ignore ,这个地方调用过于频繁
|
||
var bbox = element.cfg.cacheCanvasBBox || element.getCanvasBBox();
|
||
// 如果没有缓存 bbox,则说明不可见
|
||
// 注释掉的这段可能会加速拾取,上面的语句改写成 const bbox = element.cfg.cacheCanvasBBox;
|
||
// 这时候的拾取假设图形/分组在上一次绘制都在视窗内,但是上面已经判定了 isInView 所以意义不大
|
||
// 现在还调用 element.getCanvasBBox(); 一个很大的原因是便于单元测试
|
||
// if (!bbox) {
|
||
// return false;
|
||
// }
|
||
if (!(x >= bbox.minX && x <= bbox.maxX && y >= bbox.minY && y <= bbox.maxY)) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
// 这个方法复写了 g-base 的 getShape
|
||
function getShape(container, x, y) {
|
||
// 没有通过检测,则返回 null
|
||
if (!preTest(container, x, y)) {
|
||
return null;
|
||
}
|
||
var shape = null;
|
||
var children = container.getChildren();
|
||
var count = children.length;
|
||
for (var i = count - 1; i >= 0; i--) {
|
||
var child = children[i];
|
||
if (child.isGroup()) {
|
||
shape = getShape(child, x, y);
|
||
}
|
||
else if (preTest(child, x, y)) {
|
||
var curShape = child;
|
||
var _a = getRefXY(child, x, y), refX = _a[0], refY = _a[1];
|
||
// @ts-ignore
|
||
if (curShape.isInShape(refX, refY)) {
|
||
shape = child;
|
||
}
|
||
}
|
||
if (shape) {
|
||
break;
|
||
}
|
||
}
|
||
return shape;
|
||
}
|
||
exports.getShape = getShape;
|
||
//# sourceMappingURL=hit.js.map
|