
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
import { DrawingSeries } from "./DrawingSeries";
import { Line } from "../../../core/render/Line";
import { ListTemplate } from "../../../core/util/List";
import { Template } from "../../../core/util/Template";
import * as $math from "../../../core/util/Math";
export class SimpleLineSeries extends DrawingSeries {
constructor() {
super(...arguments);
Object.defineProperty(this, "_tag", {
enumerable: true,
configurable: true,
writable: true,
value: "line"
});
Object.defineProperty(this, "_updateExtension", {
enumerable: true,
configurable: true,
writable: true,
value: false
});
Object.defineProperty(this, "lines", {
enumerable: true,
configurable: true,
writable: true,
value: new ListTemplate(Template.new({}), () => Line._new(this._root, {}, [this.lines.template]))
});
Object.defineProperty(this, "hitLines", {
enumerable: true,
configurable: true,
writable: true,
value: new ListTemplate(Template.new({}), () => Line._new(this._root, {}, [this.hitLines.template]))
});
Object.defineProperty(this, "_di", {
enumerable: true,
configurable: true,
writable: true,
value: []
});
Object.defineProperty(this, "_lines", {
enumerable: true,
configurable: true,
writable: true,
value: []
});
Object.defineProperty(this, "_hitLines", {
enumerable: true,
configurable: true,
writable: true,
value: []
});
}
/**
* @ignore
*/
makeLine() {
const line = this.lines.make();
this.mainContainer.children.push(line);
this.lines.push(line);
return line;
}
/**
* @ignore
*/
makeHitLine() {
const line = this.hitLines.make();
line.addTag("hit");
this.mainContainer.children.push(line);
this.hitLines.push(line);
return line;
}
_afterNew() {
super._afterNew();
const lineTemplate = this.lines.template;
lineTemplate.events.on("pointerover", (e) => {
this._showSegmentBullets(e.target.get("userData"));
});
lineTemplate.events.on("pointerout", (e) => {
this._hideAllBullets();
const index = e.target.get("userData");
const line = this._lines[index];
if (line) {
line.unhover();
}
const strokeIndex = this._getStrokeIndex(index);
const stroke = this.strokes.getIndex(strokeIndex);
if (stroke) {
stroke.unhover();
}
});
const hitTemplate = this.hitLines.template;
hitTemplate.events.on("pointerover", (e) => {
const index = e.target.get("userData");
this._showSegmentBullets(index);
const line = this._lines[index];
if (line) {
line.hover();
}
const strokeIndex = this._getStrokeIndex(index);
const stroke = this.strokes.getIndex(strokeIndex);
if (stroke) {
stroke.hover();
}
});
hitTemplate.events.on("click", (e) => {
if (this._erasingEnabled) {
this._disposeIndex(e.target.get("userData"));
}
});
hitTemplate.events.on("dragstart", (e) => {
const index = e.target.get("userData");
const line = this._lines[index];
if (line) {
line.dragStart(e);
}
const strokeIndex = this._getStrokeIndex(index);
const stroke = this.strokes.getIndex(strokeIndex);
if (stroke) {
stroke.dragStart(e);
}
});
hitTemplate.events.on("dragstop", (e) => {
const index = e.target.get("userData");
this.markDirtyValues();
e.target.setAll({ x: 0, y: 0 });
const line = this._lines[index];
if (line) {
line.dragStop(e);
line.setAll({ x: 0, y: 0 });
}
const strokeIndex = this._getStrokeIndex(index);
const stroke = this.strokes.getIndex(strokeIndex);
if (stroke) {
stroke.dragStop(e);
stroke.setAll({ x: 0, y: 0 });
}
});
hitTemplate.events.on("pointerout", (e) => {
const index = e.target.get("userData");
this._hideAllBullets();
const line = this._lines[index];
if (line) {
line.unhover();
}
const strokeIndex = this._getStrokeIndex(index);
const stroke = this.strokes.getIndex(strokeIndex);
if (stroke) {
stroke.unhover();
}
});
}
_updateElements() {
const chart = this.chart;
if (chart) {
const s = Math.max(chart.plotContainer.width(), chart.plotContainer.height()) * 2;
for (let i = 0; i < this._lines.length; i++) {
const line = this._lines[i];
if (line) {
const diP1 = this._di[i]["p1"];
const diP2 = this._di[i]["p2"];
if (diP1 && diP2) {
const p1 = diP1.get("point");
const p2 = diP2.get("point");
if (p1 && p2) {
const len = Math.max(Math.abs(s - p1.x), Math.abs(s - p2.x), Math.abs(s - p1.y), Math.abs(s - p2.y), Math.abs(p1.x), Math.abs(p2.x), Math.abs(p1.y), Math.abs(p2.y));
let angle = $math.getAngle(p2, p1);
const p11 = { x: p1.x + len * $math.cos(angle), y: p1.y + len * $math.sin(angle) };
const p22 = { x: p2.x - len * $math.cos(angle), y: p2.y - len * $math.sin(angle) };
this._updateLine(i, p11, p22, p1, p2);
}
}
}
}
}
}
_updateLine(index, p11, p22, p1, p2) {
const line = this._lines[index];
const hitLine = this._hitLines[index];
let segments = [[[p11, p1]], [[p2, p22]]];
let hitSegments = [[[p11, p22]]];
line.set("segments", segments);
hitLine.set("segments", hitSegments);
}
_handlePointerClickReal(event) {
if (!this._isDragging) {
if (!this._isDrawing) {
this._isDrawing = true;
this._index++;
this._addPoints(event, this._index);
}
else {
this._isDrawing = false;
}
}
}
_handlePointerClick(event) {
if (this._drawingEnabled) {
super._handlePointerClick(event);
this._handlePointerClickReal(event);
}
}
_handlePointerMove(event) {
super._handlePointerMove(event);
this._handlePointerMoveReal(event);
}
_handlePointerMoveReal(_event) {
if (this._isDrawing) {
const movePoint = this._movePointerPoint;
const index = this._index;
const dataItems = this._di[index];
if (movePoint && dataItems) {
const xAxis = this.get("xAxis");
const yAxis = this.get("yAxis");
const valueXns = xAxis.positionToValue(xAxis.coordinateToPosition(movePoint.x)); // not snapped
const valueX = this._getXValue(valueXns);
const valueY = this._getYValue(yAxis.positionToValue(yAxis.coordinateToPosition(movePoint.y)), valueXns);
const diP1 = dataItems["p1"];
const diP2 = dataItems["p2"];
if (diP1 && diP2) {
this._setContext(diP2, "valueX", valueX, true);
this._setContext(diP2, "valueY", valueY, true);
this._setXLocation(diP1, diP1.get("valueX", 0));
this._setXLocation(diP2, valueX);
this._updateSegment(index);
}
}
}
}
_createElements(index) {
if (!this._lines[index]) {
const line = this.makeLine();
this._lines[index] = line;
const hitLine = this.makeHitLine();
this._hitLines[index] = hitLine;
const dataContext = this.dataItems[this.dataItems.length - 1].dataContext;
let showExtension = this.get("showExtension", true);
let color = this.get("strokeColor", this.get("stroke"));
const strokeTemplate = dataContext.stroke;
if (strokeTemplate) {
color = strokeTemplate.get("stroke");
this._updateExtensionLine(line, strokeTemplate);
}
if (dataContext) {
showExtension = dataContext.showExtension;
}
line.setPrivate("visible", showExtension);
const settings = { stroke: color, userData: index };
line.setAll(settings);
hitLine.setAll(settings);
this._updateSegment(index);
}
}
_updateExtensionLine(_line, _template) {
}
_addTemplates(index) {
this.data.push({ stroke: this._getStrokeTemplate(), fill: this._getFillTemplate(), index: index, showExtension: this.get("showExtension", true), corner: "e" });
}
_addPoints(event, index) {
const chart = this.chart;
this._addTemplates(index);
const xAxis = this.get("xAxis");
const yAxis = this.get("yAxis");
const point = chart.plotContainer.toLocal(event.point);
const valueYns = xAxis.positionToValue(xAxis.coordinateToPosition(point.x));
const valueX = this._getXValue(valueYns);
const valueY = this._getYValue(yAxis.positionToValue(yAxis.coordinateToPosition(point.y)), valueYns);
this._addPointsReal(valueX, valueY, index);
}
_addPointsReal(valueX, valueY, index) {
this._addPoint(valueX, valueY, "p1", index);
this._addPoint(valueX, valueY, "p2", index);
}
_addPoint(valueX, valueY, corner, index) {
this.data.push({ valueY: valueY, valueX: valueX, corner: corner, index: index });
}
disposeDataItem(dataItem) {
super.disposeDataItem(dataItem);
const dataContext = dataItem.dataContext;
if (dataContext) {
const index = dataContext.index;
const line = this._lines[index];
if (line) {
this.lines.removeValue(line);
delete (this._lines[index]);
line.dispose();
}
const hitLine = this._hitLines[index];
if (hitLine) {
this.hitLines.removeValue(hitLine);
delete (this._hitLines[index]);
hitLine.dispose();
}
}
}
setInteractive(value) {
super.setInteractive(value);
this.hitLines.template.set("forceInactive", !value);
this.lines.template.set("forceInactive", !value);
}
}
Object.defineProperty(SimpleLineSeries, "className", {
enumerable: true,
configurable: true,
writable: true,
value: "SimpleLineSeries"
});
Object.defineProperty(SimpleLineSeries, "classNames", {
enumerable: true,
configurable: true,
writable: true,
value: DrawingSeries.classNames.concat([SimpleLineSeries.className])
});
//# sourceMappingURL=SimpleLineSeries.js.map