118 lines
2.6 KiB
Go
118 lines
2.6 KiB
Go
package section
|
||
|
||
import (
|
||
"fmt"
|
||
|
||
"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端连接道岔
|
||
SwitchRefA *ref.SwitchRef
|
||
//link 的B端连接道岔
|
||
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
|
||
}
|