123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- /**
- * 直线
- * @module zrender/graphic/shape/Line
- */
- import Path, { PathProps } from '../Path';
- import {subPixelOptimizeLine} from '../helper/subPixelOptimize';
- import { VectorArray } from '../../core/vector';
- // Avoid create repeatly.
- const subPixelOptimizeOutputShape = {};
- export class LineShape {
- // Start point
- x1 = 0
- y1 = 0
- // End point
- x2 = 0
- y2 = 0
- percent = 1
- }
- export interface LineProps extends PathProps {
- shape?: Partial<LineShape>
- }
- class Line extends Path<LineProps> {
- shape: LineShape
- constructor(opts?: LineProps) {
- super(opts);
- }
- getDefaultStyle() {
- return {
- stroke: '#000',
- fill: null as string
- };
- }
- getDefaultShape() {
- return new LineShape();
- }
- buildPath(ctx: CanvasRenderingContext2D, shape: LineShape) {
- let x1;
- let y1;
- let x2;
- let y2;
- if (this.subPixelOptimize) {
- const optimizedShape = subPixelOptimizeLine(
- subPixelOptimizeOutputShape, shape, this.style
- );
- x1 = optimizedShape.x1;
- y1 = optimizedShape.y1;
- x2 = optimizedShape.x2;
- y2 = optimizedShape.y2;
- }
- else {
- x1 = shape.x1;
- y1 = shape.y1;
- x2 = shape.x2;
- y2 = shape.y2;
- }
- const percent = shape.percent;
- if (percent === 0) {
- return;
- }
- ctx.moveTo(x1, y1);
- if (percent < 1) {
- x2 = x1 * (1 - percent) + x2 * percent;
- y2 = y1 * (1 - percent) + y2 * percent;
- }
- ctx.lineTo(x2, y2);
- }
- /**
- * Get point at percent
- */
- pointAt(p: number): VectorArray {
- const shape = this.shape;
- return [
- shape.x1 * (1 - p) + shape.x2 * p,
- shape.y1 * (1 - p) + shape.y2 * p
- ];
- }
- }
- Line.prototype.type = 'line';
- export default Line;
|