import type { EdgeData } from '../spec';
import type { ElementDatum, Point, Vector2, Vector3 } from '../types';
/**
* 判断是否为边数据
*
* judge whether the data is edge data
* @param data - 元素数据 | element data
* @returns - 是否为边数据 | whether the data is edge data
*/
export function isEdgeData(data: Partial): data is EdgeData {
if ('source' in data && 'target' in data) return true;
return false;
}
/**
* 判断是否为二维向量
*
* Judge whether the vector is 2d
* @param vector - 向量 | vector
* @returns 是否为二维向量 | whether the vector is 2d
*/
export function isVector2(vector: Point): vector is Vector2 {
return vector.length === 2;
}
/**
* 判断是否为三维向量
*
* Judge whether the vector is 3d
* @param vector - 向量 | vector
* @returns 是否为三维向量 | whether the vector is 3d
*/
export function isVector3(vector: Point): vector is Vector3 {
return vector.length === 3;
}
/**
* 判断是否为点
*
* Judge whether the point is valid
* @param p - 点 | point
* @returns 是否为点 | whether the point is valid
*/
export function isPoint(p: any): p is Point {
if (p instanceof Float32Array) return true;
if (Array.isArray(p) && (p.length === 2 || p.length === 3)) {
return p.every((elem) => typeof elem === 'number');
}
return false;
}