工具方法
上一篇
MutationObserver
下一篇
简介
Loading...
我们提供了一系列工具方法,供核心以及插件使用,例如:
import { convertToPath } from '@antv/g';
主要涉及不同角度单位之间的换算。
角度转换到弧度。
deg2rad(deg: number): number;
弧度转换到角度。
rad2deg(rad: number): number;
角度转换到圈数。
deg2turn(deg: number): number;
圈数转换到角度。
turn2deg(turn: number): number;
在绝大部分情况下,我们都可以使用图形自带的变换能力,内部通过 gl-matrix 实现。
分解 3x3 变换矩阵,得到平移、缩放和旋转角度。
来自:https://www.w3.org/TR/css-transforms-1/#decomposing-a-2d-matrix
const [tx, ty, scalingX, scalingY, angle] = decompose(mat3);
从 quat
或者 mat4
中获取欧拉角。方法签名如下:
getEuler(out: vec3, quat: quat | mat4): vec3
来自:https://github.com/toji/gl-matrix/issues/329
创建 vec3
,接受多种类型参数。方法签名如下:
createVec3(x: number | vec2 | vec3 | vec4, y: number = 0, z: number = 0): vec3;
大部分涉及 path 的计算都依赖于 @antv/util
。
Morph 形变动画是通过对 Path 的 path/d 属性进行插值实现的。
方法签名如下:
convertToPath(object: Circle | Ellipse | Rect | Line | Polyline | Polygon | Path,transform = object.getLocalTransform()): string;
该方法支持以下基础图形,不支持 Group 或者其他自定义图形:
转换结果为字符串形式的三阶贝塞尔曲线,利用它易于分割的特性,将变换前后的路径规范到相同数目的分段,最后对各个分段中的控制点进行插值实现动画效果。
在转换过程中会考虑输入图形在局部坐标系下的变换(使用 transform 进行的声明式变换或者命令式的变换方法),因此生成的路径定义已经包含了变换信息,可以直接基于该路径定义创建 Path。示例:
const circle = new Circle({style: {cx: 100,cy: 100,r: 100,transform: 'translate(20px, 20px)', // 声明式变换},});// 对源图形应用变换,命令式circle.translate(100, 0);circle.scale(0.5);// 转换得到路径,已经包含了全部变换信息const pathStr = convertToPath(circle);// 创建新图形const circlePath = new Path({style: {d: pathStr,fill: 'red',},});// 不需要再进行以下变换// circlePath.translate(100, 0);
在某些情况下不需要考虑局部坐标系下的变换,可以传入第二个参数为 mat4.identity()
。