Merge branch 'master' of git.code.tencent.com:beijing-rtss-test/bj-rtss-client

This commit is contained in:
Yuan 2023-07-12 14:14:42 +08:00
commit ee3de04ae5
13 changed files with 634 additions and 90 deletions

@ -1 +1 @@
Subproject commit 2a1a7156c02ee902b1801f022ffd8aa6b763c66b
Subproject commit f0f415273f5e188db87ee361e6808e4ec90ceda1

@ -1 +1 @@
Subproject commit f89c8eb48de7b2e39a93c4aab9b4e5ff1a9e91b4
Subproject commit 0a0cb0a77afd9783081c2dc6ba19687b0b3aa0f7

View File

@ -13,6 +13,53 @@
@blur="onUpdate"
label="编号"
/>
<q-checkbox
v-model="sectionLinkModel.up"
label="是否上行"
@update:model-value="onUpdate"
/>
<q-list bordered separator class="rounded-borders">
<q-item>
<q-item-section no-wrap class="q-gutter-y-sm column">
<q-item-label> A端关联设备 </q-item-label>
<div class="q-gutter-sm row">
<q-chip square color="primary" text-color="white">
{{ aSimRef }}
</q-chip>
</div>
</q-item-section>
</q-item>
<q-item>
<q-item-section no-wrap class="q-gutter-y-sm column">
<q-item-label> B端关联设备 </q-item-label>
<div class="q-gutter-sm row">
<q-chip square color="primary" text-color="white">
{{ bSimRef }}
</q-chip>
</div>
</q-item-section>
</q-item>
<q-item>
<q-item-section no-wrap class="q-gutter-y-sm column">
<q-item-label> A端关联端口设备 </q-item-label>
<div class="q-gutter-sm row">
<q-chip square color="primary" text-color="white">
{{ aRef }}
</q-chip>
</div>
</q-item-section>
</q-item>
<q-item>
<q-item-section no-wrap class="q-gutter-y-sm column">
<q-item-label> B端关联端口设备 </q-item-label>
<div class="q-gutter-sm row">
<q-chip square color="primary" text-color="white">
{{ bRef }}
</q-chip>
</div>
</q-item-section>
</q-item>
</q-list>
</q-form>
</template>
@ -20,16 +67,61 @@
import { SectionLink } from 'src/graphics/sectionLink/SectionLink';
import { SectionLinkData } from 'src/drawApp/graphics/SectionLinkInteraction';
import { useDrawStore } from 'src/stores/draw-store';
import { shallowRef, watchEffect } from 'vue';
import { shallowRef, watchEffect, ref } from 'vue';
import { AxleCounting } from 'src/graphics/axleCounting/AxleCounting';
import { Turnout } from 'src/graphics/turnout/Turnout';
const drawStore = useDrawStore();
const sectionLinkModel = shallowRef(new SectionLinkData());
const aSimRef = ref('');
const bSimRef = ref('');
const aRef = ref('');
const bRef = ref('');
watchEffect(() => {
const sectionLink = drawStore.selectedGraphic;
const portList = ['A', 'B', 'C'];
if (sectionLink && sectionLink instanceof SectionLink) {
sectionLinkModel.value = sectionLink.saveData();
aSimRef.value = '';
bSimRef.value = '';
aRef.value = '';
bRef.value = '';
if (sectionLinkModel.value.aSimRef) {
const g = drawStore
.getDrawApp()
.queryStore.queryById(sectionLinkModel.value.aSimRef.id) as
| AxleCounting
| Turnout;
aSimRef.value = g.datas.code;
}
if (sectionLinkModel.value.bSimRef) {
const g = drawStore
.getDrawApp()
.queryStore.queryById(sectionLinkModel.value.bSimRef.id) as
| AxleCounting
| Turnout;
bSimRef.value = g.datas.code;
}
if (sectionLinkModel.value.aRef) {
const g = drawStore
.getDrawApp()
.queryStore.queryById(sectionLinkModel.value.aRef.id) as
| SectionLink
| Turnout;
aRef.value =
g.datas.code + '_' + portList[sectionLinkModel.value.aRef.devicePort];
}
if (sectionLinkModel.value.bRef) {
const g = drawStore
.getDrawApp()
.queryStore.queryById(sectionLinkModel.value.bRef.id) as
| SectionLink
| Turnout;
bRef.value =
g.datas.code + '_' + portList[sectionLinkModel.value.bRef.devicePort];
}
}
});

View File

