2023-07-31 11:30:34 +08:00
|
|
|
|
package section
|
|
|
|
|
|
|
|
|
|
import (
|
2023-07-31 15:59:23 +08:00
|
|
|
|
"fmt"
|
|
|
|
|
|
2023-07-31 11:30:34 +08:00
|
|
|
|
"joylink.club/bj-rtsts-server/ats/verify/simulation/wayside/face"
|
|
|
|
|
"joylink.club/bj-rtsts-server/ats/verify/simulation/wayside/model/ref"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// 相邻端点(车档、计轴检测点、道岔岔心)定义的Link区段
|
|
|
|
|
// 地图做数据时,link区段的A端在左,link区段的B端在右,即上行方向A->B,下行方向B->A
|
|
|
|
|
type LinkSectionModel struct {
|
|
|
|
|
//轨道基本信息
|
|
|
|
|
face.DeviceModel
|
|
|
|
|
//true - 上行;false - 下行
|
|
|
|
|
Up bool
|
|
|
|
|
//link 的A端连接道岔
|
2023-07-31 15:59:23 +08:00
|
|
|
|
SwitchRefA *ref.SwitchRef
|
2023-07-31 11:30:34 +08:00
|
|
|
|
//link 的B端连接道岔
|
2023-07-31 15:59:23 +08:00
|
|
|
|
SwitchRefB *ref.SwitchRef
|
|
|
|
|
//link 的A端连接另一个link
|
|
|
|
|
LinkRefA *ref.LinkRef
|
|
|
|
|
//link 的B端连接另一个link
|
|
|
|
|
LinkRefB *ref.LinkRef
|
|
|
|
|
//link 的A端关联的计轴检测点
|
|
|
|
|
AxlePointA face.AxlePointDeviceModeller
|
|
|
|
|
//link 的B端关联的计轴检测点
|
|
|
|
|
AxlePointB face.AxlePointDeviceModeller
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取A端端点的图形id
|
|
|
|
|
func (dm *LinkSectionModel) FindPointAGraphicId() (string, error) {
|
|
|
|
|
if dm.SwitchRefA != nil {
|
|
|
|
|
return dm.SwitchRefA.SwitchDevice.GetGraphicId(), nil
|
|
|
|
|
}
|
|
|
|
|
if dm.AxlePointA != nil {
|
|
|
|
|
return dm.AxlePointA.GetGraphicId(), nil
|
|
|
|
|
}
|
|
|
|
|
return "", fmt.Errorf("gid为[%s]的A端端点不存在", dm.GraphicId)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取B端端点的图形id
|
|
|
|
|
func (dm *LinkSectionModel) FindPointBGraphicId() (string, error) {
|
|
|
|
|
if dm.SwitchRefB != nil {
|
|
|
|
|
return dm.SwitchRefB.SwitchDevice.GetGraphicId(), nil
|
|
|
|
|
}
|
|
|
|
|
if dm.AxlePointB != nil {
|
|
|
|
|
return dm.AxlePointB.GetGraphicId(), nil
|
|
|
|
|
}
|
|
|
|
|
return "", fmt.Errorf("gid为[%s]的B端端点不存在", dm.GraphicId)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 统计轨道端点数量,值为2才是正确的
|
|
|
|
|
func (dm *LinkSectionModel) EndPointsCount() int {
|
|
|
|
|
var count int = 0
|
|
|
|
|
if dm.AxlePointA != nil {
|
|
|
|
|
count++
|
|
|
|
|
}
|
|
|
|
|
if dm.AxlePointB != nil {
|
|
|
|
|
count++
|
|
|
|
|
}
|
|
|
|
|
if dm.SwitchRefA != nil {
|
|
|
|
|
count++
|
|
|
|
|
}
|
|
|
|
|
if dm.SwitchRefB != nil {
|
|
|
|
|
count++
|
|
|
|
|
}
|
|
|
|
|
return count
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 统计轨道两端连接设备的数量,值为1或2
|
|
|
|
|
func (dm *LinkSectionModel) RelationCount() int {
|
|
|
|
|
var count int = 0
|
|
|
|
|
if dm.SwitchRefA != nil {
|
|
|
|
|
count++
|
|
|
|
|
}
|
|
|
|
|
if dm.SwitchRefB != nil {
|
|
|
|
|
count++
|
|
|
|
|
}
|
|
|
|
|
if dm.LinkRefA != nil {
|
|
|
|
|
count++
|
|
|
|
|
}
|
|
|
|
|
if dm.LinkRefB != nil {
|
|
|
|
|
count++
|
|
|
|
|
}
|
|
|
|
|
return count
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取该轨道某个端口连接的轨道,如果有
|
|
|
|
|
func (dm *LinkSectionModel) FindLinkRefByPort(portEnum face.PortEnum) *ref.LinkRef {
|
|
|
|
|
switch portEnum {
|
|
|
|
|
case face.A:
|
|
|
|
|
{
|
|
|
|
|
return dm.LinkRefA
|
|
|
|
|
}
|
|
|
|
|
case face.B:
|
|
|
|
|
{
|
|
|
|
|
return dm.LinkRefB
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取该轨道某个端口连接的道岔,如果有
|
|
|
|
|
func (dm *LinkSectionModel) FindSwitchRefByPort(portEnum face.PortEnum) *ref.SwitchRef {
|
|
|
|
|
switch portEnum {
|
|
|
|
|
case face.A:
|
|
|
|
|
{
|
|
|
|
|
return dm.SwitchRefA
|
|
|
|
|
}
|
|
|
|
|
case face.B:
|
|
|
|
|
{
|
|
|
|
|
return dm.SwitchRefB
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return nil
|
2023-07-31 11:30:34 +08:00
|
|
|
|
}
|