Files
lan-manager/web/node_modules/@antv/g-canvas/lib/util/hit.js
openclaw 0a5f6a8047 Initial commit: Lan-manager project code
- Go backend (server/)
- Frontend (web/, server/static/)
- Database and deployment files
- Scripts and docs

Co-Authored-By: 狸花猫/Claude-Qwen3.6-Plus 🐾
2026-04-20 00:52:58 +08:00

82 lines
2.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"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