This commit is contained in:
fan 2023-07-21 14:04:49 +08:00
commit 32a1fb6b9a
7 changed files with 102 additions and 41 deletions

View File

@ -49,6 +49,15 @@ export async function removeTrain(data: {
return response.data; return response.data;
} }
export async function setSwitchPosition(data: {
simulationId: string;
switchIndex: number;
turnNormal: boolean;
turnReverse: boolean;
}) {
return await api.post(`${UriBase}/switch/operation`, data);
}
export function checkMapData(data: { mapProto: string }) { export function checkMapData(data: { mapProto: string }) {
return api.post(`${UriBase}/check/data`, data); return api.post(`${UriBase}/check/data`, data);
} }

View File

@ -4,16 +4,16 @@ function getHost(): string {
// return '192.168.3.37:9091'; // return '192.168.3.37:9091';
// return '192.168.3.15:9091'; // return '192.168.3.15:9091';
// return '192.168.3.5:9091'; // return '192.168.3.5:9091';
// return '192.168.3.233:9091'; return '192.168.3.233:9091';
return 'test.joylink.club/bjrtss-server'; // return 'test.joylink.club/bjrtss-server';
} }
export function getHttpBase() { export function getHttpBase() {
// return `http://${getHost()}`; return `http://${getHost()}`;
return `https://${getHost()}`; // return `https://${getHost()}`;
} }
export function getWebsocketUrl() { export function getWebsocketUrl() {
// return `ws://${getHost()}/ws-bj`; return `ws://${getHost()}/ws-bj`;
return `wss://${getHost()}/ws-bj`; // return `wss://${getHost()}/ws-bj`;
} }

View File

