车站和站台绘制辅助线
This commit is contained in:
parent
6b735a094c
commit
5570e88878
@ -1,5 +1,7 @@
|
|||||||
import { FederatedPointerEvent, Point } from 'pixi.js';
|
import { FederatedPointerEvent, Point } from 'pixi.js';
|
||||||
import {
|
import {
|
||||||
|
AbsorbableLine,
|
||||||
|
AbsorbablePosition,
|
||||||
GraphicDrawAssistant,
|
GraphicDrawAssistant,
|
||||||
GraphicInteractionPlugin,
|
GraphicInteractionPlugin,
|
||||||
JlDrawApp,
|
JlDrawApp,
|
||||||
@ -67,6 +69,22 @@ export class PlatformDraw extends GraphicDrawAssistant<
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function buildAbsorbablePositions(platform: Platform): AbsorbablePosition[] {
|
||||||
|
const aps: AbsorbablePosition[] = [];
|
||||||
|
const platforms = platform.queryStore.queryByType<Platform>(Platform.Type);
|
||||||
|
const { width, height } = platform.getGraphicApp().canvas;
|
||||||
|
platforms.forEach((other) => {
|
||||||
|
if (other.id == platform.id) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const ps = other.datas.transform.position;
|
||||||
|
const xs = new AbsorbableLine({ x: 0, y: ps.y }, { x: width, y: ps.y });
|
||||||
|
const ys = new AbsorbableLine({ x: ps.x, y: 0 }, { x: ps.x, y: height });
|
||||||
|
aps.push(xs, ys);
|
||||||
|
});
|
||||||
|
return aps;
|
||||||
|
}
|
||||||
|
|
||||||
export class platformInteraction extends GraphicInteractionPlugin<Platform> {
|
export class platformInteraction extends GraphicInteractionPlugin<Platform> {
|
||||||
static Name = 'platform_transform';
|
static Name = 'platform_transform';
|
||||||
constructor(app: JlDrawApp) {
|
constructor(app: JlDrawApp) {
|
||||||
@ -85,10 +103,18 @@ export class platformInteraction extends GraphicInteractionPlugin<Platform> {
|
|||||||
g.cursor = 'pointer';
|
g.cursor = 'pointer';
|
||||||
g.scalable = true;
|
g.scalable = true;
|
||||||
g.rotatable = true;
|
g.rotatable = true;
|
||||||
|
g.on('selected', this.onSelected, this);
|
||||||
}
|
}
|
||||||
unbind(g: Platform): void {
|
unbind(g: Platform): void {
|
||||||
g.eventMode = 'none';
|
g.eventMode = 'none';
|
||||||
g.scalable = false;
|
g.scalable = false;
|
||||||
g.rotatable = false;
|
g.rotatable = false;
|
||||||
|
g.off('selected', this.onSelected, this);
|
||||||
|
}
|
||||||
|
onSelected(): void {
|
||||||
|
const platform = this.app.selectedGraphics[0] as Platform;
|
||||||
|
this.app.setOptions({
|
||||||
|
absorbablePositions: buildAbsorbablePositions(platform),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
import { FederatedPointerEvent, Point } from 'pixi.js';
|
import { FederatedPointerEvent, Point } from 'pixi.js';
|
||||||
import {
|
import {
|
||||||
|
AbsorbableLine,
|
||||||
|
AbsorbablePosition,
|
||||||
GraphicDrawAssistant,
|
GraphicDrawAssistant,
|
||||||
GraphicInteractionPlugin,
|
GraphicInteractionPlugin,
|
||||||
JlDrawApp,
|
JlDrawApp,
|
||||||
@ -54,6 +56,21 @@ export class StationDraw extends GraphicDrawAssistant<
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function buildAbsorbablePositions(station: Station): AbsorbablePosition[] {
|
||||||
|
const aps: AbsorbablePosition[] = [];
|
||||||
|
const stations = station.queryStore.queryByType<Station>(Station.Type);
|
||||||
|
const { width } = station.getGraphicApp().canvas;
|
||||||
|
stations.forEach((other) => {
|
||||||
|
if (other.id == station.id) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const ps = other.datas.transform.position;
|
||||||
|
const xs = new AbsorbableLine({ x: 0, y: ps.y }, { x: width, y: ps.y });
|
||||||
|
aps.push(xs);
|
||||||
|
});
|
||||||
|
return aps;
|
||||||
|
}
|
||||||
|
|
||||||
export class stationInteraction extends GraphicInteractionPlugin<Station> {
|
export class stationInteraction extends GraphicInteractionPlugin<Station> {
|
||||||
static Name = 'station_transform';
|
static Name = 'station_transform';
|
||||||
constructor(app: JlDrawApp) {
|
constructor(app: JlDrawApp) {
|
||||||
@ -82,6 +99,7 @@ export class stationInteraction extends GraphicInteractionPlugin<Station> {
|
|||||||
g.kilometerGraph.draggable = true;
|
g.kilometerGraph.draggable = true;
|
||||||
g.kilometerGraph.selectable = true;
|
g.kilometerGraph.selectable = true;
|
||||||
g.kilometerGraph.transformSave = true;
|
g.kilometerGraph.transformSave = true;
|
||||||
|
g.on('selected', this.onSelected, this);
|
||||||
}
|
}
|
||||||
unbind(g: Station): void {
|
unbind(g: Station): void {
|
||||||
g.eventMode = 'none';
|
g.eventMode = 'none';
|
||||||
@ -95,5 +113,12 @@ export class stationInteraction extends GraphicInteractionPlugin<Station> {
|
|||||||
g.kilometerGraph.draggable = false;
|
g.kilometerGraph.draggable = false;
|
||||||
g.kilometerGraph.selectable = false;
|
g.kilometerGraph.selectable = false;
|
||||||
g.kilometerGraph.transformSave = false;
|
g.kilometerGraph.transformSave = false;
|
||||||
|
g.off('selected', this.onSelected, this);
|
||||||
|
}
|
||||||
|
onSelected(): void {
|
||||||
|
const station = this.app.selectedGraphics[0] as Station;
|
||||||
|
this.app.setOptions({
|
||||||
|
absorbablePositions: buildAbsorbablePositions(station),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user