@ -39,11 +39,35 @@ export class SectionLinkData
(p) => new graphicData.Point({ x: p.x, y: p.y })
);
}
get refDevice(): string {
return this.data.refDevice;
get up(): boolean {
return this.data.up;
}
set refDevice(v: string) {
this.data.refDevice = v;
set up(v: boolean) {
this.data.up = v;
}
get aSimRef(): graphicData.SimpleRef {
return this.data.aSimRef;
}
set aSimRef(v: graphicData.SimpleRef) {
this.data.aSimRef = v;
}
get bSimRef(): graphicData.SimpleRef {
return this.data.bSimRef;
}
set bSimRef(v: graphicData.SimpleRef) {
this.data.bSimRef = v;
}
get aRef(): graphicData.RelatedRef {
return this.data.aRef;
}
set aRef(v: graphicData.RelatedRef) {
this.data.aRef = v;
}
get bRef(): graphicData.RelatedRef {
return this.data.bRef;
}
set bRef(v: graphicData.RelatedRef) {
this.data.bRef = v;
}
clone(): SectionLinkData {

View File

@ -9,6 +9,7 @@ import {
GraphicApp,
GraphicData,
JlDrawApp,
JlGraphic,
KeyListener,
} from 'src/jl-graphic';
import { ContextMenu } from 'src/jl-graphic/ui/ContextMenu';
@ -77,6 +78,7 @@ import {
LogicSectionTemplate,
} from 'src/graphics/logicSection/LogicSection';
import { LogicSectionData } from './graphics/LogicSectionInteraction';
import { Notify } from 'quasar';
// export function fromStoragePoint(p: graphicData.Point): Point {
// return new Point(p.x, p.y);
@ -233,8 +235,18 @@ export function initDrawApp(dom: HTMLElement): JlDrawApp {
];
DrawSignalInteraction.init(app);
}
app.setOptions({ drawAssistants: drawAssistants });
const isSupportDeletion = (g: JlGraphic) => {
if (g.type === LogicSection.Type && g.selected) {
Notify.create({
type: 'warning',
message: '逻辑区段不支持删除',
timeout: 1000,
});
return false;
}
return true;
};
app.setOptions({ drawAssistants: drawAssistants, isSupportDeletion });
// 画布右键菜单
app.registerMenu(DefaultCanvasMenu);
@ -446,9 +458,9 @@ export async function loadDrawDatas(app: GraphicApp) {
storage.axleCountingSections.forEach((axleCountingSection) => {
datas.push(new AxleCountingSectionData(axleCountingSection));
});
storage.logicSections.forEach((logicSection) => {
datas.push(new LogicSectionData(logicSection));
});
// storage.logicSections.forEach((logicSection) => {
// datas.push(new LogicSectionData(logicSection));
// });
await app.loadGraphic(datas);
} else {
app.loadGraphic([]);

View File

@ -114,3 +114,8 @@ export interface IRelatedRefData {
id: string; //关联的设备ID
devicePort: graphicData.RelatedRef.DevicePort; //关联的设备端口
}
export interface ISimpleRefData {
deviceType: graphicData.SimpleRef.DeviceType;
id: string;
}

View File

@ -15,7 +15,7 @@ import {
AxleCounting,
AxleCountingTemplate,
} from './AxleCounting';
import { Section, SectionPort, SectionType } from '../section/Section';
import { Section, SectionPort } from '../section/Section';
import { Turnout, TurnoutPort } from '../turnout/Turnout';
import { IRelatedRefData, createRelatedRefProto } from '../CommonGraphics';
import { Signal } from '../signal/Signal';
@ -191,12 +191,6 @@ export class AxleCountingDraw extends GraphicDrawAssistant<
if (axleCountingPs.y > height.y) {
direction = -1;
}
if (
section.datas.sectionType === SectionType.Logic ||
section.datas.children.includes(refDevice.id)
) {
return;
}
if (refDevice.type == Section.Type || refDevice.type == Turnout.Type)
this.draw(
axleCountingPs,

View File

@ -394,7 +394,6 @@ export class AxleCountingSectionInteraction extends GraphicInteractionPlugin<Axl
),
num
);
// let codeAppend = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.slice(0, num);
if (
(dir === 'ltr' &&
axleCountingSectionData.points[0].x >
@ -407,9 +406,8 @@ export class AxleCountingSectionInteraction extends GraphicInteractionPlugin<Axl
axleCountingSectionData.points.length - 1
].x)
) {
// codeAppend = codeAppend.split('').reverse().join('');
}
points.forEach((ps, i) => {
points.forEach((ps) => {
const data = new LogicSectionData();
data.id = GraphicIdGenerator.next();
data.axleSectionId = axleCountingSection.id;

View File

@ -9,14 +9,23 @@ import {
movePointAlongNormal,
} from 'src/jl-graphic';
import { ILineGraphic } from 'src/jl-graphic/plugins/GraphicEditPlugin';
import { IRelatedRefData, ISimpleRefData } from '../CommonGraphics';
export interface ISectionLinkData extends GraphicData {
get code(): string; // 编号
set code(v: string);
get points(): IPointData[];
set points(points: IPointData[]);
get refDevice(): string;
set refDevice(v: string);
get up(): boolean;
set up(v: boolean);
get aSimRef(): ISimpleRefData;
set aSimRef(v: ISimpleRefData);
get bSimRef(): ISimpleRefData;
set bSimRef(v: ISimpleRefData);
get aRef(): IRelatedRefData;
set aRef(v: IRelatedRefData);
get bRef(): IRelatedRefData;
set bRef(v: IRelatedRefData);
clone(): ISectionLinkData;
copyFrom(data: ISectionLinkData): void;
eq(other: ISectionLinkData): boolean;

View File

@ -25,7 +25,11 @@ import { Section } from '../section/Section';
import { Turnout } from '../turnout/Turnout';
import { AxleCounting } from '../axleCounting/AxleCounting';
import { IRelatedRefData } from '../CommonGraphics';
import { graphicData } from 'src/protos/stationLayoutGraphics';
const rrDevicePort = graphicData.RelatedRef.DevicePort;
const rrDeviceType = graphicData.RelatedRef.DeviceType;
const srDeviceType = graphicData.SimpleRef.DeviceType;
export class SectionLinkDraw extends GraphicDrawAssistant<
SectionLinkTemplate,
ISectionLinkData
@ -59,15 +63,18 @@ export class SectionLinkDraw extends GraphicDrawAssistant<
}
});
this.graphic.lineTo(cp.x, cp.y);
console.log(cp, '000');
}
prepareData(data: ISectionLinkData): boolean {
console.log(this.points, '000');
data.points = this.points;
return true;
}
generateBySection(section: Section) {
generateBySection(
section: Section,
refData: IRelatedRefData,
axle1: AxleCounting,
axle2: AxleCounting
): SectionLink {
const sectionLink = new SectionLink();
sectionLink.loadData(this.graphicTemplate.datas);
sectionLink.id = GraphicIdGenerator.next();
@ -76,31 +83,83 @@ export class SectionLinkDraw extends GraphicDrawAssistant<
points.push(section.localToCanvasPoint(p));
});
sectionLink.datas.points = points;
const refAxle1 = this.buildSimpleRef(axle1.id, srDeviceType.AxleCounting);
const refAxle2 = this.buildSimpleRef(axle2.id, srDeviceType.AxleCounting);
/**
* link AB端 A端一定在左侧AB端是否倒序
*/
if (points[0].x > points[points.length - 1].x) {
if (refData.devicePort === 0) {
sectionLink.datas.aSimRef = refAxle2;
sectionLink.datas.bSimRef = refAxle1;
} else {
sectionLink.datas.aSimRef = refAxle1;
sectionLink.datas.bSimRef = refAxle2;
}
} else if (points[0].x < points[points.length - 1].x) {
if (refData.devicePort === 0) {
sectionLink.datas.aSimRef = refAxle1;
sectionLink.datas.bSimRef = refAxle2;
} else {
sectionLink.datas.aSimRef = refAxle2;
sectionLink.datas.bSimRef = refAxle1;
}
} else {
throw new Error('无法判断linkAB端');
}
this.storeGraphic(sectionLink);
return sectionLink;
}
generateByTurnoutAxle(turnout: Turnout, port: number) {
generateByTurnoutAxle(
turnout: Turnout,
port: graphicData.RelatedRef.DevicePort,
axle: AxleCounting
): SectionLink {
const sectionLink = new SectionLink();
sectionLink.loadData(this.graphicTemplate.datas);
sectionLink.id = GraphicIdGenerator.next();
const forkP = new Point(turnout.position.x, turnout.position.y);
const points: IPointData[] = [forkP];
if (port === 0) {
const refTurnout = this.buildRelatedRef(
turnout.id,
rrDeviceType.Turnout,
port
);
const refSimTurnout = this.buildSimpleRef(turnout.id, srDeviceType.Turnout);
const refAxle = this.buildSimpleRef(axle.id, srDeviceType.AxleCounting);
if (port === rrDevicePort.A) {
turnout.datas.pointA.forEach((p) => {
points.push(turnout.localToCanvasPoint(p));
});
} else if (port === 1) {
} else if (port === rrDevicePort.B) {
turnout.datas.pointB.forEach((p) => {
points.push(turnout.localToCanvasPoint(p));
});
} else if (port === 2) {
} else if (port === rrDevicePort.C) {
turnout.datas.pointC.forEach((p) => {
points.push(turnout.localToCanvasPoint(p));
});
}
if (points[0].x > points[points.length - 1].x) {
sectionLink.datas.aSimRef = refAxle;
sectionLink.datas.bSimRef = refSimTurnout;
sectionLink.datas.bRef = refTurnout;
} else if (points[0].x < points[points.length - 1].x) {
sectionLink.datas.bSimRef = refAxle;
sectionLink.datas.aSimRef = refSimTurnout;
sectionLink.datas.aRef = refTurnout;
} else {
throw new Error('无法判断linkAB端');
}
sectionLink.datas.points = points;
this.storeGraphic(sectionLink);
return sectionLink;
}
generateByTurnout(turnout: Turnout, port: number, pRef: IRelatedRefData) {
generateByTurnout(
turnout: Turnout,
port: graphicData.RelatedRef.DevicePort,
pRef: IRelatedRefData
) {
const refg = this.app.queryStore.queryById(pRef.id) as Turnout;
const sectionLink = new SectionLink();
sectionLink.loadData(this.graphicTemplate.datas);
@ -108,6 +167,31 @@ export class SectionLinkDraw extends GraphicDrawAssistant<
const forkP1 = new Point(refg.position.x, refg.position.y);
const forkP2 = new Point(turnout.position.x, turnout.position.y);
const points: IPointData[] = [forkP1];
const refTurnout1 = this.buildRelatedRef(
turnout.id,
rrDeviceType.Turnout,
port
);
const refTurnout2 = this.buildRelatedRef(
pRef.id,
rrDeviceType.Turnout,
pRef.devicePort
);
const refSimT1 = this.buildSimpleRef(turnout.id, srDeviceType.Turnout);
const refSimT2 = this.buildSimpleRef(pRef.id, srDeviceType.Turnout);
if (forkP1.x > forkP2.x) {
sectionLink.datas.aSimRef = refSimT2;
sectionLink.datas.bSimRef = refSimT1;
sectionLink.datas.aRef = refTurnout2;
sectionLink.datas.bRef = refTurnout1;
} else if (forkP1.x < forkP2.x) {
sectionLink.datas.aSimRef = refSimT1;
sectionLink.datas.bSimRef = refSimT2;
sectionLink.datas.aRef = refTurnout1;
sectionLink.datas.bRef = refTurnout2;
} else {
throw new Error('无法判断linkAB端');
}
if (pRef.devicePort === 0) {
refg.datas.pointA.forEach((p) => {
points.push(refg.localToCanvasPoint(p));
@ -122,11 +206,11 @@ export class SectionLinkDraw extends GraphicDrawAssistant<
});
}
let dataPoint: IPointData[] = [];
if (port === 0) {
if (port === rrDevicePort.A) {
dataPoint = turnout.datas.pointA;
} else if (port === 1) {
} else if (port === rrDevicePort.B) {
dataPoint = turnout.datas.pointB;
} else if (port === 2) {
} else if (port === rrDevicePort.C) {
dataPoint = turnout.datas.pointC;
}
const pLength = dataPoint.length;
@ -137,80 +221,208 @@ export class SectionLinkDraw extends GraphicDrawAssistant<
sectionLink.datas.points = points;
this.storeGraphic(sectionLink);
}
/**
* link关系link关联关系提供数据依据
* @param map
* @param axleId
* @param linkId
*/
cacheAxleLinkRelation(
map: Map<string, string[]>,
axleId: string,
linkId: string
) {
const list = map.get(axleId);
if (list) {
list.push(linkId);
map.set(axleId, list);
} else {
map.set(axleId, [linkId]);
}
}
/**
*
* @param id
* @param deviceType
* @returns
*/
buildSimpleRef(id: string, deviceType: graphicData.SimpleRef.DeviceType) {
return new graphicData.SimpleRef({ deviceType, id });
}
/**
*
* @param id
* @param deviceType
* @param devicePort
* @returns
*/
buildRelatedRef(
id: string,
deviceType: graphicData.RelatedRef.DeviceType,
devicePort: graphicData.RelatedRef.DevicePort
): IRelatedRefData {
return new graphicData.RelatedRef({ id, deviceType, devicePort });
}
/**构建link之间的关联关系 */
buildLinkRef(map: Map<string, string[]>) {
map.forEach((value) => {
if (value.length === 2) {
const link1 = this.app.queryStore.queryById(value[0]) as SectionLink;
const link2 = this.app.queryStore.queryById(value[1]) as SectionLink;
if (link1.datas.aSimRef.id === link2.datas.bSimRef.id) {
link1.datas.aRef = this.buildRelatedRef(
link2.id,
rrDeviceType.SectionLink,
rrDevicePort.B
);
link2.datas.bRef = this.buildRelatedRef(
link1.id,
rrDeviceType.SectionLink,
rrDevicePort.A
);
} else if (link1.datas.bSimRef.id === link2.datas.aSimRef.id) {
link1.datas.bRef = this.buildRelatedRef(
link2.id,
rrDeviceType.SectionLink,
rrDevicePort.A
);
link2.datas.aRef = this.buildRelatedRef(
link1.id,
rrDeviceType.SectionLink,
rrDevicePort.B
);
} else if (link1.datas.aSimRef.id === link2.datas.aSimRef.id) {
link1.datas.aRef = this.buildRelatedRef(
link2.id,
rrDeviceType.SectionLink,
rrDevicePort.A
);
link2.datas.aRef = this.buildRelatedRef(
link1.id,
rrDeviceType.SectionLink,
rrDevicePort.A
);
} else if (link1.datas.bSimRef.id === link2.datas.bSimRef.id) {
link1.datas.bRef = this.buildRelatedRef(
link2.id,
rrDeviceType.SectionLink,
rrDevicePort.B
);
link2.datas.bRef = this.buildRelatedRef(
link1.id,
rrDeviceType.SectionLink,
rrDevicePort.B
);
} else {
throw new Error('构建link关联关系错误');
}
}
});
}
/**
* link的道岔端口
* @param map
* @param deviceId
* @param devicePort
*/
cacheTurnoutPort(
map: Map<string, graphicData.RelatedRef.DevicePort[]>,
deviceId: string,
devicePort: graphicData.RelatedRef.DevicePort
) {
const pList = map.get(deviceId);
if (pList) {
pList.push(devicePort);
map.set(deviceId, pList);
} else {
map.set(deviceId, [devicePort]);
}
}
/**
* link
*/
oneGenerates() {
const axleCountingList = this.app.queryStore.queryByType<AxleCounting>(
AxleCounting.Type
);
const turnoutList = this.app.queryStore.queryByType<Turnout>(Turnout.Type);
const generated = new Map();
// 已生成link和计轴的关联关系数据
const axleRefLink: Map<string, string[]> = new Map();
// 已生成link的道岔各个端口缓存数据
const tpMap: Map<string, graphicData.RelatedRef.DevicePort[]> = new Map();
// 已生成link的section数据两计轴之间的区段
const gSectionList: string[] = [];
axleCountingList.forEach((axleCounting) => {
axleCounting.datas.axleCountingRef.forEach((device) => {
const g = this.app.queryStore.queryById(device.id);
if (g.type === Section.Type && !generated.get(device.id)) {
const g1 = axleCountingList.find((axleCounting) => {
const s = axleCounting.datas.axleCountingRef.find(
(ref) => ref.id === device.id
if (g.type === Section.Type && !gSectionList.includes(device.id)) {
const axle1 = axleCountingList.find((axleCountingNew) => {
const s = axleCountingNew.datas.axleCountingRef.find(
(ref) =>
ref.id === device.id && axleCountingNew.id !== axleCounting.id
);
return s;
});
if (g1) {
this.generateBySection(g as Section);
generated.set(g.id, ['A', 'B']);
if (axle1) {
const link = this.generateBySection(
g as Section,
device,
axleCounting,
axle1
);
gSectionList.push(g.id);
this.cacheAxleLinkRelation(axleRefLink, axleCounting.id, link.id);
this.cacheAxleLinkRelation(axleRefLink, axle1.id, link.id);
}
} else if (g.type === Turnout.Type) {
this.generateByTurnoutAxle(g as Turnout, device.devicePort);
if (generated.get(g.id)) {
const pList = generated.get(g.id);
pList.push(device.devicePort);
generated.set(g.id, pList);
} else {
generated.set(g.id, [device.devicePort]);
}
const link = this.generateByTurnoutAxle(
g as Turnout,
device.devicePort,
axleCounting
);
this.cacheAxleLinkRelation(axleRefLink, axleCounting.id, link.id);
this.cacheTurnoutPort(tpMap, g.id, device.devicePort);
}
});
});
turnoutList.forEach((turnout) => {
const pList = generated.get(turnout.id);
const pList = tpMap.get(turnout.id);
if (!pList) {
return;
}
let pRef = null;
if (
!pList.includes(0) &&
!pList.includes(rrDevicePort.A) &&
turnout.datas.paRef &&
turnout.datas.paRef.deviceType === 1
turnout.datas.paRef.deviceType === rrDeviceType.Turnout
) {
pRef = turnout.datas.paRef;
this.generateByTurnout(turnout, 0, pRef);
this.generateByTurnout(turnout, rrDevicePort.A, pRef);
}
if (
!pList.includes(1) &&
!pList.includes(rrDevicePort.B) &&
turnout.datas.pbRef &&
turnout.datas.pbRef.deviceType === 1
turnout.datas.pbRef.deviceType === rrDeviceType.Turnout
) {
pRef = turnout.datas.pbRef;
this.generateByTurnout(turnout, 1, pRef);
this.generateByTurnout(turnout, rrDevicePort.B, pRef);
}
if (
!pList.includes(2) &&
!pList.includes(rrDevicePort.C) &&
turnout.datas.pcRef &&
turnout.datas.pcRef.deviceType === 1
turnout.datas.pcRef.deviceType === rrDeviceType.Turnout
) {
pRef = turnout.datas.pcRef;
this.generateByTurnout(turnout, 2, pRef);
this.generateByTurnout(turnout, rrDevicePort.C, pRef);
}
generated.set(turnout.id, [0, 1, 2]);
tpMap.set(turnout.id, [rrDevicePort.A, rrDevicePort.B, rrDevicePort.C]);
if (pRef) {
if (generated.get(pRef.id)) {
const pListn = generated.get(pRef.id);
pListn.push(pRef.devicePort);
generated.set(pRef.id, pListn);
} else {
generated.set(pRef.id, [pRef.devicePort]);
}
this.cacheTurnoutPort(tpMap, pRef.id, pRef.devicePort);
}
});
this.buildLinkRef(axleRefLink);
}
clearCache(): void {
this.points = [];
this.graphic.clear();

View File

@ -74,10 +74,7 @@ export class SeparatorDraw extends GraphicDrawAssistant<
allR.forEach((relation, index) => {
const r = relation.getRelationParam(section);
const other = relation.getOtherRelationParam(section);
if (!section.datas.children.includes(other.g.id)) {
// 排除物理区段和自身逻辑区段的关联关系
port.push(r.param);
}
port.push(r.param);
if (!rMap.has(setKey(r))) {
rMap.set(setKey(r), { ...r });
}

View File

@ -737,7 +737,7 @@ export class GraphicApp extends EventEmitter<GraphicAppEvents> {
deleteGraphics(...graphics: JlGraphic[]): JlGraphic[] {
const dels = graphics.filter((g) => {
if (
this._options?.isSupportDeletion &&
this._options?.isSupportDeletion == undefined ||
this._options.isSupportDeletion(g)
) {
this.doDeleteGraphics(g);

View File

@ -3396,7 +3396,8 @@ export namespace graphicData {
Section = 0,
Turnout = 1,
TrainWindow = 2,
AxleCounting = 3
AxleCounting = 3,
SectionLink = 4
}
export enum DevicePort {
A = 0,
@ -3610,13 +3611,113 @@ export namespace graphicData {
return Separator.deserialize(bytes);
}
}
export class SimpleRef extends pb_1.Message {
#one_of_decls: number[][] = [];
constructor(data?: any[] | {
deviceType?: SimpleRef.DeviceType;
id?: string;
}) {
super();
pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [], this.#one_of_decls);
if (!Array.isArray(data) && typeof data == "object") {
if ("deviceType" in data && data.deviceType != undefined) {
this.deviceType = data.deviceType;
}
if ("id" in data && data.id != undefined) {
this.id = data.id;
}
}
}
get deviceType() {
return pb_1.Message.getFieldWithDefault(this, 1, SimpleRef.DeviceType.Turnout) as SimpleRef.DeviceType;
}
set deviceType(value: SimpleRef.DeviceType) {
pb_1.Message.setField(this, 1, value);
}
get id() {
return pb_1.Message.getFieldWithDefault(this, 2, "") as string;
}
set id(value: string) {
pb_1.Message.setField(this, 2, value);
}
static fromObject(data: {
deviceType?: SimpleRef.DeviceType;
id?: string;
}): SimpleRef {
const message = new SimpleRef({});
if (data.deviceType != null) {
message.deviceType = data.deviceType;
}
if (data.id != null) {
message.id = data.id;
}
return message;
}
toObject() {
const data: {
deviceType?: SimpleRef.DeviceType;
id?: string;
} = {};
if (this.deviceType != null) {
data.deviceType = this.deviceType;
}
if (this.id != null) {
data.id = this.id;
}
return data;
}
serialize(): Uint8Array;
serialize(w: pb_1.BinaryWriter): void;
serialize(w?: pb_1.BinaryWriter): Uint8Array | void {
const writer = w || new pb_1.BinaryWriter();
if (this.deviceType != SimpleRef.DeviceType.Turnout)
writer.writeEnum(1, this.deviceType);
if (this.id.length)
writer.writeString(2, this.id);
if (!w)
return writer.getResultBuffer();
}
static deserialize(bytes: Uint8Array | pb_1.BinaryReader): SimpleRef {
const reader = bytes instanceof pb_1.BinaryReader ? bytes : new pb_1.BinaryReader(bytes), message = new SimpleRef();
while (reader.nextField()) {
if (reader.isEndGroup())
break;
switch (reader.getFieldNumber()) {
case 1:
message.deviceType = reader.readEnum();
break;
case 2:
message.id = reader.readString();
break;
default: reader.skipField();
}
}
return message;
}
serializeBinary(): Uint8Array {
return this.serialize();
}
static deserializeBinary(bytes: Uint8Array): SimpleRef {
return SimpleRef.deserialize(bytes);
}
}
export namespace SimpleRef {
export enum DeviceType {
Turnout = 0,
AxleCounting = 1
}
}
export class SectionLink extends pb_1.Message {
#one_of_decls: number[][] = [];
constructor(data?: any[] | {
common?: CommonInfo;
code?: string;
points?: Point[];
refDevice?: string;
up?: boolean;
aSimRef?: SimpleRef;
bSimRef?: SimpleRef;
aRef?: RelatedRef;
bRef?: RelatedRef;
}) {
super();
pb_1.Message.initialize(this, Array.isArray(data) ? data : [], 0, -1, [3], this.#one_of_decls);
@ -3630,8 +3731,20 @@ export namespace graphicData {
if ("points" in data && data.points != undefined) {
this.points = data.points;
}
if ("refDevice" in data && data.refDevice != undefined) {
this.refDevice = data.refDevice;
if ("up" in data && data.up != undefined) {
this.up = data.up;
}
if ("aSimRef" in data && data.aSimRef != undefined) {
this.aSimRef = data.aSimRef;
}
if ("bSimRef" in data && data.bSimRef != undefined) {
this.bSimRef = data.bSimRef;
}
if ("aRef" in data && data.aRef != undefined) {
this.aRef = data.aRef;
}
if ("bRef" in data && data.bRef != undefined) {
this.bRef = data.bRef;
}
}
}
@ -3656,17 +3769,57 @@ export namespace graphicData {
set points(value: Point[]) {
pb_1.Message.setRepeatedWrapperField(this, 3, value);
}
get refDevice() {
return pb_1.Message.getFieldWithDefault(this, 4, "") as string;
get up() {
return pb_1.Message.getFieldWithDefault(this, 4, false) as boolean;
}
set refDevice(value: string) {
set up(value: boolean) {
pb_1.Message.setField(this, 4, value);
}
get aSimRef() {
return pb_1.Message.getWrapperField(this, SimpleRef, 5) as SimpleRef;
}
set aSimRef(value: SimpleRef) {
pb_1.Message.setWrapperField(this, 5, value);
}
get has_aSimRef() {
return pb_1.Message.getField(this, 5) != null;
}
get bSimRef() {
return pb_1.Message.getWrapperField(this, SimpleRef, 6) as SimpleRef;
}
set bSimRef(value: SimpleRef) {
pb_1.Message.setWrapperField(this, 6, value);
}
get has_bSimRef() {
return pb_1.Message.getField(this, 6) != null;
}
get aRef() {
return pb_1.Message.getWrapperField(this, RelatedRef, 7) as RelatedRef;
}
set aRef(value: RelatedRef) {
pb_1.Message.setWrapperField(this, 7, value);
}
get has_aRef() {
return pb_1.Message.getField(this, 7) != null;
}
get bRef() {
return pb_1.Message.getWrapperField(this, RelatedRef, 8) as RelatedRef;
}
set bRef(value: RelatedRef) {
pb_1.Message.setWrapperField(this, 8, value);
}
get has_bRef() {
return pb_1.Message.getField(this, 8) != null;
}
static fromObject(data: {
common?: ReturnType<typeof CommonInfo.prototype.toObject>;
code?: string;
points?: ReturnType<typeof Point.prototype.toObject>[];
refDevice?: string;
up?: boolean;
aSimRef?: ReturnType<typeof SimpleRef.prototype.toObject>;
bSimRef?: ReturnType<typeof SimpleRef.prototype.toObject>;
aRef?: ReturnType<typeof RelatedRef.prototype.toObject>;
bRef?: ReturnType<typeof RelatedRef.prototype.toObject>;
}): SectionLink {
const message = new SectionLink({});
if (data.common != null) {
@ -3678,8 +3831,20 @@ export namespace graphicData {
if (data.points != null) {
message.points = data.points.map(item => Point.fromObject(item));
}
if (data.refDevice != null) {
message.refDevice = data.refDevice;
if (data.up != null) {
message.up = data.up;
}
if (data.aSimRef != null) {
message.aSimRef = SimpleRef.fromObject(data.aSimRef);
}
if (data.bSimRef != null) {
message.bSimRef = SimpleRef.fromObject(data.bSimRef);
}
if (data.aRef != null) {
message.aRef = RelatedRef.fromObject(data.aRef);
}
if (data.bRef != null) {
message.bRef = RelatedRef.fromObject(data.bRef);
}
return message;
}
@ -3688,7 +3853,11 @@ export namespace graphicData {
common?: ReturnType<typeof CommonInfo.prototype.toObject>;
code?: string;
points?: ReturnType<typeof Point.prototype.toObject>[];
refDevice?: string;
up?: boolean;
aSimRef?: ReturnType<typeof SimpleRef.prototype.toObject>;
bSimRef?: ReturnType<typeof SimpleRef.prototype.toObject>;
aRef?: ReturnType<typeof RelatedRef.prototype.toObject>;
bRef?: ReturnType<typeof RelatedRef.prototype.toObject>;
} = {};
if (this.common != null) {
data.common = this.common.toObject();
@ -3699,8 +3868,20 @@ export namespace graphicData {
if (this.points != null) {
data.points = this.points.map((item: Point) => item.toObject());
}
if (this.refDevice != null) {
data.refDevice = this.refDevice;
if (this.up != null) {
data.up = this.up;
}
if (this.aSimRef != null) {
data.aSimRef = this.aSimRef.toObject();
}
if (this.bSimRef != null) {
data.bSimRef = this.bSimRef.toObject();
}
if (this.aRef != null) {
data.aRef = this.aRef.toObject();
}
if (this.bRef != null) {
data.bRef = this.bRef.toObject();
}
return data;
}
@ -3714,8 +3895,16 @@ export namespace graphicData {
writer.writeString(2, this.code);
if (this.points.length)
writer.writeRepeatedMessage(3, this.points, (item: Point) => item.serialize(writer));
if (this.refDevice.length)
writer.writeString(4, this.refDevice);
if (this.up != false)
writer.writeBool(4, this.up);
if (this.has_aSimRef)
writer.writeMessage(5, this.aSimRef, () => this.aSimRef.serialize(writer));
if (this.has_bSimRef)
writer.writeMessage(6, this.bSimRef, () => this.bSimRef.serialize(writer));
if (this.has_aRef)
writer.writeMessage(7, this.aRef, () => this.aRef.serialize(writer));
if (this.has_bRef)
writer.writeMessage(8, this.bRef, () => this.bRef.serialize(writer));
if (!w)
return writer.getResultBuffer();
}
@ -3735,7 +3924,19 @@ export namespace graphicData {
reader.readMessage(message.points, () => pb_1.Message.addToRepeatedWrapperField(message, 3, Point.deserialize(reader), Point));
break;
case 4:
message.refDevice = reader.readString();
message.up = reader.readBool();
break;
case 5:
reader.readMessage(message.aSimRef, () => message.aSimRef = SimpleRef.deserialize(reader));
break;
case 6:
reader.readMessage(message.bSimRef, () => message.bSimRef = SimpleRef.deserialize(reader));
break;
case 7:
reader.readMessage(message.aRef, () => message.aRef = RelatedRef.deserialize(reader));
break;
case 8:
reader.readMessage(message.bRef, () => message.bRef = RelatedRef.deserialize(reader));
break;
default: reader.skipField();
}