@ -6,9 +6,22 @@ import {
import * as pb_1 from 'google-protobuf'; import * as pb_1 from 'google-protobuf';
import { GraphicDataBase, GraphicStateBase } from './GraphicDataBase'; import { GraphicDataBase, GraphicStateBase } from './GraphicDataBase';
import { graphicData } from 'src/protos/stationLayoutGraphics'; import { graphicData } from 'src/protos/stationLayoutGraphics';
import { IPointData } from 'pixi.js'; import { DisplayObject, FederatedMouseEvent, IPointData } from 'pixi.js';
import { KilometerSystem } from 'src/graphics/signal/Signal'; import { KilometerSystem } from 'src/graphics/signal/Signal';
import { state } from 'src/protos/device_state'; import { state } from 'src/protos/device_state';
import {
GraphicApp,
GraphicInteractionPlugin,
JlGraphic,
} from 'src/jl-graphic';
import {
ForkHitArea,
TurnoutSectionHitArea,
} from 'src/graphics/turnout/TurnoutDrawAssistant';
import { ContextMenu } from 'src/jl-graphic/ui/ContextMenu';
import { MenuItemOptions } from 'src/jl-graphic/ui/Menu';
import { useLineStore } from 'src/stores/line-store';
import { setSwitchPosition } from 'src/api/Simulation';
function getDefaultEndPoint() { function getDefaultEndPoint() {
return { return {
@ -18,6 +31,68 @@ function getDefaultEndPoint() {
}; };
} }
const setNormalPosition: MenuItemOptions = { name: '设置定位' };
const setReversePosition: MenuItemOptions = { name: '设置反位' };
const TurnoutOperationMenu: ContextMenu = ContextMenu.init({
name: 'Turnout操作',
groups: [{ items: [setNormalPosition, setReversePosition] }],
});
export class TurnoutOperationPlugin extends GraphicInteractionPlugin<Turnout> {
static Name = 'turnout_operate_menu';
constructor(app: GraphicApp) {
super(TurnoutOperationPlugin.Name, app);
app.registerMenu(TurnoutOperationMenu);
}
static init(app: GraphicApp) {
return new TurnoutOperationPlugin(app);
}
filter(...grahpics: JlGraphic[]): Turnout[] | undefined {
return grahpics.filter<Turnout>((g): g is Turnout => g instanceof Turnout);
}
bind(g: Turnout): void {
g.graphics.fork.eventMode = 'static';
g.graphics.fork.cursor = 'pointer';
g.graphics.fork.hitArea = new ForkHitArea(g);
g.graphics.sections.forEach((sectionGraphic) => {
sectionGraphic.eventMode = 'static';
sectionGraphic.cursor = 'pointer';
sectionGraphic.hitArea = new TurnoutSectionHitArea(sectionGraphic);
});
g.on('rightclick', this.onContextMenu, this);
}
unbind(g: Turnout): void {
g.graphics.fork.eventMode = 'none';
g.graphics.sections.forEach((sectionGraphic) => {
sectionGraphic.eventMode = 'none';
});
g.off('rightclick', this.onContextMenu);
}
onContextMenu(e: FederatedMouseEvent) {
const target = e.target as DisplayObject;
const turnout = target.getGraphic<Turnout>();
if (!turnout) return;
this.app.updateSelected(turnout);
const simulationId = useLineStore().simulationId || '';
const setPosition = async (normal: boolean) => {
setSwitchPosition({
simulationId,
switchIndex: turnout.datas.index,
turnNormal: normal,
turnReverse: !normal,
});
};
setNormalPosition.handler = async () => {
await setPosition(true);
};
setReversePosition.handler = async () => {
await setPosition(false);
};
TurnoutOperationMenu.open(e.global);
}
}
export class TurnoutData extends GraphicDataBase implements ITurnoutData { export class TurnoutData extends GraphicDataBase implements ITurnoutData {
constructor(data?: graphicData.Turnout) { constructor(data?: graphicData.Turnout) {
let turnout = new graphicData.Turnout(); let turnout = new graphicData.Turnout();

View File

@ -26,7 +26,11 @@ import {
StationState, StationState,
} from './graphics/StationInteraction'; } from './graphics/StationInteraction';
import { Station, StationTemplate } from 'src/graphics/station/Station'; import { Station, StationTemplate } from 'src/graphics/station/Station';
import { TurnoutData, TurnoutStates } from './graphics/TurnoutInteraction'; import {
TurnoutData,
TurnoutOperationPlugin,
TurnoutStates,
} from './graphics/TurnoutInteraction';
import { Turnout, TurnoutTemplate } from 'src/graphics/turnout/Turnout'; import { Turnout, TurnoutTemplate } from 'src/graphics/turnout/Turnout';
import { SectionData } from './graphics/SectionInteraction'; import { SectionData } from './graphics/SectionInteraction';
import { Section, SectionTemplate } from 'src/graphics/section/Section'; import { Section, SectionTemplate } from 'src/graphics/section/Section';
@ -145,6 +149,7 @@ export function initLineApp(dom: HTMLElement): GraphicApp {
Station.Type, Station.Type,
SectionLink.Type, SectionLink.Type,
Train.Type, Train.Type,
Turnout.Type,
], ],
}, },
}); });
@ -153,6 +158,7 @@ export function initLineApp(dom: HTMLElement): GraphicApp {
StationOperateInteraction.init(lineApp); StationOperateInteraction.init(lineApp);
SectionLinkOperateInteraction.init(lineApp); SectionLinkOperateInteraction.init(lineApp);
TrainOperateInteraction.init(lineApp); TrainOperateInteraction.init(lineApp);
TurnoutOperationPlugin.init(lineApp);
// 画布右键菜单 // 画布右键菜单
lineApp.registerMenu(DefaultCanvasMenu); lineApp.registerMenu(DefaultCanvasMenu);
lineApp.canvas.on('_rightclick', (e) => { lineApp.canvas.on('_rightclick', (e) => {
@ -258,7 +264,7 @@ export async function loadLineDatas(app: GraphicApp) {
messageConverter: (message: Uint8Array) => { messageConverter: (message: Uint8Array) => {
const states: GraphicState[] = []; const states: GraphicState[] = [];
const storage = state.PushedDevicesStatus.deserialize(message); const storage = state.PushedDevicesStatus.deserialize(message);
console.log(storage, 'storage'); // console.log(storage, 'storage');
if (storage.all) { if (storage.all) {
storage.allStatus.sectionState.forEach((item) => { storage.allStatus.sectionState.forEach((item) => {
if (state.SectionType[item.type] == 'Axle') { if (state.SectionType[item.type] == 'Axle') {

View File

@ -100,7 +100,6 @@ export class rectGraphic extends Container {
this.addChild(this.rectGraphic); this.addChild(this.rectGraphic);
} }
draw(state: IPlatformState): void { draw(state: IPlatformState): void {
console.info(state);
const rectGraphic = this.rectGraphic; const rectGraphic = this.rectGraphic;
rectGraphic.clear(); rectGraphic.clear();
const fillColor = PlatformColorEnum.white; const fillColor = PlatformColorEnum.white;
@ -139,7 +138,6 @@ export class doorGraphic extends Container {
this.addChild(this.doorCloseGraphic); this.addChild(this.doorCloseGraphic);
} }
draw(stateData: IPlatformState): void { draw(stateData: IPlatformState): void {
console.info(stateData);
const doorGraphic = this.doorGraphic; const doorGraphic = this.doorGraphic;
const doorCloseGraphic = this.doorCloseGraphic; const doorCloseGraphic = this.doorCloseGraphic;
doorGraphic.clear(); doorGraphic.clear();

View File

@ -177,7 +177,7 @@ export class Turnout extends JlGraphic {
} }
doRepaint(): void { doRepaint(): void {
console.log(this.states); // console.log(this.states);
const { pointB, pointC } = this.datas; const { pointB, pointC } = this.datas;
if (this.states.normal) { if (this.states.normal) {
this.graphics.fork.paint(pointB[0]); this.graphics.fork.paint(pointB[0]);

View File

@ -69,34 +69,7 @@ export class TurnoutDraw extends GraphicDrawAssistant<
} }
} }
export class TurnoutHitArea implements IHitArea { export class ForkHitArea implements IHitArea {
turnout: Turnout;
constructor(turnout: Turnout) {
this.turnout = turnout;
}
contains(x: number, y: number): boolean {
const { pointA, pointB, pointC } = this.turnout.datas;
return (
polylinePoint(
[...pointA, { x: 0, y: 0 }],
{ x, y },
TurnoutConsts.lineWidth
) ||
polylinePoint(
[...pointB, { x: 0, y: 0 }],
{ x, y },
TurnoutConsts.lineWidth
) ||
polylinePoint(
[...pointC, { x: 0, y: 0 }],
{ x, y },
TurnoutConsts.lineWidth
)
);
}
}
class ForkHitArea implements IHitArea {
turnout: Turnout; turnout: Turnout;
constructor(turnout: Turnout) { constructor(turnout: Turnout) {
this.turnout = turnout; this.turnout = turnout;
@ -128,7 +101,7 @@ class ForkHitArea implements IHitArea {
} }
} }
class TurnoutSectionHitArea implements IHitArea { export class TurnoutSectionHitArea implements IHitArea {
section: TurnoutSection; section: TurnoutSection;
constructor(section: TurnoutSection) { constructor(section: TurnoutSection) {
this.section = section; this.section = section;