Merge branch 'master' of git.code.tencent.com:beijing-rtss-test/bj-rtss-client
This commit is contained in:
commit
ee3de04ae5
@ -1 +1 @@
|
||||
Subproject commit 2a1a7156c02ee902b1801f022ffd8aa6b763c66b
|
||||
Subproject commit f0f415273f5e188db87ee361e6808e4ec90ceda1
|
@ -1 +1 @@
|
||||
Subproject commit f89c8eb48de7b2e39a93c4aab9b4e5ff1a9e91b4
|
||||
Subproject commit 0a0cb0a77afd9783081c2dc6ba19687b0b3aa0f7
|
@ -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];
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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([]);
|
||||
|
@ -114,3 +114,8 @@ export interface IRelatedRefData {
|
||||
id: string; //关联的设备ID
|
||||
devicePort: graphicData.RelatedRef.DevicePort; //关联的设备端口
|
||||
}
|
||||
|
||||
export interface ISimpleRefData {
|
||||
deviceType: graphicData.SimpleRef.DeviceType;
|
||||
id: string;
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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 });
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user